AAVE_ATOKEN_ABI = [
    {'inputs': [{'internalType': 'contract ILendingPool',
                 'name': 'pool',
                 'type': 'address'},
                {'internalType': 'address',
                 'name': 'underlyingAssetAddress',
                 'type': 'address'},
                {'internalType': 'address',
                 'name': 'reserveTreasuryAddress',
                 'type': 'address'},
                {'internalType': 'string', 'name': 'tokenName', 'type': 'string'},
                {'internalType': 'string', 'name': 'tokenSymbol', 'type': 'string'},
                {'internalType': 'address',
                 'name': 'incentivesController',
                 'type': 'address'}],
     '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'},
                {'indexed': False,
                 'internalType': 'uint256',
                 'name': 'index',
                 'type': 'uint256'}],
     'name': 'BalanceTransfer',
     'type': 'event'},
    {'anonymous': False,
     'inputs': [{'indexed': True,
                 'internalType': 'address',
                 'name': 'from',
                 'type': 'address'},
                {'indexed': True,
                 'internalType': 'address',
                 'name': 'target',
                 'type': 'address'},
                {'indexed': False,
                 'internalType': 'uint256',
                 'name': 'value',
                 'type': 'uint256'},
                {'indexed': False,
                 'internalType': 'uint256',
                 'name': 'index',
                 'type': 'uint256'}],
     'name': 'Burn',
     'type': 'event'},
    {'anonymous': False,
     'inputs': [{'indexed': True,
                 'internalType': 'address',
                 'name': 'underlyingAsset',
                 'type': 'address'},
                {'indexed': True,
                 'internalType': 'address',
                 'name': 'pool',
                 'type': 'address'},
                {'indexed': False,
                 'internalType': 'address',
                 'name': 'treasury',
                 'type': 'address'},
                {'indexed': False,
                 'internalType': 'address',
                 'name': 'incentivesController',
                 'type': 'address'},
                {'indexed': False,
                 'internalType': 'uint8',
                 'name': 'aTokenDecimals',
                 'type': 'uint8'},
                {'indexed': False,
                 'internalType': 'string',
                 'name': 'aTokenName',
                 'type': 'string'},
                {'indexed': False,
                 'internalType': 'string',
                 'name': 'aTokenSymbol',
                 'type': 'string'},
                {'indexed': False,
                 'internalType': 'bytes',
                 'name': 'params',
                 'type': 'bytes'}],
     'name': 'Initialized',
     'type': 'event'},
    {'anonymous': False,
     'inputs': [{'indexed': True,
                 'internalType': 'address',
                 'name': 'from',
                 'type': 'address'},
                {'indexed': False,
                 'internalType': 'uint256',
                 'name': 'value',
                 'type': 'uint256'},
                {'indexed': False,
                 'internalType': 'uint256',
                 'name': 'index',
                 'type': 'uint256'}],
     'name': 'Mint',
     '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': 'ATOKEN_REVISION',
     'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
     'stateMutability': 'view',
     'type': 'function'},
    {'inputs': [],
     'name': 'DOMAIN_SEPARATOR',
     'outputs': [{'internalType': 'bytes32', 'name': '', 'type': 'bytes32'}],
     'stateMutability': 'view',
     'type': 'function'},
    {'inputs': [],
     'name': 'EIP712_REVISION',
     'outputs': [{'internalType': 'bytes', 'name': '', 'type': 'bytes'}],
     'stateMutability': 'view',
     'type': 'function'},
    {'inputs': [],
     'name': 'PERMIT_TYPEHASH',
     'outputs': [{'internalType': 'bytes32', 'name': '', 'type': 'bytes32'}],
     'stateMutability': 'view',
     'type': 'function'},
    {'inputs': [],
     'name': 'POOL',
     'outputs': [{'internalType': 'contract ILendingPool',
                  'name': '',
                  'type': 'address'}],
     'stateMutability': 'view',
     'type': 'function'},
    {'inputs': [],
     'name': 'RESERVE_TREASURY_ADDRESS',
     'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
     'stateMutability': 'view',
     'type': 'function'},
    {'inputs': [],
     'name': 'UINT_MAX_VALUE',
     'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
     'stateMutability': 'view',
     'type': 'function'},
    {'inputs': [],
     'name': 'UNDERLYING_ASSET_ADDRESS',
     'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
     'stateMutability': 'view',
     'type': 'function'},
    {'inputs': [{'internalType': 'address', 'name': '', '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'}],
     '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': 'user', 'type': 'address'}],
     'name': 'balanceOf',
     'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
     'stateMutability': 'view',
     'type': 'function'},
    {'inputs': [{'internalType': 'address', 'name': 'user', 'type': 'address'},
                {'internalType': 'address',
                 'name': 'receiverOfUnderlying',
                 'type': 'address'},
                {'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'},
                {'internalType': 'uint256', 'name': 'index', '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': 'getIncentivesController',
     'outputs': [{'internalType': 'contract IAaveIncentivesController',
                  'name': '',
                  'type': 'address'}],
     'stateMutability': 'view',
     'type': 'function'},
    {'inputs': [{'internalType': 'address', 'name': 'user', 'type': 'address'}],
     'name': 'getScaledUserBalanceAndSupply',
     'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'},
                 {'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
     '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': [{'internalType': 'uint8',
                 'name': 'underlyingAssetDecimals',
                 'type': 'uint8'},
                {'internalType': 'string', 'name': 'tokenName', 'type': 'string'},
                {'internalType': 'string', 'name': 'tokenSymbol', 'type': 'string'}],
     'name': 'initialize',
     'outputs': [],
     'stateMutability': 'nonpayable',
     'type': 'function'},
    {'inputs': [{'internalType': 'address', 'name': 'user', 'type': 'address'},
                {'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'},
                {'internalType': 'uint256', 'name': 'index', 'type': 'uint256'}],
     'name': 'mint',
     'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
     'stateMutability': 'nonpayable',
     'type': 'function'},
    {'inputs': [{'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'},
                {'internalType': 'uint256', 'name': 'index', 'type': 'uint256'}],
     'name': 'mintToTreasury',
     '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'},
                {'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': 'address', 'name': 'user', 'type': 'address'}],
     'name': 'scaledBalanceOf',
     'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
     'stateMutability': 'view',
     'type': 'function'},
    {'inputs': [],
     'name': 'scaledTotalSupply',
     'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
     'stateMutability': 'view',
     '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': 'recipient',
                 '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'},
    {'inputs': [{'internalType': 'address', 'name': 'from', 'type': 'address'},
                {'internalType': 'address', 'name': 'to', 'type': 'address'},
                {'internalType': 'uint256', 'name': 'value', 'type': 'uint256'}],
     'name': 'transferOnLiquidation',
     'outputs': [],
     'stateMutability': 'nonpayable',
     'type': 'function'},
    {'inputs': [{'internalType': 'address', 'name': 'target', 'type': 'address'},
                {'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'}],
     'name': 'transferUnderlyingTo',
     'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
     'stateMutability': 'nonpayable',
     'type': 'function'}
]
