@yearn-mechanics/yswaps
Version:
YSwaps will swap enabled strategie's funds from harvests
1,039 lines • 182 kB
JSON
{
"address": "0x7BAF843e06095f68F4990Ca50161C2C4E4e01ec6",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "_masterAdmin",
"type": "address"
},
{
"internalType": "address",
"name": "_swapperAdder",
"type": "address"
},
{
"internalType": "address",
"name": "_swapperSetter",
"type": "address"
},
{
"internalType": "address",
"name": "_strategyModifier",
"type": "address"
},
{
"internalType": "address",
"name": "_mechanicsRegistry",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "AllowanceShouldBeZero",
"type": "error"
},
{
"inputs": [],
"name": "InvalidAmountOut",
"type": "error"
},
{
"inputs": [],
"name": "InvalidSwapper",
"type": "error"
},
{
"inputs": [],
"name": "InvalidTrade",
"type": "error"
},
{
"inputs": [],
"name": "NotAsyncSwapper",
"type": "error"
},
{
"inputs": [],
"name": "NotSyncSwapper",
"type": "error"
},
{
"inputs": [],
"name": "SwapperInUse",
"type": "error"
},
{
"inputs": [],
"name": "ZeroAddress",
"type": "error"
},
{
"inputs": [],
"name": "ZeroAmount",
"type": "error"
},
{
"inputs": [],
"name": "ZeroSlippage",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "_receivedAmount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "_swapper",
"type": "address"
}
],
"name": "AsyncTradeExecuted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "DustSent",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256[]",
"name": "_receivedAmount",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "address",
"name": "_swapper",
"type": "address"
}
],
"name": "MultipleAsyncTradeExecuted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "previousAdminRole",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "newAdminRole",
"type": "bytes32"
}
],
"name": "RoleAdminChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleGranted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleRevoked",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_strategy",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_receivedAmount",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "_swapper",
"type": "address"
}
],
"name": "SyncTradeExecuted",
"type": "event"
},
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "ETH_ADDRESS",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "MASTER_ADMIN",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "STRATEGY",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "STRATEGY_MANAGER",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "SWAPPER_ADDER",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "SWAPPER_SETTER",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "__swappers",
"type": "address[]"
}
],
"name": "addSwappers",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_tokenIn",
"type": "address"
},
{
"internalType": "address",
"name": "_tokenOut",
"type": "address"
}
],
"name": "disable",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_strategy",
"type": "address"
},
{
"internalType": "address",
"name": "_tokenIn",
"type": "address"
},
{
"internalType": "address",
"name": "_tokenOut",
"type": "address"
}
],
"name": "disableByAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_tokenIn",
"type": "address"
},
{
"internalType": "address",
"name": "_tokenOut",
"type": "address"
}
],
"name": "enable",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "enabledTrades",
"outputs": [
{
"components": [
{
"internalType": "address",
"name": "_strategy",
"type": "address"
},
{
"internalType": "address",
"name": "_tokenIn",
"type": "address"
},
{
"internalType": "address",
"name": "_tokenOut",
"type": "address"
}
],
"internalType": "struct ITradeFactoryPositionsHandler.EnabledTrade[]",
"name": "_enabledTrades",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "_strategy",
"type": "address"
},
{
"internalType": "address",
"name": "_tokenIn",
"type": "address"
},
{
"internalType": "address",
"name": "_tokenOut",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_minAmountOut",
"type": "uint256"
}
],
"internalType": "struct ITradeFactoryExecutor.AsyncTradeExecutionDetails",
"name": "_tradeExecutionDetails",
"type": "tuple"
},
{
"internalType": "address",
"name": "_swapper",
"type": "address"
},
{
"internalType": "bytes",
"name": "_data",
"type": "bytes"
}
],
"name": "execute",
"outputs": [
{
"internalType": "uint256",
"name": "_receivedAmount",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "_tokenIn",
"type": "address"
},
{
"internalType": "address",
"name": "_tokenOut",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amountIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_maxSlippage",
"type": "uint256"
}
],
"internalType": "struct ITradeFactoryExecutor.SyncTradeExecutionDetails",
"name": "_tradeExecutionDetails",
"type": "tuple"
},
{
"internalType": "bytes",
"name": "_data",
"type": "bytes"
}
],
"name": "execute",
"outputs": [
{
"internalType": "uint256",
"name": "_receivedAmount",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "_strategy",
"type": "address"
},
{
"internalType": "address",
"name": "_tokenIn",
"type": "address"
},
{
"internalType": "address",
"name": "_tokenOut",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_minAmountOut",
"type": "uint256"
}
],
"internalType": "struct ITradeFactoryExecutor.AsyncTradeExecutionDetails[]",
"name": "_tradesExecutionDetails",
"type": "tuple[]"
},
{
"internalType": "address",
"name": "_swapper",
"type": "address"
},
{
"internalType": "bytes",
"name": "_data",
"type": "bytes"
}
],
"name": "execute",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "getRoleAdmin",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "grantRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "hasRole",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_mechanic",
"type": "address"
}
],
"name": "isMechanic",
"outputs": [
{
"internalType": "bool",
"name": "_isMechanic",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_swapper",
"type": "address"
}
],
"name": "isSwapper",
"outputs": [
{
"internalType": "bool",
"name": "_isSwapper",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "mechanicsRegistry",
"outputs": [
{
"internalType": "address",
"name": "_mechanicRegistry",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "__swappers",
"type": "address[]"
}
],
"name": "removeSwappers",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "renounceRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "revokeRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "address",
"name": "_token",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "sendDust",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "__mechanicsRegistry",
"type": "address"
}
],
"name": "setMechanicsRegistry",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_strategy",
"type": "address"
},
{
"internalType": "address",
"name": "_swapper",
"type": "address"
}
],
"name": "setStrategySyncSwapper",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "strategySyncSwapper",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_swapper",
"type": "address"
}
],
"name": "swapperStrategies",
"outputs": [
{
"internalType": "address[]",
"name": "_strategies",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "swappers",
"outputs": [
{
"internalType": "address[]",
"name": "_swappersList",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
}
],
"transactionHash": "0x416d28f1b1e66277b8309763ea0814d9db6ddea10ef79babcb7a318d31d195ef",
"receipt": {
"to": null,
"from": "0xB82193725471dC7bfaAB1a3AB93c7b42963F3265",
"contractAddress": "0x7BAF843e06095f68F4990Ca50161C2C4E4e01ec6",
"transactionIndex": 29,
"gasUsed": "3005031",
"logsBloom": "0x00000004000040000800000000000000080001008000000000000800001000000000000000000000000000000000000000800080000040000041000000000000000000000000004000000000000800000000000000000000000000000000000000000000020000400000000000000800000000000000000000000000000000000002000000000008000000000000000000000000008000000000000000000000000000000000000000000000800000000000000000400000041000000000000000000000000000000000800000000000000000000000000100000000000020000000000000000000000000000000004040000000040000000000000000001400",
"blockHash": "0xa11c1df6029be2c172e90f27e733234f18635e051d9a5e9d7d56f21f996b60dd",
"transactionHash": "0x416d28f1b1e66277b8309763ea0814d9db6ddea10ef79babcb7a318d31d195ef",
"logs": [
{
"transactionIndex": 29,
"blockNumber": 14212399,
"transactionHash": "0x416d28f1b1e66277b8309763ea0814d9db6ddea10ef79babcb7a318d31d195ef",
"address": "0x7BAF843e06095f68F4990Ca50161C2C4E4e01ec6",
"topics": [
"0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff",
"0x0b43cb2c88b4e8fc5d4ac1352ba889b22584df0c58c4b5b589731a1c9f6f29d3",
"0x0000000000000000000000000000000000000000000000000000000000000000",
"0x0b43cb2c88b4e8fc5d4ac1352ba889b22584df0c58c4b5b589731a1c9f6f29d3"
],
"data": "0x",
"logIndex": 26,
"blockHash": "0xa11c1df6029be2c172e90f27e733234f18635e051d9a5e9d7d56f21f996b60dd"
},
{
"transactionIndex": 29,
"blockNumber": 14212399,
"transactionHash": "0x416d28f1b1e66277b8309763ea0814d9db6ddea10ef79babcb7a318d31d195ef",
"address": "0x7BAF843e06095f68F4990Ca50161C2C4E4e01ec6",
"topics": [
"0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d",
"0x0b43cb2c88b4e8fc5d4ac1352ba889b22584df0c58c4b5b589731a1c9f6f29d3",
"0x0000000000000000000000002c01b4ad51a67e2d8f02208f54df9ac4c0b778b6",
"0x000000000000000000000000b82193725471dc7bfaab1a3ab93c7b42963f3265"
],
"data": "0x",
"logIndex": 27,
"blockHash": "0xa11c1df6029be2c172e90f27e733234f18635e051d9a5e9d7d56f21f996b60dd"
},
{
"transactionIndex": 29,
"blockNumber": 14212399,
"transactionHash": "0x416d28f1b1e66277b8309763ea0814d9db6ddea10ef79babcb7a318d31d195ef",
"address": "0x7BAF843e06095f68F4990Ca50161C2C4E4e01ec6",
"topics": [
"0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff",
"0x038c8d5a0695aa8e4bf7e2d14cb85443db816cf8bdf8985d9f1a65519aeb6cd9",
"0x0000000000000000000000000000000000000000000000000000000000000000",
"0x0b43cb2c88b4e8fc5d4ac1352ba889b22584df0c58c4b5b589731a1c9f6f29d3"
],
"data": "0x",
"logIndex": 28,
"blockHash": "0xa11c1df6029be2c172e90f27e733234f18635e051d9a5e9d7d56f21f996b60dd"
},
{
"transactionIndex": 29,
"blockNumber": 14212399,
"transactionHash": "0x416d28f1b1e66277b8309763ea0814d9db6ddea10ef79babcb7a318d31d195ef",
"address": "0x7BAF843e06095f68F4990Ca50161C2C4E4e01ec6",
"topics": [
"0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff",
"0xe39dc63caee7a15eb0ffb77a826d10c23d40b5f7182b000737ab5c078838b911",
"0x0000000000000000000000000000000000000000000000000000000000000000",
"0x0b43cb2c88b4e8fc5d4ac1352ba889b22584df0c58c4b5b589731a1c9f6f29d3"
],
"data": "0x",
"logIndex": 29,
"blockHash": "0xa11c1df6029be2c172e90f27e733234f18635e051d9a5e9d7d56f21f996b60dd"
},
{
"transactionIndex": 29,
"blockNumber": 14212399,
"transactionHash": "0x416d28f1b1e66277b8309763ea0814d9db6ddea10ef79babcb7a318d31d195ef",
"address": "0x7BAF843e06095f68F4990Ca50161C2C4E4e01ec6",
"topics": [
"0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d",
"0x038c8d5a0695aa8e4bf7e2d14cb85443db816cf8bdf8985d9f1a65519aeb6cd9",
"0x0000000000000000000000002c01b4ad51a67e2d8f02208f54df9ac4c0b778b6",
"0x000000000000000000000000b82193725471dc7bfaab1a3ab93c7b42963f3265"
],
"data": "0x",
"logIndex": 30,
"blockHash": "0xa11c1df6029be2c172e90f27e733234f18635e051d9a5e9d7d56f21f996b60dd"
},
{
"transactionIndex": 29,
"blockNumber": 14212399,
"transactionHash": "0x416d28f1b1e66277b8309763ea0814d9db6ddea10ef79babcb7a318d31d195ef",
"address": "0x7BAF843e06095f68F4990Ca50161C2C4E4e01ec6",
"topics": [
"0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d",
"0xe39dc63caee7a15eb0ffb77a826d10c23d40b5f7182b000737ab5c078838b911",
"0x0000000000000000000000002c01b4ad51a67e2d8f02208f54df9ac4c0b778b6",
"0x000000000000000000000000b82193725471dc7bfaab1a3ab93c7b42963f3265"
],
"data": "0x",
"logIndex": 31,
"blockHash": "0xa11c1df6029be2c172e90f27e733234f18635e051d9a5e9d7d56f21f996b60dd"
},
{
"transactionIndex": 29,
"blockNumber": 14212399,
"transactionHash": "0x416d28f1b1e66277b8309763ea0814d9db6ddea10ef79babcb7a318d31d195ef",
"address": "0x7BAF843e06095f68F4990Ca50161C2C4E4e01ec6",
"topics": [
"0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff",
"0x49e347583a7b9e7f325e8963ee1f94127eba81e401796874b5a22f7c8f9d45f7",
"0x0000000000000000000000000000000000000000000000000000000000000000",
"0x1893e1a169e79f2fe8aa327b1bceb2fede7a1b76a54824f95ea0e737720954ae"
],
"data": "0x",
"logIndex": 32,
"blockHash": "0xa11c1df6029be2c172e90f27e733234f18635e051d9a5e9d7d56f21f996b60dd"
},
{
"transactionIndex": 29,
"blockNumber": 14212399,
"transactionHash": "0x416d28f1b1e66277b8309763ea0814d9db6ddea10ef79babcb7a318d31d195ef",
"address": "0x7BAF843e06095f68F4990Ca50161C2C4E4e01ec6",
"topics": [
"0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff",
"0x1893e1a169e79f2fe8aa327b1bceb2fede7a1b76a54824f95ea0e737720954ae",
"0x0000000000000000000000000000000000000000000000000000000000000000",
"0x0b43cb2c88b4e8fc5d4ac1352ba889b22584df0c58c4b5b589731a1c9f6f29d3"
],
"data": "0x",
"logIndex": 33,
"blockHash": "0xa11c1df6029be2c172e90f27e733234f18635e051d9a5e9d7d56f21f996b60dd"
},
{
"transactionIndex": 29,
"blockNumber": 14212399,
"transactionHash": "0x416d28f1b1e66277b8309763ea0814d9db6ddea10ef79babcb7a318d31d195ef",
"address": "0x7BAF843e06095f68F4990Ca50161C2C4E4e01ec6",
"topics": [
"0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d",
"0x1893e1a169e79f2fe8aa327b1bceb2fede7a1b76a54824f95ea0e737720954ae",
"0x0000000000000000000000002c01b4ad51a67e2d8f02208f54df9ac4c0b778b6",
"0x000000000000000000000000b82193725471dc7bfaab1a3ab93c7b42963f3265"
],
"data": "0x",
"logIndex": 34,
"blockHash": "0xa11c1df6029be2c172e90f27e733234f18635e051d9a5e9d7d56f21f996b60dd"
}
],
"blockNumber": 14212399,
"cumulativeGasUsed": "4504866",
"status": 1,
"byzantium": true
},
"args": [
"0x2C01B4AD51a67E2d8F02208F54dF9aC4c0B778B6",
"0x2C01B4AD51a67E2d8F02208F54dF9aC4c0B778B6",
"0x2C01B4AD51a67E2d8F02208F54dF9aC4c0B778B6",
"0x2C01B4AD51a67E2d8F02208F54dF9aC4c0B778B6",
"0xe8d5a85758fe98f7dce251cad552691d49b499bb"
],
"solcInputHash": "31202e0b67ad97ac4e890af4089ca6d1",
"metadata": "{\"compiler\":{\"version\":\"0.8.9+commit.e5eed63a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_masterAdmin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_swapperAdder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_swapperSetter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_strategyModifier\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mechanicsRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AllowanceShouldBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAmountOut\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSwapper\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTrade\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAsyncSwapper\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotSyncSwapper\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapperInUse\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroSlippage\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_receivedAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_swapper\",\"type\":\"address\"}],\"name\":\"AsyncTradeExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"DustSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_receivedAmount\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_swapper\",\"type\":\"address\"}],\"name\":\"MultipleAsyncTradeExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_strategy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_receivedAmount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_swapper\",\"type\":\"address\"}],\"name\":\"SyncTradeExecuted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MASTER_ADMIN\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STRATEGY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STRATEGY_MANAGER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SWAPPER_ADDER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SWAPPER_SETTER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"__swappers\",\"type\":\"address[]\"}],\"name\":\"addSwappers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tokenOut\",\"type\":\"address\"}],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_strategy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tokenOut\",\"type\":\"address\"}],\"name\":\"disableByAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tokenOut\",\"type\":\"address\"}],\"name\":\"enable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enabledTrades\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"_strategy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tokenOut\",\"type\":\"address\"}],\"internalType\":\"struct ITradeFactoryPositionsHandler.EnabledTrade[]\",\"name\":\"_enabledTrades\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"_strategy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct ITradeFactoryExecutor.AsyncTradeExecutionDetails\",\"name\":\"_tradeExecutionDetails\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_swapper\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_receivedAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"_tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxSlippage\",\"type\":\"uint256\"}],\"internalType\":\"struct ITradeFactoryExecutor.SyncTradeExecutionDetails\",\"name\":\"_tradeExecutionDetails\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_receivedAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"_strategy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct ITradeFactoryExecutor.AsyncTradeExecutionDetails[]\",\"name\":\"_tradesExecutionDetails\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_swapper\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mechanic\",\"type\":\"address\"}],\"name\":\"isMechanic\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isMechanic\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_swapper\",\"type\":\"address\"}],\"name\":\"isSwapper\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isSwapper\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mechanicsRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_mechanicRegistry\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"__swappers\",\"type\":\"address[]\"}],\"name\":\"removeSwappers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"sendDust\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"__mechanicsRegistry\",\"type\":\"address\"}],\"name\":\"setMechanicsRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_strategy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_swapper\",\"type\":\"address\"}],\"name\":\"setStrategySyncSwapper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"strategySyncSwapper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_swapper\",\"type\":\"address\"}],\"name\":\"swapperStrategies\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_strategies\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"swappers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_swappersList\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/TradeFactory/TradeFactory.sol\":\"TradeFactory\"},\"evmVersion\":\"london\",\"libraries\":{\":__CACHE_BREAKER__\":\"0x00000000d41867734bbee4c6863d9255b2b06ac1\"},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role, _msgSender());\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(uint160(account), 20),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n function _grantRole(bytes32 role, address account) private {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n function _revokeRole(bytes32 role, address account) private {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x183481af1c40d2efb26b86f63d6fe9e22f24c87e436d60a69f261b38500e7cd6\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(