cic-stack/apps/cic-eth/tests/testdata/bancor/PriceOracle.json

10562 lines
460 KiB
JSON

{
"contractName": "PriceOracle",
"abi": [
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_tokenA",
"type": "address"
},
{
"internalType": "contract IERC20Token",
"name": "_tokenB",
"type": "address"
},
{
"internalType": "contract IChainlinkPriceOracle",
"name": "_tokenAOracle",
"type": "address"
},
{
"internalType": "contract IChainlinkPriceOracle",
"name": "_tokenBOracle",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "tokenA",
"outputs": [
{
"internalType": "contract IERC20Token",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "tokenAOracle",
"outputs": [
{
"internalType": "contract IChainlinkPriceOracle",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "tokenB",
"outputs": [
{
"internalType": "contract IERC20Token",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "tokenBOracle",
"outputs": [
{
"internalType": "contract IChainlinkPriceOracle",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "",
"type": "address"
}
],
"name": "tokenDecimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "",
"type": "address"
}
],
"name": "tokensToOracles",
"outputs": [
{
"internalType": "contract IChainlinkPriceOracle",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_tokenA",
"type": "address"
},
{
"internalType": "contract IERC20Token",
"name": "_tokenB",
"type": "address"
}
],
"name": "latestRate",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "lastUpdateTime",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_tokenA",
"type": "address"
},
{
"internalType": "contract IERC20Token",
"name": "_tokenB",
"type": "address"
}
],
"name": "latestRateAndUpdateTime",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
}
],
"metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_tokenA\",\"type\":\"address\"},{\"internalType\":\"contract IERC20Token\",\"name\":\"_tokenB\",\"type\":\"address\"},{\"internalType\":\"contract IChainlinkPriceOracle\",\"name\":\"_tokenAOracle\",\"type\":\"address\"},{\"internalType\":\"contract IChainlinkPriceOracle\",\"name\":\"_tokenBOracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"lastUpdateTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_tokenA\",\"type\":\"address\"},{\"internalType\":\"contract IERC20Token\",\"name\":\"_tokenB\",\"type\":\"address\"}],\"name\":\"latestRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_tokenA\",\"type\":\"address\"},{\"internalType\":\"contract IERC20Token\",\"name\":\"_tokenB\",\"type\":\"address\"}],\"name\":\"latestRateAndUpdateTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenA\",\"outputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenAOracle\",\"outputs\":[{\"internalType\":\"contract IChainlinkPriceOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenB\",\"outputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenBOracle\",\"outputs\":[{\"internalType\":\"contract IChainlinkPriceOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"tokenDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"tokensToOracles\",\"outputs\":[{\"internalType\":\"contract IChainlinkPriceOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Provides the off-chain rate between two tokens The price oracle uses chainlink oracles internally to get the rates of the two tokens with respect to a common denominator, and then returns the rate between them, which is equivalent to the rate of TokenA / TokenB\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"initializes a new PriceOracle instance note that the oracles must have the same common denominator (USD, ETH etc.)\",\"params\":{\"_tokenA\":\"first token to support\",\"_tokenAOracle\":\"first token price oracle\",\"_tokenB\":\"second token to support\",\"_tokenBOracle\":\"second token price oracle\"}},\"lastUpdateTime()\":{\"details\":\"returns the timestamp of the last price update\",\"returns\":{\"_0\":\"timestamp\"}},\"latestRate(address,address)\":{\"details\":\"returns the latest known rate between the two given tokens for a given pair of tokens A and B, returns the rate of A / B (the number of B units equivalent to a single A unit) the rate is returned as a fraction (numerator / denominator) for accuracy\",\"params\":{\"_tokenA\":\"token to get the rate of 1 unit of\",\"_tokenB\":\"token to get the rate of 1 `_tokenA` against\"},\"returns\":{\"_0\":\"numerator\",\"_1\":\"denominator\"}},\"latestRateAndUpdateTime(address,address)\":{\"details\":\"returns both the rate and the timestamp of the last update in a single call (gas optimization)\",\"params\":{\"_tokenA\":\"token to get the rate of 1 unit of\",\"_tokenB\":\"token to get the rate of 1 `_tokenA` against\"},\"returns\":{\"_0\":\"numerator\",\"_1\":\"denominator\",\"_2\":\"timestamp of the last update\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/PriceOracle.sol\":\"PriceOracle\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/token/interfaces/IERC20Token.sol\":{\"keccak256\":\"0xe6f988c3156e88258474526a541d5a42b6a9adae98b04177a059d9f723bc82cd\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://9a6eb77a5b9ce70995a11a6e48ac3985a4c70896fe5fe04d46146ad7c1c83ea3\",\"dweb:/ipfs/QmYvGSveZFG51tghwkVuu6eK9Jy8frHpfLxHTMyvNZN461\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/PriceOracle.sol\":{\"keccak256\":\"0x5d03fb3ec2ef50006712ad6fd47d14aed49c4d57971e8d918618093f690e6170\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://8dae9bd9a95911008b10d316a1efaa6f05224bf37dec02ace44ef5a303aff3ee\",\"dweb:/ipfs/Qmeuv2c6R2KwFWganFF7US5s5TcYm1toGM2o4XkS1zGx4R\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/SafeMath.sol\":{\"keccak256\":\"0x1ab7391a19ca8a3ad2f3c4a1074e080d4d76dfdb834637bdd0c1e6b6acdf28af\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://d6d8c99621ca884b72da2d84eddfec8ec8c5533915691d6eec94a07adf445608\",\"dweb:/ipfs/QmaXr6DN7VbfxfMn3PsTy7SAMgZVVXbdeaw11BsAjVL2x1\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Utils.sol\":{\"keccak256\":\"0x073efa69fcd6b5e60f841b28b366d63b62ff48ab12a06ce3f5a7f41afd6ce885\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://e8b8ecb2d29197ca77f0ed98f728ace54e6edcfdf5cd1194ae22701607eaf608\",\"dweb:/ipfs/QmcsR6Q35Hurh3TrPkYAboicz9bQQoGCWmZLzUCDyhotH8\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IChainlinkPriceOracle.sol\":{\"keccak256\":\"0x544a1d335c9a30e5543f5c069bbd9f73e6478b0a6941481619a0d20eea159c2a\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://8649d3ff5e21bf5ff21d45a62193974e08ccec27b392e91cbfdad479a60e87f0\",\"dweb:/ipfs/QmatS5peisTv9PdqVz9eSuveQdhJBqpxfpr5q4YsMv51CZ\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x39f4f7af694f7f24373901d8edd57245c6e59970cd1b35137ded4bbebe2155bb\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://30d1011854960be9ab326844d4d97324084955593b2903bee969aba6b1b5f8e9\",\"dweb:/ipfs/QmeTQNZRDNrboKD3ikyMj3tNVHGsa1GqBuAXytJAhhK5Az\"]}},\"version\":1}",
"bytecode": "0x608060405234801561001057600080fd5b506040516109dc3803806109dc8339818101604052608081101561003357600080fd5b508051602082015160408301516060909301519192909183836100568282610157565b83836100628282610157565b600080546001600160a01b03808b166001600160a01b03199283161790925560018054928a169290911691909117905561009b886101c7565b6001600160a01b0389166000908152600260205260409020805460ff191660ff929092169190911790556100ce876101c7565b6001600160a01b039788166000818152600260209081526040808320805460ff9690961660ff1990961695909517909455600380549a8c166001600160a01b03199b8c168117909155600480549a8d169a8c168b1790559b909a168152600590995281892080548916909a179099559787525050509390922080549091169091179055506102c1565b61016082610263565b61016981610263565b806001600160a01b0316826001600160a01b031614156101c3576040805162461bcd60e51b815260206004820152601060248201526f4552525f53414d455f4144445245535360801b604482015290519081900360640190fd5b5050565b60006001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156101f65750601261025e565b816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561022f57600080fd5b505afa158015610243573d6000803e3d6000fd5b505050506040513d602081101561025957600080fd5b505190505b919050565b6001600160a01b0381166102be576040805162461bcd60e51b815260206004820152601360248201527f4552525f494e56414c49445f4144445245535300000000000000000000000000604482015290519081900360640190fd5b50565b61070c806102d06000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b1772d7a11610066578063b1772d7a14610147578063b9e1715b14610193578063c8f33c911461019b578063cbd962d1146101b5578063f997fda7146101db57610093565b80630fc63d10146100985780635f64b55b146100bc5780638ee573ac146100c4578063ae81800414610100575b600080fd5b6100a06101e3565b604080516001600160a01b039092168252519081900360200190f35b6100a06101f2565b6100ea600480360360208110156100da57600080fd5b50356001600160a01b0316610201565b6040805160ff9092168252519081900360200190f35b61012e6004803603604081101561011657600080fd5b506001600160a01b0381358116916020013516610216565b6040805192835260208301919091528051918290030190f35b6101756004803603604081101561015d57600080fd5b506001600160a01b03813581169160200135166103a5565b60408051938452602084019290925282820152519081900360600190f35b6100a06103d4565b6101a36103e3565b60408051918252519081900360200190f35b6100a0600480360360208110156101cb57600080fd5b50356001600160a01b03166104ec565b6100a0610507565b6000546001600160a01b031681565b6001546001600160a01b031681565b60026020526000908152604090205460ff1681565b60008083836102258282610516565b6001600160a01b0380871660009081526005602090815260408083205481516350d25bcd60e01b81529151939416926350d25bcd92600480840193919291829003018186803b15801561027757600080fd5b505afa15801561028b573d6000803e3d6000fd5b505050506040513d60208110156102a157600080fd5b50516001600160a01b0380881660009081526005602090815260408083205481516350d25bcd60e01b81529151959650929492909316926350d25bcd9260048083019392829003018186803b1580156102f957600080fd5b505afa15801561030d573d6000803e3d6000fd5b505050506040513d602081101561032357600080fd5b50516001600160a01b03808a1660009081526002602052604080822054928b16825290205491925060ff9081169116808211156103735761036c8360ff83850316600a0a6105af565b9250610396565b8060ff168260ff161015610396576103938460ff84840316600a0a6105af565b93505b50919890975095505050505050565b60008060008060006103b78787610216565b9150915081816103c56103e3565b94509450945050509250925092565b6003546001600160a01b031681565b600080600360009054906101000a90046001600160a01b03166001600160a01b0316638205bf6a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561043457600080fd5b505afa158015610448573d6000803e3d6000fd5b505050506040513d602081101561045e57600080fd5b50516004805460408051634102dfb560e11b815290519394506000936001600160a01b0390921692638205bf6a928282019260209290829003018186803b1580156104a857600080fd5b505afa1580156104bc573d6000803e3d6000fd5b505050506040513d60208110156104d257600080fd5b505190508082116104e357806104e5565b815b9250505090565b6005602052600090815260409020546001600160a01b031681565b6004546001600160a01b031681565b6105208282610616565b6001600160a01b03828116600090815260056020526040902054161580159061056257506001600160a01b038181166000908152600560205260409020541615155b6105ab576040805162461bcd60e51b815260206004820152601560248201527422a9292faaa729aaa82827a92a22a22faa27a5a2a760591b604482015290519081900360640190fd5b5050565b6000826105be57506000610610565b828202828482816105cb57fe5b041461060d576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4f564552464c4f5760a01b604482015290519081900360640190fd5b90505b92915050565b61061f82610682565b61062881610682565b806001600160a01b0316826001600160a01b031614156105ab576040805162461bcd60e51b815260206004820152601060248201526f4552525f53414d455f4144445245535360801b604482015290519081900360640190fd5b6001600160a01b0381166106d3576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f4144445245535360681b604482015290519081900360640190fd5b5056fea2646970667358221220022bb923a68c1656dd285dc381e0a9d05c2218475c0b4d9e4b9d7f999b97b5e164736f6c634300060c0033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063b1772d7a11610066578063b1772d7a14610147578063b9e1715b14610193578063c8f33c911461019b578063cbd962d1146101b5578063f997fda7146101db57610093565b80630fc63d10146100985780635f64b55b146100bc5780638ee573ac146100c4578063ae81800414610100575b600080fd5b6100a06101e3565b604080516001600160a01b039092168252519081900360200190f35b6100a06101f2565b6100ea600480360360208110156100da57600080fd5b50356001600160a01b0316610201565b6040805160ff9092168252519081900360200190f35b61012e6004803603604081101561011657600080fd5b506001600160a01b0381358116916020013516610216565b6040805192835260208301919091528051918290030190f35b6101756004803603604081101561015d57600080fd5b506001600160a01b03813581169160200135166103a5565b60408051938452602084019290925282820152519081900360600190f35b6100a06103d4565b6101a36103e3565b60408051918252519081900360200190f35b6100a0600480360360208110156101cb57600080fd5b50356001600160a01b03166104ec565b6100a0610507565b6000546001600160a01b031681565b6001546001600160a01b031681565b60026020526000908152604090205460ff1681565b60008083836102258282610516565b6001600160a01b0380871660009081526005602090815260408083205481516350d25bcd60e01b81529151939416926350d25bcd92600480840193919291829003018186803b15801561027757600080fd5b505afa15801561028b573d6000803e3d6000fd5b505050506040513d60208110156102a157600080fd5b50516001600160a01b0380881660009081526005602090815260408083205481516350d25bcd60e01b81529151959650929492909316926350d25bcd9260048083019392829003018186803b1580156102f957600080fd5b505afa15801561030d573d6000803e3d6000fd5b505050506040513d602081101561032357600080fd5b50516001600160a01b03808a1660009081526002602052604080822054928b16825290205491925060ff9081169116808211156103735761036c8360ff83850316600a0a6105af565b9250610396565b8060ff168260ff161015610396576103938460ff84840316600a0a6105af565b93505b50919890975095505050505050565b60008060008060006103b78787610216565b9150915081816103c56103e3565b94509450945050509250925092565b6003546001600160a01b031681565b600080600360009054906101000a90046001600160a01b03166001600160a01b0316638205bf6a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561043457600080fd5b505afa158015610448573d6000803e3d6000fd5b505050506040513d602081101561045e57600080fd5b50516004805460408051634102dfb560e11b815290519394506000936001600160a01b0390921692638205bf6a928282019260209290829003018186803b1580156104a857600080fd5b505afa1580156104bc573d6000803e3d6000fd5b505050506040513d60208110156104d257600080fd5b505190508082116104e357806104e5565b815b9250505090565b6005602052600090815260409020546001600160a01b031681565b6004546001600160a01b031681565b6105208282610616565b6001600160a01b03828116600090815260056020526040902054161580159061056257506001600160a01b038181166000908152600560205260409020541615155b6105ab576040805162461bcd60e51b815260206004820152601560248201527422a9292faaa729aaa82827a92a22a22faa27a5a2a760591b604482015290519081900360640190fd5b5050565b6000826105be57506000610610565b828202828482816105cb57fe5b041461060d576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4f564552464c4f5760a01b604482015290519081900360640190fd5b90505b92915050565b61061f82610682565b61062881610682565b806001600160a01b0316826001600160a01b031614156105ab576040805162461bcd60e51b815260206004820152601060248201526f4552525f53414d455f4144445245535360801b604482015290519081900360640190fd5b6001600160a01b0381166106d3576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f4144445245535360681b604482015290519081900360640190fd5b5056fea2646970667358221220022bb923a68c1656dd285dc381e0a9d05c2218475c0b4d9e4b9d7f999b97b5e164736f6c634300060c0033",
"immutableReferences": {},
"sourceMap": "520:6445:58:-:0;;;1678:643;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1678:643:58;;;;;;;;;;;;;;;;;;;;;2469:43;1678:643;;2469:21;:43::i;:::-;1926:13;1950;2469:43:::1;1926:13:::0;1950;2469:21:::1;:43::i;:::-;1982:6:::2;:16:::0;;-1:-1:-1;;;;;1982:16:58;;::::2;-1:-1:-1::0;;;;;;1982:16:58;;::::2;;::::0;;;-1:-1:-1;2009:16:58;;;;::::2;::::0;;;::::2;::::0;;;::::2;::::0;;2061:17:::2;1982:16:::0;2061:8:::2;:17::i;:::-;-1:-1:-1::0;;;;;2036:22:58;::::2;;::::0;;;:13:::2;:22;::::0;;;;:42;;-1:-1:-1;;2036:42:58::2;-1:-1:-1::0;2036:42:58;;;::::2;::::0;;;::::2;::::0;;2114:17:::2;2123:7:::0;2114:8:::2;:17::i;:::-;-1:-1:-1::0;;;;;2089:22:58;;::::2;;::::0;;;:13:::2;:22;::::0;;;;;;;:42;;-1:-1:-1;;2089:42:58::2;;::::0;;;::::2;::::0;;;::::2;::::0;;;2144:12:::2;:28:::0;;-1:-1:-1;;;;;;2144:28:58;;::::2;::::0;;::::2;::::0;;::::2;::::0;;;2183:12:::2;:28:::0;;;::::2;::::0;;::::2;::::0;;::::2;::::0;;2222:24;;;::::2;::::0;;:15:::2;:24:::0;;;;;;:40;;;::::2;::::0;;::::2;::::0;;;2273:24;;;-1:-1:-1;;;2273:24:58;;;;:40;;;;::::2;::::0;;::::2;::::0;;;-1:-1:-1;520:6445:58;;2587:223;2681:24;2695:9;2681:13;:24::i;:::-;2716;2730:9;2716:13;:24::i;:::-;-1:-1:-1;;;;;2759:22:58;;;;;;;;2751:51;;;;;-1:-1:-1;;;2751:51:58;;;;;;;;;;;;-1:-1:-1;;;2751:51:58;;;;;;;;;;;;;;;2587:223;;:::o;6767:195::-;6827:5;661:42;-1:-1:-1;;;;;6849:21:58;;;6845:73;;;-1:-1:-1;749:2:58;6887:19;;6845:73;6937:6;-1:-1:-1;;;;;6937:15:58;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6937:17:58;;-1:-1:-1;6767:195:58;;;;:::o;692:128:64:-;-1:-1:-1;;;;;766:22:64;;758:54;;;;;-1:-1:-1;;;758:54:64;;;;;;;;;;;;-1:-1:-1;;;758:54:64;;;;;;;;;;;;;;;692:128;:::o;520:6445:58:-;;;;;;;",
"deployedSourceMap": "520:6445:58:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;760:25;;;:::i;:::-;;;;-1:-1:-1;;;;;760:25:58;;;;;;;;;;;;;;824;;;:::i;888:51::-;;;;;;;;;;;;;;;;-1:-1:-1;888:51:58;-1:-1:-1;;;;;888:51:58;;:::i;:::-;;;;;;;;;;;;;;;;;;;3894:1619;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3894:1619:58;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6379:325;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6379:325:58;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;978:50;;;:::i;5635:360::-;;;:::i;:::-;;;;;;;;;;;;;;;;1162:69;;;;;;;;;;;;;;;;-1:-1:-1;1162:69:58;-1:-1:-1;;;;;1162:69:58;;:::i;1070:50::-;;;:::i;760:25::-;;;-1:-1:-1;;;;;760:25:58;;:::o;824:::-;;;-1:-1:-1;;;;;824:25:58;;:::o;888:51::-;;;;;;;;;;;;;;;:::o;3894:1619::-;4065:7;4074;4029;4038;2965:34;2982:7;2991;2965:16;:34::i;:::-;-1:-1:-1;;;;;4128:24:58;;::::1;4099:18;4128:24:::0;;;:15:::1;:24;::::0;;;;;;;;:39;;-1:-1:-1;;;4128:39:58;;;;4099:18;;4128:24:::1;::::0;-1:-1:-1;;4128:39:58::1;::::0;;::::1;::::0;:24;;:39;;;;;;:24;:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;4128:39:58;-1:-1:-1;;;;;4208:24:58;;::::1;4179:18;4208:24:::0;;;:15:::1;4128:39;4208:24:::0;;;;;;;;:39;;-1:-1:-1;;;4208:39:58;;;;4128;;-1:-1:-1;4179:18:58;;4208:24;;;::::1;::::0;-1:-1:-1;;4208:39:58::1;::::0;;::::1;::::0;4128;4208;;;;;:24;:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;4208:39:58;-1:-1:-1;;;;;4282:22:58;;::::1;4259:20;4282:22:::0;;;:13:::1;4208:39;4282:22:::0;;;;;;4338;;::::1;::::0;;;;;4208:39;;-1:-1:-1;4282:22:58::1;::::0;;::::1;::::0;4338::::1;5169:31:::0;;::::1;5165:297;;;5230:64;:10:::0;5245:48:::1;5261:31:::0;;::::1;5245:48;5253:2;5245:48;5230:14;:64::i;:::-;5217:77;;5165:297;;;5342:14;5325:31;;:14;:31;;;5321:141;;;5386:64;:10:::0;5401:48:::1;5417:31:::0;;::::1;5401:48;5409:2;5401:48;5386:14;:64::i;:::-;5373:77;;5321:141;-1:-1:-1::0;5482:10:58;;5494;;-1:-1:-1;3894:1619:58;-1:-1:-1;;;;;;3894:1619:58:o;6379:325::-;6520:7;6529;6538;6564:17;6583:19;6606:28;6617:7;6626;6606:10;:28::i;:::-;6563:71;;;;6655:9;6666:11;6679:16;:14;:16::i;:::-;6647:49;;;;;;;;6379:325;;;;;:::o;978:50::-;;;-1:-1:-1;;;;;978:50:58;;:::o;5635:360::-;5825:12;;:30;;;-1:-1:-1;;;5825:30:58;;;;5727:7;;;;-1:-1:-1;;;;;5825:12:58;;;;:28;;:30;;;;;;;;;;;;;;;:12;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5825:30:58;5887:12;;;:30;;;-1:-1:-1;;;5887:30:58;;;;5825;;-1:-1:-1;5866:18:58;;-1:-1:-1;;;;;5887:12:58;;;;:28;;:30;;;;5825;;5887;;;;;;:12;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5887:30:58;;-1:-1:-1;5938:23:58;;;:49;;5977:10;5938:49;;;5964:10;5938:49;5930:57;;;;5635:360;:::o;1162:69::-;;;;;;;;;;;;-1:-1:-1;;;;;1162:69:58;;:::o;1070:50::-;;;-1:-1:-1;;;;;1070:50:58;;:::o;3074:301::-;3167:57;3197:7;3215;3167:21;:57::i;:::-;-1:-1:-1;;;;;3251:24:58;;;3288:1;3251:24;;;:15;:24;;;;;;;3243:47;;;;:98;;-1:-1:-1;;;;;;3302:24:58;;;3339:1;3302:24;;;:15;:24;;;;;;;3294:47;;3243:98;3235:132;;;;;-1:-1:-1;;;3235:132:58;;;;;;;;;;;;-1:-1:-1;;;3235:132:58;;;;;;;;;;;;;;;3074:301;;:::o;1149:250:60:-;1209:7;1262;1258:34;;-1:-1:-1;1291:1:60;1284:8;;1258:34;1317:7;;;1322:2;1317;:7;:2;1343:6;;;;;:12;1335:37;;;;;-1:-1:-1;;;1335:37:60;;;;;;;;;;;;-1:-1:-1;;;1335:37:60;;;;;;;;;;;;;;;1390:1;-1:-1:-1;1149:250:60;;;;;:::o;2587:223:58:-;2681:24;2695:9;2681:13;:24::i;:::-;2716;2730:9;2716:13;:24::i;:::-;-1:-1:-1;;;;;2759:22:58;;;;;;;;2751:51;;;;;-1:-1:-1;;;2751:51:58;;;;;;;;;;;;-1:-1:-1;;;2751:51:58;;;;;;;;;;;;;;692:128:64;-1:-1:-1;;;;;766:22:64;;758:54;;;;;-1:-1:-1;;;758:54:64;;;;;;;;;;;;-1:-1:-1;;;758:54:64;;;;;;;;;;;;;;;692:128;:::o",
"source": "// SPDX-License-Identifier: SEE LICENSE IN LICENSE\r\npragma solidity 0.6.12;\r\nimport \"./Utils.sol\";\r\nimport \"./SafeMath.sol\";\r\nimport \"./interfaces/IPriceOracle.sol\";\r\nimport \"./interfaces/IChainlinkPriceOracle.sol\";\r\n\r\n/**\r\n * @dev Provides the off-chain rate between two tokens\r\n *\r\n * The price oracle uses chainlink oracles internally to get the rates of the two tokens\r\n * with respect to a common denominator, and then returns the rate between them, which\r\n * is equivalent to the rate of TokenA / TokenB\r\n*/\r\ncontract PriceOracle is IPriceOracle, Utils {\r\n using SafeMath for uint256;\r\n\r\n IERC20Token private constant ETH_ADDRESS = IERC20Token(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);\r\n uint8 private constant ETH_DECIMALS = 18;\r\n\r\n IERC20Token public tokenA; // token A the oracle supports\r\n IERC20Token public tokenB; // token B the oracle supports\r\n mapping (IERC20Token => uint8) public tokenDecimals; // token -> token decimals\r\n\r\n IChainlinkPriceOracle public override tokenAOracle; // token A chainlink price oracle\r\n IChainlinkPriceOracle public override tokenBOracle; // token B chainlink price oracle\r\n mapping (IERC20Token => IChainlinkPriceOracle) public tokensToOracles; // token -> price oracle for easier access\r\n\r\n /**\r\n * @dev initializes a new PriceOracle instance\r\n * note that the oracles must have the same common denominator (USD, ETH etc.)\r\n *\r\n * @param _tokenA first token to support\r\n * @param _tokenB second token to support\r\n * @param _tokenAOracle first token price oracle\r\n * @param _tokenBOracle second token price oracle\r\n */\r\n constructor(IERC20Token _tokenA, IERC20Token _tokenB, IChainlinkPriceOracle _tokenAOracle, IChainlinkPriceOracle _tokenBOracle)\r\n public\r\n validUniqueAddresses(address(_tokenA), address(_tokenB))\r\n validUniqueAddresses(address(_tokenAOracle), address(_tokenBOracle))\r\n {\r\n tokenA = _tokenA;\r\n tokenB = _tokenB;\r\n tokenDecimals[_tokenA] = decimals(_tokenA);\r\n tokenDecimals[_tokenB] = decimals(_tokenB);\r\n\r\n tokenAOracle = _tokenAOracle;\r\n tokenBOracle = _tokenBOracle;\r\n tokensToOracles[_tokenA] = _tokenAOracle;\r\n tokensToOracles[_tokenB] = _tokenBOracle;\r\n }\r\n\r\n // ensures that the provided addresses are unique valid\r\n modifier validUniqueAddresses(address _address1, address _address2) {\r\n _validUniqueAddresses(_address1, _address2);\r\n _;\r\n }\r\n\r\n // error message binary size optimization\r\n function _validUniqueAddresses(address _address1, address _address2) internal pure {\r\n _validAddress(_address1);\r\n _validAddress(_address2);\r\n require(_address1 != _address2, \"ERR_SAME_ADDRESS\");\r\n }\r\n\r\n // ensures that the provides tokens are supported by the oracle\r\n modifier supportedTokens(IERC20Token _tokenA, IERC20Token _tokenB) {\r\n _supportedTokens(_tokenA, _tokenB);\r\n _;\r\n }\r\n\r\n // error message binary size optimization\r\n function _supportedTokens(IERC20Token _tokenA, IERC20Token _tokenB) internal view {\r\n _validUniqueAddresses(address(_tokenA), address(_tokenB));\r\n require(address(tokensToOracles[_tokenA]) != address(0) && address(tokensToOracles[_tokenB]) != address(0), \"ERR_UNSUPPORTED_TOKEN\");\r\n }\r\n\r\n /**\r\n * @dev returns the latest known rate between the two given tokens\r\n * for a given pair of tokens A and B, returns the rate of A / B\r\n * (the number of B units equivalent to a single A unit)\r\n * the rate is returned as a fraction (numerator / denominator) for accuracy\r\n *\r\n * @param _tokenA token to get the rate of 1 unit of\r\n * @param _tokenB token to get the rate of 1 `_tokenA` against\r\n *\r\n * @return numerator\r\n * @return denominator\r\n */\r\n function latestRate(IERC20Token _tokenA, IERC20Token _tokenB)\r\n public\r\n view\r\n override\r\n supportedTokens(_tokenA, _tokenB)\r\n returns (uint256, uint256)\r\n {\r\n uint256 rateTokenA = uint256(tokensToOracles[_tokenA].latestAnswer());\r\n uint256 rateTokenB = uint256(tokensToOracles[_tokenB].latestAnswer());\r\n uint8 decimalsTokenA = tokenDecimals[_tokenA];\r\n uint8 decimalsTokenB = tokenDecimals[_tokenB];\r\n\r\n // the normalization works as follows:\r\n // - token A with decimals of dA and price of rateA per one token (e.g., for 10^dA weiA)\r\n // - token B with decimals of dB < dA and price of rateB per one token (e.g., for 10^dB weiB)\r\n // then the normalized rate, representing the rate between 1 weiA and 1 weiB is rateA / (rateB * 10^(dA - dB)).\r\n //\r\n // for example:\r\n // - token A with decimals of 5 and price of $10 per one token (e.g., for 100,000 weiA)\r\n // - token B with decimals of 2 and price of $2 per one token (e.g., for 100 weiB)\r\n // then the normalized rate would be: 5 / (2 * 10^3) = 0.0025, which is the correct rate since\r\n // 1 weiA costs $0.00005, 1 weiB costs $0.02, and weiA / weiB is 0.0025.\r\n\r\n if (decimalsTokenA > decimalsTokenB) {\r\n rateTokenB = rateTokenB.mul(uint256(10) ** (decimalsTokenA - decimalsTokenB));\r\n }\r\n else if (decimalsTokenA < decimalsTokenB) {\r\n rateTokenA = rateTokenA.mul(uint256(10) ** (decimalsTokenB - decimalsTokenA));\r\n }\r\n\r\n return (rateTokenA, rateTokenB);\r\n }\r\n\r\n /**\r\n * @dev returns the timestamp of the last price update\r\n *\r\n * @return timestamp\r\n */\r\n function lastUpdateTime()\r\n public\r\n view\r\n override\r\n returns (uint256) {\r\n // returns the oldest timestamp between the two\r\n uint256 timestampA = tokenAOracle.latestTimestamp();\r\n uint256 timestampB = tokenBOracle.latestTimestamp();\r\n\r\n return timestampA > timestampB ? timestampA : timestampB;\r\n }\r\n\r\n /**\r\n * @dev returns both the rate and the timestamp of the last update in a single call (gas optimization)\r\n *\r\n * @param _tokenA token to get the rate of 1 unit of\r\n * @param _tokenB token to get the rate of 1 `_tokenA` against\r\n *\r\n * @return numerator\r\n * @return denominator\r\n * @return timestamp of the last update\r\n */\r\n function latestRateAndUpdateTime(IERC20Token _tokenA, IERC20Token _tokenB)\r\n public\r\n view\r\n override\r\n returns (uint256, uint256, uint256)\r\n {\r\n (uint256 numerator, uint256 denominator) = latestRate(_tokenA, _tokenB);\r\n\r\n return (numerator, denominator, lastUpdateTime());\r\n }\r\n\r\n /** @dev returns the decimals of a given token */\r\n function decimals(IERC20Token _token) private view returns (uint8) {\r\n if (_token == ETH_ADDRESS) {\r\n return ETH_DECIMALS;\r\n }\r\n\r\n return _token.decimals();\r\n }\r\n}\r\n",
"sourcePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/PriceOracle.sol",
"ast": {
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/PriceOracle.sol",
"exportedSymbols": {
"PriceOracle": [
22205
]
},
"id": 22206,
"license": "SEE LICENSE IN LICENSE",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 21820,
"literals": [
"solidity",
"0.6",
".12"
],
"nodeType": "PragmaDirective",
"src": "52:23:58"
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Utils.sol",
"file": "./Utils.sol",
"id": 21821,
"nodeType": "ImportDirective",
"scope": 22206,
"sourceUnit": 22662,
"src": "77:21:58",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/SafeMath.sol",
"file": "./SafeMath.sol",
"id": 21822,
"nodeType": "ImportDirective",
"scope": 22206,
"sourceUnit": 22355,
"src": "100:24:58",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IPriceOracle.sol",
"file": "./interfaces/IPriceOracle.sol",
"id": 21823,
"nodeType": "ImportDirective",
"scope": 22206,
"sourceUnit": 22892,
"src": "126:39:58",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IChainlinkPriceOracle.sol",
"file": "./interfaces/IChainlinkPriceOracle.sol",
"id": 21824,
"nodeType": "ImportDirective",
"scope": 22206,
"sourceUnit": 22822,
"src": "167:48:58",
"symbolAliases": [],
"unitAlias": ""
},
{
"abstract": false,
"baseContracts": [
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 21826,
"name": "IPriceOracle",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22891,
"src": "544:12:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IPriceOracle_$22891",
"typeString": "contract IPriceOracle"
}
},
"id": 21827,
"nodeType": "InheritanceSpecifier",
"src": "544:12:58"
},
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 21828,
"name": "Utils",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22661,
"src": "558:5:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_Utils_$22661",
"typeString": "contract Utils"
}
},
"id": 21829,
"nodeType": "InheritanceSpecifier",
"src": "558:5:58"
}
],
"contractDependencies": [
22661,
22891
],
"contractKind": "contract",
"documentation": {
"id": 21825,
"nodeType": "StructuredDocumentation",
"src": "219:299:58",
"text": " @dev Provides the off-chain rate between two tokens\n The price oracle uses chainlink oracles internally to get the rates of the two tokens\n with respect to a common denominator, and then returns the rate between them, which\n is equivalent to the rate of TokenA / TokenB"
},
"fullyImplemented": true,
"id": 22205,
"linearizedBaseContracts": [
22205,
22661,
22891
],
"name": "PriceOracle",
"nodeType": "ContractDefinition",
"nodes": [
{
"id": 21832,
"libraryName": {
"contractScope": null,
"id": 21830,
"name": "SafeMath",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22354,
"src": "577:8:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_SafeMath_$22354",
"typeString": "library SafeMath"
}
},
"nodeType": "UsingForDirective",
"src": "571:27:58",
"typeName": {
"id": 21831,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "590:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
},
{
"constant": true,
"id": 21837,
"mutability": "constant",
"name": "ETH_ADDRESS",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22205,
"src": "606:98:58",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 21833,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "606:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "307845656565654565656545654565654565456545656545454565656565456565656565656545456545",
"id": 21835,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "661:42:58",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
"value": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
],
"id": 21834,
"name": "IERC20Token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21127,
"src": "649:11:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_IERC20Token_$21127_$",
"typeString": "type(contract IERC20Token)"
}
},
"id": 21836,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "649:55:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"visibility": "private"
},
{
"constant": true,
"id": 21840,
"mutability": "constant",
"name": "ETH_DECIMALS",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22205,
"src": "711:40:58",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"typeName": {
"id": 21838,
"name": "uint8",
"nodeType": "ElementaryTypeName",
"src": "711:5:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"value": {
"argumentTypes": null,
"hexValue": "3138",
"id": 21839,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "749:2:58",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_18_by_1",
"typeString": "int_const 18"
},
"value": "18"
},
"visibility": "private"
},
{
"constant": false,
"functionSelector": "0fc63d10",
"id": 21842,
"mutability": "mutable",
"name": "tokenA",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22205,
"src": "760:25:58",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 21841,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "760:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "public"
},
{
"constant": false,
"functionSelector": "5f64b55b",
"id": 21844,
"mutability": "mutable",
"name": "tokenB",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22205,
"src": "824:25:58",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 21843,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "824:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "public"
},
{
"constant": false,
"functionSelector": "8ee573ac",
"id": 21848,
"mutability": "mutable",
"name": "tokenDecimals",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22205,
"src": "888:51:58",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_uint8_$",
"typeString": "mapping(contract IERC20Token => uint8)"
},
"typeName": {
"id": 21847,
"keyType": {
"contractScope": null,
"id": 21845,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "897:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"nodeType": "Mapping",
"src": "888:30:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_uint8_$",
"typeString": "mapping(contract IERC20Token => uint8)"
},
"valueType": {
"id": 21846,
"name": "uint8",
"nodeType": "ElementaryTypeName",
"src": "912:5:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
}
},
"value": null,
"visibility": "public"
},
{
"baseFunctions": [
22856
],
"constant": false,
"functionSelector": "b9e1715b",
"id": 21851,
"mutability": "mutable",
"name": "tokenAOracle",
"nodeType": "VariableDeclaration",
"overrides": {
"id": 21850,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "1007:8:58"
},
"scope": 22205,
"src": "978:50:58",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
},
"typeName": {
"contractScope": null,
"id": 21849,
"name": "IChainlinkPriceOracle",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22821,
"src": "978:21:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"value": null,
"visibility": "public"
},
{
"baseFunctions": [
22861
],
"constant": false,
"functionSelector": "f997fda7",
"id": 21854,
"mutability": "mutable",
"name": "tokenBOracle",
"nodeType": "VariableDeclaration",
"overrides": {
"id": 21853,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "1099:8:58"
},
"scope": 22205,
"src": "1070:50:58",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
},
"typeName": {
"contractScope": null,
"id": 21852,
"name": "IChainlinkPriceOracle",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22821,
"src": "1070:21:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"value": null,
"visibility": "public"
},
{
"constant": false,
"functionSelector": "cbd962d1",
"id": 21858,
"mutability": "mutable",
"name": "tokensToOracles",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22205,
"src": "1162:69:58",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_contract$_IChainlinkPriceOracle_$22821_$",
"typeString": "mapping(contract IERC20Token => contract IChainlinkPriceOracle)"
},
"typeName": {
"id": 21857,
"keyType": {
"contractScope": null,
"id": 21855,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "1171:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"nodeType": "Mapping",
"src": "1162:46:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_contract$_IChainlinkPriceOracle_$22821_$",
"typeString": "mapping(contract IERC20Token => contract IChainlinkPriceOracle)"
},
"valueType": {
"contractScope": null,
"id": 21856,
"name": "IChainlinkPriceOracle",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22821,
"src": "1186:21:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
}
},
"value": null,
"visibility": "public"
},
{
"body": {
"id": 21934,
"nodeType": "Block",
"src": "1971:350:58",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 21892,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 21890,
"name": "tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21842,
"src": "1982:6:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 21891,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21861,
"src": "1991:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"src": "1982:16:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"id": 21893,
"nodeType": "ExpressionStatement",
"src": "1982:16:58"
},
{
"expression": {
"argumentTypes": null,
"id": 21896,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 21894,
"name": "tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21844,
"src": "2009:6:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 21895,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21863,
"src": "2018:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"src": "2009:16:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"id": 21897,
"nodeType": "ExpressionStatement",
"src": "2009:16:58"
},
{
"expression": {
"argumentTypes": null,
"id": 21904,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 21898,
"name": "tokenDecimals",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21848,
"src": "2036:13:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_uint8_$",
"typeString": "mapping(contract IERC20Token => uint8)"
}
},
"id": 21900,
"indexExpression": {
"argumentTypes": null,
"id": 21899,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21861,
"src": "2050:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"nodeType": "IndexAccess",
"src": "2036:22:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21902,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21861,
"src": "2070:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 21901,
"name": "decimals",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22204,
"src": "2061:8:58",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21127_$returns$_t_uint8_$",
"typeString": "function (contract IERC20Token) view returns (uint8)"
}
},
"id": 21903,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2061:17:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "2036:42:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"id": 21905,
"nodeType": "ExpressionStatement",
"src": "2036:42:58"
},
{
"expression": {
"argumentTypes": null,
"id": 21912,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 21906,
"name": "tokenDecimals",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21848,
"src": "2089:13:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_uint8_$",
"typeString": "mapping(contract IERC20Token => uint8)"
}
},
"id": 21908,
"indexExpression": {
"argumentTypes": null,
"id": 21907,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21863,
"src": "2103:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"nodeType": "IndexAccess",
"src": "2089:22:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21910,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21863,
"src": "2123:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 21909,
"name": "decimals",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22204,
"src": "2114:8:58",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21127_$returns$_t_uint8_$",
"typeString": "function (contract IERC20Token) view returns (uint8)"
}
},
"id": 21911,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2114:17:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "2089:42:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"id": 21913,
"nodeType": "ExpressionStatement",
"src": "2089:42:58"
},
{
"expression": {
"argumentTypes": null,
"id": 21916,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 21914,
"name": "tokenAOracle",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21851,
"src": "2144:12:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 21915,
"name": "_tokenAOracle",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21865,
"src": "2159:13:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"src": "2144:28:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"id": 21917,
"nodeType": "ExpressionStatement",
"src": "2144:28:58"
},
{
"expression": {
"argumentTypes": null,
"id": 21920,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 21918,
"name": "tokenBOracle",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21854,
"src": "2183:12:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 21919,
"name": "_tokenBOracle",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21867,
"src": "2198:13:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"src": "2183:28:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"id": 21921,
"nodeType": "ExpressionStatement",
"src": "2183:28:58"
},
{
"expression": {
"argumentTypes": null,
"id": 21926,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 21922,
"name": "tokensToOracles",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21858,
"src": "2222:15:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_contract$_IChainlinkPriceOracle_$22821_$",
"typeString": "mapping(contract IERC20Token => contract IChainlinkPriceOracle)"
}
},
"id": 21924,
"indexExpression": {
"argumentTypes": null,
"id": 21923,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21861,
"src": "2238:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"nodeType": "IndexAccess",
"src": "2222:24:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 21925,
"name": "_tokenAOracle",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21865,
"src": "2249:13:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"src": "2222:40:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"id": 21927,
"nodeType": "ExpressionStatement",
"src": "2222:40:58"
},
{
"expression": {
"argumentTypes": null,
"id": 21932,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 21928,
"name": "tokensToOracles",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21858,
"src": "2273:15:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_contract$_IChainlinkPriceOracle_$22821_$",
"typeString": "mapping(contract IERC20Token => contract IChainlinkPriceOracle)"
}
},
"id": 21930,
"indexExpression": {
"argumentTypes": null,
"id": 21929,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21863,
"src": "2289:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"nodeType": "IndexAccess",
"src": "2273:24:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 21931,
"name": "_tokenBOracle",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21867,
"src": "2300:13:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"src": "2273:40:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"id": 21933,
"nodeType": "ExpressionStatement",
"src": "2273:40:58"
}
]
},
"documentation": {
"id": 21859,
"nodeType": "StructuredDocumentation",
"src": "1284:388:58",
"text": " @dev initializes a new PriceOracle instance\n note that the oracles must have the same common denominator (USD, ETH etc.)\n @param _tokenA first token to support\n @param _tokenB second token to support\n @param _tokenAOracle first token price oracle\n @param _tokenBOracle second token price oracle"
},
"id": 21935,
"implemented": true,
"kind": "constructor",
"modifiers": [
{
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21872,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21861,
"src": "1860:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 21871,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "1852:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 21870,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1852:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 21873,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1852:16:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21876,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21863,
"src": "1878:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 21875,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "1870:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 21874,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1870:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 21877,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1870:16:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"id": 21878,
"modifierName": {
"argumentTypes": null,
"id": 21869,
"name": "validUniqueAddresses",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21948,
"src": "1831:20:58",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_address_$_t_address_$",
"typeString": "modifier (address,address)"
}
},
"nodeType": "ModifierInvocation",
"src": "1831:56:58"
},
{
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21882,
"name": "_tokenAOracle",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21865,
"src": "1926:13:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
],
"id": 21881,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "1918:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 21880,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1918:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 21883,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1918:22:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21886,
"name": "_tokenBOracle",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21867,
"src": "1950:13:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
],
"id": 21885,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "1942:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 21884,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1942:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 21887,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1942:22:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"id": 21888,
"modifierName": {
"argumentTypes": null,
"id": 21879,
"name": "validUniqueAddresses",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21948,
"src": "1897:20:58",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_address_$_t_address_$",
"typeString": "modifier (address,address)"
}
},
"nodeType": "ModifierInvocation",
"src": "1897:68:58"
}
],
"name": "",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 21868,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 21861,
"mutability": "mutable",
"name": "_tokenA",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 21935,
"src": "1690:19:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 21860,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "1690:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 21863,
"mutability": "mutable",
"name": "_tokenB",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 21935,
"src": "1711:19:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 21862,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "1711:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 21865,
"mutability": "mutable",
"name": "_tokenAOracle",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 21935,
"src": "1732:35:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
},
"typeName": {
"contractScope": null,
"id": 21864,
"name": "IChainlinkPriceOracle",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22821,
"src": "1732:21:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 21867,
"mutability": "mutable",
"name": "_tokenBOracle",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 21935,
"src": "1769:35:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
},
"typeName": {
"contractScope": null,
"id": 21866,
"name": "IChainlinkPriceOracle",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22821,
"src": "1769:21:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1689:116:58"
},
"returnParameters": {
"id": 21889,
"nodeType": "ParameterList",
"parameters": [],
"src": "1971:0:58"
},
"scope": 22205,
"src": "1678:643:58",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"body": {
"id": 21947,
"nodeType": "Block",
"src": "2458:74:58",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21942,
"name": "_address1",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21937,
"src": "2491:9:58",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 21943,
"name": "_address2",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21939,
"src": "2502:9:58",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 21941,
"name": "_validUniqueAddresses",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21971,
"src": "2469:21:58",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$__$",
"typeString": "function (address,address) pure"
}
},
"id": 21944,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2469:43:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 21945,
"nodeType": "ExpressionStatement",
"src": "2469:43:58"
},
{
"id": 21946,
"nodeType": "PlaceholderStatement",
"src": "2523:1:58"
}
]
},
"documentation": null,
"id": 21948,
"name": "validUniqueAddresses",
"nodeType": "ModifierDefinition",
"overrides": null,
"parameters": {
"id": 21940,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 21937,
"mutability": "mutable",
"name": "_address1",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 21948,
"src": "2420:17:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 21936,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2420:7:58",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 21939,
"mutability": "mutable",
"name": "_address2",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 21948,
"src": "2439:17:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 21938,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2439:7:58",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "2419:38:58"
},
"src": "2390:142:58",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 21970,
"nodeType": "Block",
"src": "2670:140:58",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21956,
"name": "_address1",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21950,
"src": "2695:9:58",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 21955,
"name": "_validAddress",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22634,
"src": "2681:13:58",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_address_$returns$__$",
"typeString": "function (address) pure"
}
},
"id": 21957,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2681:24:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 21958,
"nodeType": "ExpressionStatement",
"src": "2681:24:58"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21960,
"name": "_address2",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21952,
"src": "2730:9:58",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 21959,
"name": "_validAddress",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22634,
"src": "2716:13:58",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_address_$returns$__$",
"typeString": "function (address) pure"
}
},
"id": 21961,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2716:24:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 21962,
"nodeType": "ExpressionStatement",
"src": "2716:24:58"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 21966,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 21964,
"name": "_address1",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21950,
"src": "2759:9:58",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"id": 21965,
"name": "_address2",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21952,
"src": "2772:9:58",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"src": "2759:22:58",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f53414d455f41444452455353",
"id": 21967,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2783:18:58",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_f8a367a12797014b9e2f1d71cd920760e1c54a6511a9a16d5ab22fb4d28800b6",
"typeString": "literal_string \"ERR_SAME_ADDRESS\""
},
"value": "ERR_SAME_ADDRESS"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_f8a367a12797014b9e2f1d71cd920760e1c54a6511a9a16d5ab22fb4d28800b6",
"typeString": "literal_string \"ERR_SAME_ADDRESS\""
}
],
"id": 21963,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "2751:7:58",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 21968,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2751:51:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 21969,
"nodeType": "ExpressionStatement",
"src": "2751:51:58"
}
]
},
"documentation": null,
"id": 21971,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_validUniqueAddresses",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 21953,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 21950,
"mutability": "mutable",
"name": "_address1",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 21971,
"src": "2618:17:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 21949,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2618:7:58",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 21952,
"mutability": "mutable",
"name": "_address2",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 21971,
"src": "2637:17:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 21951,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2637:7:58",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "2617:38:58"
},
"returnParameters": {
"id": 21954,
"nodeType": "ParameterList",
"parameters": [],
"src": "2670:0:58"
},
"scope": 22205,
"src": "2587:223:58",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 21983,
"nodeType": "Block",
"src": "2954:65:58",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21978,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21973,
"src": "2982:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
{
"argumentTypes": null,
"id": 21979,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21975,
"src": "2991:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 21977,
"name": "_supportedTokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22030,
"src": "2965:16:58",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21127_$_t_contract$_IERC20Token_$21127_$returns$__$",
"typeString": "function (contract IERC20Token,contract IERC20Token) view"
}
},
"id": 21980,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2965:34:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 21981,
"nodeType": "ExpressionStatement",
"src": "2965:34:58"
},
{
"id": 21982,
"nodeType": "PlaceholderStatement",
"src": "3010:1:58"
}
]
},
"documentation": null,
"id": 21984,
"name": "supportedTokens",
"nodeType": "ModifierDefinition",
"overrides": null,
"parameters": {
"id": 21976,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 21973,
"mutability": "mutable",
"name": "_tokenA",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 21984,
"src": "2912:19:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 21972,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "2912:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 21975,
"mutability": "mutable",
"name": "_tokenB",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 21984,
"src": "2933:19:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 21974,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "2933:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "2911:42:58"
},
"src": "2887:132:58",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 22029,
"nodeType": "Block",
"src": "3156:219:58",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21994,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21986,
"src": "3197:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 21993,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "3189:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 21992,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3189:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 21995,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3189:16:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21998,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21988,
"src": "3215:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 21997,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "3207:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 21996,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3207:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 21999,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3207:16:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 21991,
"name": "_validUniqueAddresses",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21971,
"src": "3167:21:58",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$__$",
"typeString": "function (address,address) pure"
}
},
"id": 22000,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3167:57:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 22001,
"nodeType": "ExpressionStatement",
"src": "3167:57:58"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 22025,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 22013,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 22005,
"name": "tokensToOracles",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21858,
"src": "3251:15:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_contract$_IChainlinkPriceOracle_$22821_$",
"typeString": "mapping(contract IERC20Token => contract IChainlinkPriceOracle)"
}
},
"id": 22007,
"indexExpression": {
"argumentTypes": null,
"id": 22006,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21986,
"src": "3267:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "3251:24:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
],
"id": 22004,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "3243:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 22003,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3243:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 22008,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3243:33:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "30",
"id": 22011,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3288:1:58",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
}
],
"id": 22010,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "3280:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 22009,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3280:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 22012,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3280:10:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "3243:47:58",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "&&",
"rightExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 22024,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 22016,
"name": "tokensToOracles",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21858,
"src": "3302:15:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_contract$_IChainlinkPriceOracle_$22821_$",
"typeString": "mapping(contract IERC20Token => contract IChainlinkPriceOracle)"
}
},
"id": 22018,
"indexExpression": {
"argumentTypes": null,
"id": 22017,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21988,
"src": "3318:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "3302:24:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
],
"id": 22015,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "3294:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 22014,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3294:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 22019,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3294:33:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "30",
"id": 22022,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3339:1:58",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
}
],
"id": 22021,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "3331:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 22020,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3331:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 22023,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3331:10:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "3294:47:58",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "3243:98:58",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f554e535550504f525445445f544f4b454e",
"id": 22026,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3343:23:58",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_fe5e253e0ad9d51f460b73c35652983a29904d3e214ecea083c7dec391c7b884",
"typeString": "literal_string \"ERR_UNSUPPORTED_TOKEN\""
},
"value": "ERR_UNSUPPORTED_TOKEN"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_fe5e253e0ad9d51f460b73c35652983a29904d3e214ecea083c7dec391c7b884",
"typeString": "literal_string \"ERR_UNSUPPORTED_TOKEN\""
}
],
"id": 22002,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "3235:7:58",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 22027,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3235:132:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 22028,
"nodeType": "ExpressionStatement",
"src": "3235:132:58"
}
]
},
"documentation": null,
"id": 22030,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_supportedTokens",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 21989,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 21986,
"mutability": "mutable",
"name": "_tokenA",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22030,
"src": "3100:19:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 21985,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "3100:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 21988,
"mutability": "mutable",
"name": "_tokenB",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22030,
"src": "3121:19:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 21987,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "3121:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "3099:42:58"
},
"returnParameters": {
"id": 21990,
"nodeType": "ParameterList",
"parameters": [],
"src": "3156:0:58"
},
"scope": 22205,
"src": "3074:301:58",
"stateMutability": "view",
"virtual": false,
"visibility": "internal"
},
{
"baseFunctions": [
22872
],
"body": {
"id": 22125,
"nodeType": "Block",
"src": "4088:1425:58",
"statements": [
{
"assignments": [
22048
],
"declarations": [
{
"constant": false,
"id": 22048,
"mutability": "mutable",
"name": "rateTokenA",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22125,
"src": "4099:18:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22047,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4099:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 22057,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 22051,
"name": "tokensToOracles",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21858,
"src": "4128:15:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_contract$_IChainlinkPriceOracle_$22821_$",
"typeString": "mapping(contract IERC20Token => contract IChainlinkPriceOracle)"
}
},
"id": 22053,
"indexExpression": {
"argumentTypes": null,
"id": 22052,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22033,
"src": "4144:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "4128:24:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"id": 22054,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "latestAnswer",
"nodeType": "MemberAccess",
"referencedDeclaration": 22815,
"src": "4128:37:58",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$__$returns$_t_int256_$",
"typeString": "function () view external returns (int256)"
}
},
"id": 22055,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4128:39:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_int256",
"typeString": "int256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_int256",
"typeString": "int256"
}
],
"id": 22050,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "4120:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_uint256_$",
"typeString": "type(uint256)"
},
"typeName": {
"id": 22049,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4120:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 22056,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4120:48:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "4099:69:58"
},
{
"assignments": [
22059
],
"declarations": [
{
"constant": false,
"id": 22059,
"mutability": "mutable",
"name": "rateTokenB",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22125,
"src": "4179:18:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22058,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4179:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 22068,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 22062,
"name": "tokensToOracles",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21858,
"src": "4208:15:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_contract$_IChainlinkPriceOracle_$22821_$",
"typeString": "mapping(contract IERC20Token => contract IChainlinkPriceOracle)"
}
},
"id": 22064,
"indexExpression": {
"argumentTypes": null,
"id": 22063,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22035,
"src": "4224:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "4208:24:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"id": 22065,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "latestAnswer",
"nodeType": "MemberAccess",
"referencedDeclaration": 22815,
"src": "4208:37:58",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$__$returns$_t_int256_$",
"typeString": "function () view external returns (int256)"
}
},
"id": 22066,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4208:39:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_int256",
"typeString": "int256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_int256",
"typeString": "int256"
}
],
"id": 22061,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "4200:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_uint256_$",
"typeString": "type(uint256)"
},
"typeName": {
"id": 22060,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4200:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 22067,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4200:48:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "4179:69:58"
},
{
"assignments": [
22070
],
"declarations": [
{
"constant": false,
"id": 22070,
"mutability": "mutable",
"name": "decimalsTokenA",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22125,
"src": "4259:20:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"typeName": {
"id": 22069,
"name": "uint8",
"nodeType": "ElementaryTypeName",
"src": "4259:5:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 22074,
"initialValue": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 22071,
"name": "tokenDecimals",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21848,
"src": "4282:13:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_uint8_$",
"typeString": "mapping(contract IERC20Token => uint8)"
}
},
"id": 22073,
"indexExpression": {
"argumentTypes": null,
"id": 22072,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22033,
"src": "4296:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "4282:22:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "4259:45:58"
},
{
"assignments": [
22076
],
"declarations": [
{
"constant": false,
"id": 22076,
"mutability": "mutable",
"name": "decimalsTokenB",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22125,
"src": "4315:20:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"typeName": {
"id": 22075,
"name": "uint8",
"nodeType": "ElementaryTypeName",
"src": "4315:5:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 22080,
"initialValue": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 22077,
"name": "tokenDecimals",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21848,
"src": "4338:13:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_uint8_$",
"typeString": "mapping(contract IERC20Token => uint8)"
}
},
"id": 22079,
"indexExpression": {
"argumentTypes": null,
"id": 22078,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22035,
"src": "4352:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "4338:22:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "4315:45:58"
},
{
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"id": 22083,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 22081,
"name": "decimalsTokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22070,
"src": "5169:14:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"argumentTypes": null,
"id": 22082,
"name": "decimalsTokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22076,
"src": "5186:14:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "5169:31:58",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": {
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"id": 22102,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 22100,
"name": "decimalsTokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22070,
"src": "5325:14:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"argumentTypes": null,
"id": 22101,
"name": "decimalsTokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22076,
"src": "5342:14:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "5325:31:58",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": null,
"id": 22119,
"nodeType": "IfStatement",
"src": "5321:141:58",
"trueBody": {
"id": 22118,
"nodeType": "Block",
"src": "5358:104:58",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 22116,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 22103,
"name": "rateTokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22048,
"src": "5373:10:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 22114,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "3130",
"id": 22108,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5409:2:58",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
},
"value": "10"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
}
],
"id": 22107,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "5401:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_uint256_$",
"typeString": "type(uint256)"
},
"typeName": {
"id": 22106,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5401:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 22109,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5401:11:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "**",
"rightExpression": {
"argumentTypes": null,
"components": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"id": 22112,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 22110,
"name": "decimalsTokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22076,
"src": "5417:14:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"nodeType": "BinaryOperation",
"operator": "-",
"rightExpression": {
"argumentTypes": null,
"id": 22111,
"name": "decimalsTokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22070,
"src": "5434:14:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "5417:31:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
}
],
"id": 22113,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "5416:33:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "5401:48:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 22104,
"name": "rateTokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22048,
"src": "5386:10:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 22105,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "mul",
"nodeType": "MemberAccess",
"referencedDeclaration": 22327,
"src": "5386:14:58",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 22115,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5386:64:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "5373:77:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 22117,
"nodeType": "ExpressionStatement",
"src": "5373:77:58"
}
]
}
},
"id": 22120,
"nodeType": "IfStatement",
"src": "5165:297:58",
"trueBody": {
"id": 22099,
"nodeType": "Block",
"src": "5202:104:58",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 22097,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 22084,
"name": "rateTokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22059,
"src": "5217:10:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 22095,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "3130",
"id": 22089,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5253:2:58",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
},
"value": "10"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
}
],
"id": 22088,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "5245:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_uint256_$",
"typeString": "type(uint256)"
},
"typeName": {
"id": 22087,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5245:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 22090,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5245:11:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "**",
"rightExpression": {
"argumentTypes": null,
"components": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"id": 22093,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 22091,
"name": "decimalsTokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22070,
"src": "5261:14:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"nodeType": "BinaryOperation",
"operator": "-",
"rightExpression": {
"argumentTypes": null,
"id": 22092,
"name": "decimalsTokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22076,
"src": "5278:14:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "5261:31:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
}
],
"id": 22094,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "5260:33:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "5245:48:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 22085,
"name": "rateTokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22059,
"src": "5230:10:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 22086,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "mul",
"nodeType": "MemberAccess",
"referencedDeclaration": 22327,
"src": "5230:14:58",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 22096,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5230:64:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "5217:77:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 22098,
"nodeType": "ExpressionStatement",
"src": "5217:77:58"
}
]
}
},
{
"expression": {
"argumentTypes": null,
"components": [
{
"argumentTypes": null,
"id": 22121,
"name": "rateTokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22048,
"src": "5482:10:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 22122,
"name": "rateTokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22059,
"src": "5494:10:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"id": 22123,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "5481:24:58",
"typeDescriptions": {
"typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
"typeString": "tuple(uint256,uint256)"
}
},
"functionReturnParameters": 22046,
"id": 22124,
"nodeType": "Return",
"src": "5474:31:58"
}
]
},
"documentation": {
"id": 22031,
"nodeType": "StructuredDocumentation",
"src": "3383:505:58",
"text": " @dev returns the latest known rate between the two given tokens\n for a given pair of tokens A and B, returns the rate of A / B\n (the number of B units equivalent to a single A unit)\n the rate is returned as a fraction (numerator / denominator) for accuracy\n @param _tokenA token to get the rate of 1 unit of\n @param _tokenB token to get the rate of 1 `_tokenA` against\n @return numerator\n @return denominator"
},
"functionSelector": "ae818004",
"id": 22126,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": [
{
"argumentTypes": null,
"id": 22039,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22033,
"src": "4029:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
{
"argumentTypes": null,
"id": 22040,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22035,
"src": "4038:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"id": 22041,
"modifierName": {
"argumentTypes": null,
"id": 22038,
"name": "supportedTokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21984,
"src": "4013:15:58",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21127_$_t_contract$_IERC20Token_$21127_$",
"typeString": "modifier (contract IERC20Token,contract IERC20Token)"
}
},
"nodeType": "ModifierInvocation",
"src": "4013:33:58"
}
],
"name": "latestRate",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 22037,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "3995:8:58"
},
"parameters": {
"id": 22036,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 22033,
"mutability": "mutable",
"name": "_tokenA",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22126,
"src": "3914:19:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 22032,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "3914:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 22035,
"mutability": "mutable",
"name": "_tokenB",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22126,
"src": "3935:19:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 22034,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "3935:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "3913:42:58"
},
"returnParameters": {
"id": 22046,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 22043,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22126,
"src": "4065:7:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22042,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4065:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 22045,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22126,
"src": "4074:7:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22044,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4074:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "4064:18:58"
},
"scope": 22205,
"src": "3894:1619:58",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
22877
],
"body": {
"id": 22152,
"nodeType": "Block",
"src": "5736:259:58",
"statements": [
{
"assignments": [
22134
],
"declarations": [
{
"constant": false,
"id": 22134,
"mutability": "mutable",
"name": "timestampA",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22152,
"src": "5804:18:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22133,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5804:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 22138,
"initialValue": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"expression": {
"argumentTypes": null,
"id": 22135,
"name": "tokenAOracle",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21851,
"src": "5825:12:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"id": 22136,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "latestTimestamp",
"nodeType": "MemberAccess",
"referencedDeclaration": 22820,
"src": "5825:28:58",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
"typeString": "function () view external returns (uint256)"
}
},
"id": 22137,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5825:30:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "5804:51:58"
},
{
"assignments": [
22140
],
"declarations": [
{
"constant": false,
"id": 22140,
"mutability": "mutable",
"name": "timestampB",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22152,
"src": "5866:18:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22139,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5866:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 22144,
"initialValue": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"expression": {
"argumentTypes": null,
"id": 22141,
"name": "tokenBOracle",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21854,
"src": "5887:12:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"id": 22142,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "latestTimestamp",
"nodeType": "MemberAccess",
"referencedDeclaration": 22820,
"src": "5887:28:58",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
"typeString": "function () view external returns (uint256)"
}
},
"id": 22143,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5887:30:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "5866:51:58"
},
{
"expression": {
"argumentTypes": null,
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 22147,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 22145,
"name": "timestampA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22134,
"src": "5938:10:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"argumentTypes": null,
"id": 22146,
"name": "timestampB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22140,
"src": "5951:10:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "5938:23:58",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseExpression": {
"argumentTypes": null,
"id": 22149,
"name": "timestampB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22140,
"src": "5977:10:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 22150,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "Conditional",
"src": "5938:49:58",
"trueExpression": {
"argumentTypes": null,
"id": 22148,
"name": "timestampA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22134,
"src": "5964:10:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 22132,
"id": 22151,
"nodeType": "Return",
"src": "5930:57:58"
}
]
},
"documentation": {
"id": 22127,
"nodeType": "StructuredDocumentation",
"src": "5521:108:58",
"text": " @dev returns the timestamp of the last price update\n @return timestamp"
},
"functionSelector": "c8f33c91",
"id": 22153,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "lastUpdateTime",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 22129,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "5700:8:58"
},
"parameters": {
"id": 22128,
"nodeType": "ParameterList",
"parameters": [],
"src": "5658:2:58"
},
"returnParameters": {
"id": 22132,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 22131,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22153,
"src": "5727:7:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22130,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5727:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "5726:9:58"
},
"scope": 22205,
"src": "5635:360:58",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
22890
],
"body": {
"id": 22183,
"nodeType": "Block",
"src": "6552:152:58",
"statements": [
{
"assignments": [
22169,
22171
],
"declarations": [
{
"constant": false,
"id": 22169,
"mutability": "mutable",
"name": "numerator",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22183,
"src": "6564:17:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22168,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6564:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 22171,
"mutability": "mutable",
"name": "denominator",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22183,
"src": "6583:19:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22170,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6583:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 22176,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 22173,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22156,
"src": "6617:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
{
"argumentTypes": null,
"id": 22174,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22158,
"src": "6626:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 22172,
"name": "latestRate",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22126,
"src": "6606:10:58",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21127_$_t_contract$_IERC20Token_$21127_$returns$_t_uint256_$_t_uint256_$",
"typeString": "function (contract IERC20Token,contract IERC20Token) view returns (uint256,uint256)"
}
},
"id": 22175,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6606:28:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
"typeString": "tuple(uint256,uint256)"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "6563:71:58"
},
{
"expression": {
"argumentTypes": null,
"components": [
{
"argumentTypes": null,
"id": 22177,
"name": "numerator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22169,
"src": "6655:9:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 22178,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22171,
"src": "6666:11:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 22179,
"name": "lastUpdateTime",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22153,
"src": "6679:14:58",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
"typeString": "function () view returns (uint256)"
}
},
"id": 22180,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6679:16:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"id": 22181,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "6654:42:58",
"typeDescriptions": {
"typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
"typeString": "tuple(uint256,uint256,uint256)"
}
},
"functionReturnParameters": 22167,
"id": 22182,
"nodeType": "Return",
"src": "6647:49:58"
}
]
},
"documentation": {
"id": 22154,
"nodeType": "StructuredDocumentation",
"src": "6003:370:58",
"text": " @dev returns both the rate and the timestamp of the last update in a single call (gas optimization)\n @param _tokenA token to get the rate of 1 unit of\n @param _tokenB token to get the rate of 1 `_tokenA` against\n @return numerator\n @return denominator\n @return timestamp of the last update"
},
"functionSelector": "b1772d7a",
"id": 22184,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "latestRateAndUpdateTime",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 22160,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "6493:8:58"
},
"parameters": {
"id": 22159,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 22156,
"mutability": "mutable",
"name": "_tokenA",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22184,
"src": "6412:19:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 22155,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "6412:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 22158,
"mutability": "mutable",
"name": "_tokenB",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22184,
"src": "6433:19:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 22157,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "6433:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "6411:42:58"
},
"returnParameters": {
"id": 22167,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 22162,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22184,
"src": "6520:7:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22161,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6520:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 22164,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22184,
"src": "6529:7:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22163,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6529:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 22166,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22184,
"src": "6538:7:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22165,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6538:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "6519:27:58"
},
"scope": 22205,
"src": "6379:325:58",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"body": {
"id": 22203,
"nodeType": "Block",
"src": "6834:128:58",
"statements": [
{
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"id": 22194,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 22192,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22187,
"src": "6849:6:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"id": 22193,
"name": "ETH_ADDRESS",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21837,
"src": "6859:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"src": "6849:21:58",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": null,
"id": 22198,
"nodeType": "IfStatement",
"src": "6845:73:58",
"trueBody": {
"id": 22197,
"nodeType": "Block",
"src": "6872:46:58",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 22195,
"name": "ETH_DECIMALS",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21840,
"src": "6894:12:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"functionReturnParameters": 22191,
"id": 22196,
"nodeType": "Return",
"src": "6887:19:58"
}
]
}
},
{
"expression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"expression": {
"argumentTypes": null,
"id": 22199,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22187,
"src": "6937:6:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"id": 22200,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "decimals",
"nodeType": "MemberAccess",
"referencedDeclaration": 21076,
"src": "6937:15:58",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
"typeString": "function () view external returns (uint8)"
}
},
"id": 22201,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6937:17:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"functionReturnParameters": 22191,
"id": 22202,
"nodeType": "Return",
"src": "6930:24:58"
}
]
},
"documentation": {
"id": 22185,
"nodeType": "StructuredDocumentation",
"src": "6712:49:58",
"text": "@dev returns the decimals of a given token "
},
"id": 22204,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "decimals",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 22188,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 22187,
"mutability": "mutable",
"name": "_token",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22204,
"src": "6785:18:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 22186,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "6785:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "6784:20:58"
},
"returnParameters": {
"id": 22191,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 22190,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22204,
"src": "6827:5:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"typeName": {
"id": 22189,
"name": "uint8",
"nodeType": "ElementaryTypeName",
"src": "6827:5:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "6826:7:58"
},
"scope": 22205,
"src": "6767:195:58",
"stateMutability": "view",
"virtual": false,
"visibility": "private"
}
],
"scope": 22206,
"src": "520:6445:58"
}
],
"src": "52:6915:58"
},
"legacyAST": {
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/PriceOracle.sol",
"exportedSymbols": {
"PriceOracle": [
22205
]
},
"id": 22206,
"license": "SEE LICENSE IN LICENSE",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 21820,
"literals": [
"solidity",
"0.6",
".12"
],
"nodeType": "PragmaDirective",
"src": "52:23:58"
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Utils.sol",
"file": "./Utils.sol",
"id": 21821,
"nodeType": "ImportDirective",
"scope": 22206,
"sourceUnit": 22662,
"src": "77:21:58",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/SafeMath.sol",
"file": "./SafeMath.sol",
"id": 21822,
"nodeType": "ImportDirective",
"scope": 22206,
"sourceUnit": 22355,
"src": "100:24:58",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IPriceOracle.sol",
"file": "./interfaces/IPriceOracle.sol",
"id": 21823,
"nodeType": "ImportDirective",
"scope": 22206,
"sourceUnit": 22892,
"src": "126:39:58",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IChainlinkPriceOracle.sol",
"file": "./interfaces/IChainlinkPriceOracle.sol",
"id": 21824,
"nodeType": "ImportDirective",
"scope": 22206,
"sourceUnit": 22822,
"src": "167:48:58",
"symbolAliases": [],
"unitAlias": ""
},
{
"abstract": false,
"baseContracts": [
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 21826,
"name": "IPriceOracle",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22891,
"src": "544:12:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IPriceOracle_$22891",
"typeString": "contract IPriceOracle"
}
},
"id": 21827,
"nodeType": "InheritanceSpecifier",
"src": "544:12:58"
},
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 21828,
"name": "Utils",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22661,
"src": "558:5:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_Utils_$22661",
"typeString": "contract Utils"
}
},
"id": 21829,
"nodeType": "InheritanceSpecifier",
"src": "558:5:58"
}
],
"contractDependencies": [
22661,
22891
],
"contractKind": "contract",
"documentation": {
"id": 21825,
"nodeType": "StructuredDocumentation",
"src": "219:299:58",
"text": " @dev Provides the off-chain rate between two tokens\n The price oracle uses chainlink oracles internally to get the rates of the two tokens\n with respect to a common denominator, and then returns the rate between them, which\n is equivalent to the rate of TokenA / TokenB"
},
"fullyImplemented": true,
"id": 22205,
"linearizedBaseContracts": [
22205,
22661,
22891
],
"name": "PriceOracle",
"nodeType": "ContractDefinition",
"nodes": [
{
"id": 21832,
"libraryName": {
"contractScope": null,
"id": 21830,
"name": "SafeMath",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22354,
"src": "577:8:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_SafeMath_$22354",
"typeString": "library SafeMath"
}
},
"nodeType": "UsingForDirective",
"src": "571:27:58",
"typeName": {
"id": 21831,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "590:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
},
{
"constant": true,
"id": 21837,
"mutability": "constant",
"name": "ETH_ADDRESS",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22205,
"src": "606:98:58",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 21833,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "606:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "307845656565654565656545654565654565456545656545454565656565456565656565656545456545",
"id": 21835,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "661:42:58",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
"value": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
],
"id": 21834,
"name": "IERC20Token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21127,
"src": "649:11:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_IERC20Token_$21127_$",
"typeString": "type(contract IERC20Token)"
}
},
"id": 21836,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "649:55:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"visibility": "private"
},
{
"constant": true,
"id": 21840,
"mutability": "constant",
"name": "ETH_DECIMALS",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22205,
"src": "711:40:58",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"typeName": {
"id": 21838,
"name": "uint8",
"nodeType": "ElementaryTypeName",
"src": "711:5:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"value": {
"argumentTypes": null,
"hexValue": "3138",
"id": 21839,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "749:2:58",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_18_by_1",
"typeString": "int_const 18"
},
"value": "18"
},
"visibility": "private"
},
{
"constant": false,
"functionSelector": "0fc63d10",
"id": 21842,
"mutability": "mutable",
"name": "tokenA",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22205,
"src": "760:25:58",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 21841,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "760:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "public"
},
{
"constant": false,
"functionSelector": "5f64b55b",
"id": 21844,
"mutability": "mutable",
"name": "tokenB",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22205,
"src": "824:25:58",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 21843,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "824:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "public"
},
{
"constant": false,
"functionSelector": "8ee573ac",
"id": 21848,
"mutability": "mutable",
"name": "tokenDecimals",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22205,
"src": "888:51:58",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_uint8_$",
"typeString": "mapping(contract IERC20Token => uint8)"
},
"typeName": {
"id": 21847,
"keyType": {
"contractScope": null,
"id": 21845,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "897:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"nodeType": "Mapping",
"src": "888:30:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_uint8_$",
"typeString": "mapping(contract IERC20Token => uint8)"
},
"valueType": {
"id": 21846,
"name": "uint8",
"nodeType": "ElementaryTypeName",
"src": "912:5:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
}
},
"value": null,
"visibility": "public"
},
{
"baseFunctions": [
22856
],
"constant": false,
"functionSelector": "b9e1715b",
"id": 21851,
"mutability": "mutable",
"name": "tokenAOracle",
"nodeType": "VariableDeclaration",
"overrides": {
"id": 21850,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "1007:8:58"
},
"scope": 22205,
"src": "978:50:58",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
},
"typeName": {
"contractScope": null,
"id": 21849,
"name": "IChainlinkPriceOracle",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22821,
"src": "978:21:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"value": null,
"visibility": "public"
},
{
"baseFunctions": [
22861
],
"constant": false,
"functionSelector": "f997fda7",
"id": 21854,
"mutability": "mutable",
"name": "tokenBOracle",
"nodeType": "VariableDeclaration",
"overrides": {
"id": 21853,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "1099:8:58"
},
"scope": 22205,
"src": "1070:50:58",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
},
"typeName": {
"contractScope": null,
"id": 21852,
"name": "IChainlinkPriceOracle",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22821,
"src": "1070:21:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"value": null,
"visibility": "public"
},
{
"constant": false,
"functionSelector": "cbd962d1",
"id": 21858,
"mutability": "mutable",
"name": "tokensToOracles",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22205,
"src": "1162:69:58",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_contract$_IChainlinkPriceOracle_$22821_$",
"typeString": "mapping(contract IERC20Token => contract IChainlinkPriceOracle)"
},
"typeName": {
"id": 21857,
"keyType": {
"contractScope": null,
"id": 21855,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "1171:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"nodeType": "Mapping",
"src": "1162:46:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_contract$_IChainlinkPriceOracle_$22821_$",
"typeString": "mapping(contract IERC20Token => contract IChainlinkPriceOracle)"
},
"valueType": {
"contractScope": null,
"id": 21856,
"name": "IChainlinkPriceOracle",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22821,
"src": "1186:21:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
}
},
"value": null,
"visibility": "public"
},
{
"body": {
"id": 21934,
"nodeType": "Block",
"src": "1971:350:58",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 21892,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 21890,
"name": "tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21842,
"src": "1982:6:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 21891,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21861,
"src": "1991:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"src": "1982:16:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"id": 21893,
"nodeType": "ExpressionStatement",
"src": "1982:16:58"
},
{
"expression": {
"argumentTypes": null,
"id": 21896,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 21894,
"name": "tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21844,
"src": "2009:6:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 21895,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21863,
"src": "2018:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"src": "2009:16:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"id": 21897,
"nodeType": "ExpressionStatement",
"src": "2009:16:58"
},
{
"expression": {
"argumentTypes": null,
"id": 21904,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 21898,
"name": "tokenDecimals",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21848,
"src": "2036:13:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_uint8_$",
"typeString": "mapping(contract IERC20Token => uint8)"
}
},
"id": 21900,
"indexExpression": {
"argumentTypes": null,
"id": 21899,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21861,
"src": "2050:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"nodeType": "IndexAccess",
"src": "2036:22:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21902,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21861,
"src": "2070:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 21901,
"name": "decimals",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22204,
"src": "2061:8:58",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21127_$returns$_t_uint8_$",
"typeString": "function (contract IERC20Token) view returns (uint8)"
}
},
"id": 21903,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2061:17:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "2036:42:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"id": 21905,
"nodeType": "ExpressionStatement",
"src": "2036:42:58"
},
{
"expression": {
"argumentTypes": null,
"id": 21912,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 21906,
"name": "tokenDecimals",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21848,
"src": "2089:13:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_uint8_$",
"typeString": "mapping(contract IERC20Token => uint8)"
}
},
"id": 21908,
"indexExpression": {
"argumentTypes": null,
"id": 21907,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21863,
"src": "2103:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"nodeType": "IndexAccess",
"src": "2089:22:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21910,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21863,
"src": "2123:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 21909,
"name": "decimals",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22204,
"src": "2114:8:58",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21127_$returns$_t_uint8_$",
"typeString": "function (contract IERC20Token) view returns (uint8)"
}
},
"id": 21911,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2114:17:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "2089:42:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"id": 21913,
"nodeType": "ExpressionStatement",
"src": "2089:42:58"
},
{
"expression": {
"argumentTypes": null,
"id": 21916,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 21914,
"name": "tokenAOracle",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21851,
"src": "2144:12:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 21915,
"name": "_tokenAOracle",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21865,
"src": "2159:13:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"src": "2144:28:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"id": 21917,
"nodeType": "ExpressionStatement",
"src": "2144:28:58"
},
{
"expression": {
"argumentTypes": null,
"id": 21920,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 21918,
"name": "tokenBOracle",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21854,
"src": "2183:12:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 21919,
"name": "_tokenBOracle",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21867,
"src": "2198:13:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"src": "2183:28:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"id": 21921,
"nodeType": "ExpressionStatement",
"src": "2183:28:58"
},
{
"expression": {
"argumentTypes": null,
"id": 21926,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 21922,
"name": "tokensToOracles",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21858,
"src": "2222:15:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_contract$_IChainlinkPriceOracle_$22821_$",
"typeString": "mapping(contract IERC20Token => contract IChainlinkPriceOracle)"
}
},
"id": 21924,
"indexExpression": {
"argumentTypes": null,
"id": 21923,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21861,
"src": "2238:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"nodeType": "IndexAccess",
"src": "2222:24:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 21925,
"name": "_tokenAOracle",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21865,
"src": "2249:13:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"src": "2222:40:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"id": 21927,
"nodeType": "ExpressionStatement",
"src": "2222:40:58"
},
{
"expression": {
"argumentTypes": null,
"id": 21932,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 21928,
"name": "tokensToOracles",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21858,
"src": "2273:15:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_contract$_IChainlinkPriceOracle_$22821_$",
"typeString": "mapping(contract IERC20Token => contract IChainlinkPriceOracle)"
}
},
"id": 21930,
"indexExpression": {
"argumentTypes": null,
"id": 21929,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21863,
"src": "2289:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"nodeType": "IndexAccess",
"src": "2273:24:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 21931,
"name": "_tokenBOracle",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21867,
"src": "2300:13:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"src": "2273:40:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"id": 21933,
"nodeType": "ExpressionStatement",
"src": "2273:40:58"
}
]
},
"documentation": {
"id": 21859,
"nodeType": "StructuredDocumentation",
"src": "1284:388:58",
"text": " @dev initializes a new PriceOracle instance\n note that the oracles must have the same common denominator (USD, ETH etc.)\n @param _tokenA first token to support\n @param _tokenB second token to support\n @param _tokenAOracle first token price oracle\n @param _tokenBOracle second token price oracle"
},
"id": 21935,
"implemented": true,
"kind": "constructor",
"modifiers": [
{
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21872,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21861,
"src": "1860:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 21871,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "1852:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 21870,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1852:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 21873,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1852:16:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21876,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21863,
"src": "1878:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 21875,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "1870:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 21874,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1870:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 21877,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1870:16:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"id": 21878,
"modifierName": {
"argumentTypes": null,
"id": 21869,
"name": "validUniqueAddresses",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21948,
"src": "1831:20:58",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_address_$_t_address_$",
"typeString": "modifier (address,address)"
}
},
"nodeType": "ModifierInvocation",
"src": "1831:56:58"
},
{
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21882,
"name": "_tokenAOracle",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21865,
"src": "1926:13:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
],
"id": 21881,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "1918:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 21880,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1918:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 21883,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1918:22:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21886,
"name": "_tokenBOracle",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21867,
"src": "1950:13:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
],
"id": 21885,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "1942:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 21884,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1942:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 21887,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1942:22:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"id": 21888,
"modifierName": {
"argumentTypes": null,
"id": 21879,
"name": "validUniqueAddresses",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21948,
"src": "1897:20:58",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_address_$_t_address_$",
"typeString": "modifier (address,address)"
}
},
"nodeType": "ModifierInvocation",
"src": "1897:68:58"
}
],
"name": "",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 21868,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 21861,
"mutability": "mutable",
"name": "_tokenA",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 21935,
"src": "1690:19:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 21860,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "1690:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 21863,
"mutability": "mutable",
"name": "_tokenB",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 21935,
"src": "1711:19:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 21862,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "1711:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 21865,
"mutability": "mutable",
"name": "_tokenAOracle",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 21935,
"src": "1732:35:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
},
"typeName": {
"contractScope": null,
"id": 21864,
"name": "IChainlinkPriceOracle",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22821,
"src": "1732:21:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 21867,
"mutability": "mutable",
"name": "_tokenBOracle",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 21935,
"src": "1769:35:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
},
"typeName": {
"contractScope": null,
"id": 21866,
"name": "IChainlinkPriceOracle",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22821,
"src": "1769:21:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1689:116:58"
},
"returnParameters": {
"id": 21889,
"nodeType": "ParameterList",
"parameters": [],
"src": "1971:0:58"
},
"scope": 22205,
"src": "1678:643:58",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"body": {
"id": 21947,
"nodeType": "Block",
"src": "2458:74:58",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21942,
"name": "_address1",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21937,
"src": "2491:9:58",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 21943,
"name": "_address2",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21939,
"src": "2502:9:58",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 21941,
"name": "_validUniqueAddresses",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21971,
"src": "2469:21:58",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$__$",
"typeString": "function (address,address) pure"
}
},
"id": 21944,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2469:43:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 21945,
"nodeType": "ExpressionStatement",
"src": "2469:43:58"
},
{
"id": 21946,
"nodeType": "PlaceholderStatement",
"src": "2523:1:58"
}
]
},
"documentation": null,
"id": 21948,
"name": "validUniqueAddresses",
"nodeType": "ModifierDefinition",
"overrides": null,
"parameters": {
"id": 21940,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 21937,
"mutability": "mutable",
"name": "_address1",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 21948,
"src": "2420:17:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 21936,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2420:7:58",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 21939,
"mutability": "mutable",
"name": "_address2",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 21948,
"src": "2439:17:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 21938,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2439:7:58",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "2419:38:58"
},
"src": "2390:142:58",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 21970,
"nodeType": "Block",
"src": "2670:140:58",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21956,
"name": "_address1",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21950,
"src": "2695:9:58",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 21955,
"name": "_validAddress",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22634,
"src": "2681:13:58",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_address_$returns$__$",
"typeString": "function (address) pure"
}
},
"id": 21957,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2681:24:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 21958,
"nodeType": "ExpressionStatement",
"src": "2681:24:58"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21960,
"name": "_address2",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21952,
"src": "2730:9:58",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 21959,
"name": "_validAddress",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22634,
"src": "2716:13:58",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_address_$returns$__$",
"typeString": "function (address) pure"
}
},
"id": 21961,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2716:24:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 21962,
"nodeType": "ExpressionStatement",
"src": "2716:24:58"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 21966,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 21964,
"name": "_address1",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21950,
"src": "2759:9:58",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"id": 21965,
"name": "_address2",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21952,
"src": "2772:9:58",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"src": "2759:22:58",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f53414d455f41444452455353",
"id": 21967,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2783:18:58",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_f8a367a12797014b9e2f1d71cd920760e1c54a6511a9a16d5ab22fb4d28800b6",
"typeString": "literal_string \"ERR_SAME_ADDRESS\""
},
"value": "ERR_SAME_ADDRESS"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_f8a367a12797014b9e2f1d71cd920760e1c54a6511a9a16d5ab22fb4d28800b6",
"typeString": "literal_string \"ERR_SAME_ADDRESS\""
}
],
"id": 21963,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "2751:7:58",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 21968,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2751:51:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 21969,
"nodeType": "ExpressionStatement",
"src": "2751:51:58"
}
]
},
"documentation": null,
"id": 21971,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_validUniqueAddresses",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 21953,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 21950,
"mutability": "mutable",
"name": "_address1",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 21971,
"src": "2618:17:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 21949,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2618:7:58",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 21952,
"mutability": "mutable",
"name": "_address2",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 21971,
"src": "2637:17:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 21951,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2637:7:58",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "2617:38:58"
},
"returnParameters": {
"id": 21954,
"nodeType": "ParameterList",
"parameters": [],
"src": "2670:0:58"
},
"scope": 22205,
"src": "2587:223:58",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 21983,
"nodeType": "Block",
"src": "2954:65:58",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21978,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21973,
"src": "2982:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
{
"argumentTypes": null,
"id": 21979,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21975,
"src": "2991:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 21977,
"name": "_supportedTokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22030,
"src": "2965:16:58",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21127_$_t_contract$_IERC20Token_$21127_$returns$__$",
"typeString": "function (contract IERC20Token,contract IERC20Token) view"
}
},
"id": 21980,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2965:34:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 21981,
"nodeType": "ExpressionStatement",
"src": "2965:34:58"
},
{
"id": 21982,
"nodeType": "PlaceholderStatement",
"src": "3010:1:58"
}
]
},
"documentation": null,
"id": 21984,
"name": "supportedTokens",
"nodeType": "ModifierDefinition",
"overrides": null,
"parameters": {
"id": 21976,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 21973,
"mutability": "mutable",
"name": "_tokenA",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 21984,
"src": "2912:19:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 21972,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "2912:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 21975,
"mutability": "mutable",
"name": "_tokenB",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 21984,
"src": "2933:19:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 21974,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "2933:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "2911:42:58"
},
"src": "2887:132:58",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 22029,
"nodeType": "Block",
"src": "3156:219:58",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21994,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21986,
"src": "3197:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 21993,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "3189:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 21992,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3189:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 21995,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3189:16:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 21998,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21988,
"src": "3215:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 21997,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "3207:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 21996,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3207:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 21999,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3207:16:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 21991,
"name": "_validUniqueAddresses",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21971,
"src": "3167:21:58",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$__$",
"typeString": "function (address,address) pure"
}
},
"id": 22000,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3167:57:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 22001,
"nodeType": "ExpressionStatement",
"src": "3167:57:58"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 22025,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 22013,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 22005,
"name": "tokensToOracles",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21858,
"src": "3251:15:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_contract$_IChainlinkPriceOracle_$22821_$",
"typeString": "mapping(contract IERC20Token => contract IChainlinkPriceOracle)"
}
},
"id": 22007,
"indexExpression": {
"argumentTypes": null,
"id": 22006,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21986,
"src": "3267:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "3251:24:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
],
"id": 22004,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "3243:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 22003,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3243:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 22008,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3243:33:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "30",
"id": 22011,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3288:1:58",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
}
],
"id": 22010,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "3280:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 22009,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3280:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 22012,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3280:10:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "3243:47:58",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "&&",
"rightExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 22024,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 22016,
"name": "tokensToOracles",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21858,
"src": "3302:15:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_contract$_IChainlinkPriceOracle_$22821_$",
"typeString": "mapping(contract IERC20Token => contract IChainlinkPriceOracle)"
}
},
"id": 22018,
"indexExpression": {
"argumentTypes": null,
"id": 22017,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21988,
"src": "3318:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "3302:24:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
],
"id": 22015,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "3294:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 22014,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3294:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 22019,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3294:33:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "30",
"id": 22022,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3339:1:58",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
}
],
"id": 22021,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "3331:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 22020,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3331:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 22023,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3331:10:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "3294:47:58",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "3243:98:58",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f554e535550504f525445445f544f4b454e",
"id": 22026,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3343:23:58",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_fe5e253e0ad9d51f460b73c35652983a29904d3e214ecea083c7dec391c7b884",
"typeString": "literal_string \"ERR_UNSUPPORTED_TOKEN\""
},
"value": "ERR_UNSUPPORTED_TOKEN"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_fe5e253e0ad9d51f460b73c35652983a29904d3e214ecea083c7dec391c7b884",
"typeString": "literal_string \"ERR_UNSUPPORTED_TOKEN\""
}
],
"id": 22002,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "3235:7:58",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 22027,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3235:132:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 22028,
"nodeType": "ExpressionStatement",
"src": "3235:132:58"
}
]
},
"documentation": null,
"id": 22030,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_supportedTokens",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 21989,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 21986,
"mutability": "mutable",
"name": "_tokenA",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22030,
"src": "3100:19:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 21985,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "3100:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 21988,
"mutability": "mutable",
"name": "_tokenB",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22030,
"src": "3121:19:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 21987,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "3121:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "3099:42:58"
},
"returnParameters": {
"id": 21990,
"nodeType": "ParameterList",
"parameters": [],
"src": "3156:0:58"
},
"scope": 22205,
"src": "3074:301:58",
"stateMutability": "view",
"virtual": false,
"visibility": "internal"
},
{
"baseFunctions": [
22872
],
"body": {
"id": 22125,
"nodeType": "Block",
"src": "4088:1425:58",
"statements": [
{
"assignments": [
22048
],
"declarations": [
{
"constant": false,
"id": 22048,
"mutability": "mutable",
"name": "rateTokenA",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22125,
"src": "4099:18:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22047,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4099:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 22057,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 22051,
"name": "tokensToOracles",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21858,
"src": "4128:15:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_contract$_IChainlinkPriceOracle_$22821_$",
"typeString": "mapping(contract IERC20Token => contract IChainlinkPriceOracle)"
}
},
"id": 22053,
"indexExpression": {
"argumentTypes": null,
"id": 22052,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22033,
"src": "4144:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "4128:24:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"id": 22054,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "latestAnswer",
"nodeType": "MemberAccess",
"referencedDeclaration": 22815,
"src": "4128:37:58",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$__$returns$_t_int256_$",
"typeString": "function () view external returns (int256)"
}
},
"id": 22055,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4128:39:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_int256",
"typeString": "int256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_int256",
"typeString": "int256"
}
],
"id": 22050,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "4120:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_uint256_$",
"typeString": "type(uint256)"
},
"typeName": {
"id": 22049,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4120:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 22056,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4120:48:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "4099:69:58"
},
{
"assignments": [
22059
],
"declarations": [
{
"constant": false,
"id": 22059,
"mutability": "mutable",
"name": "rateTokenB",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22125,
"src": "4179:18:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22058,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4179:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 22068,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 22062,
"name": "tokensToOracles",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21858,
"src": "4208:15:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_contract$_IChainlinkPriceOracle_$22821_$",
"typeString": "mapping(contract IERC20Token => contract IChainlinkPriceOracle)"
}
},
"id": 22064,
"indexExpression": {
"argumentTypes": null,
"id": 22063,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22035,
"src": "4224:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "4208:24:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"id": 22065,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "latestAnswer",
"nodeType": "MemberAccess",
"referencedDeclaration": 22815,
"src": "4208:37:58",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$__$returns$_t_int256_$",
"typeString": "function () view external returns (int256)"
}
},
"id": 22066,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4208:39:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_int256",
"typeString": "int256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_int256",
"typeString": "int256"
}
],
"id": 22061,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "4200:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_uint256_$",
"typeString": "type(uint256)"
},
"typeName": {
"id": 22060,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4200:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 22067,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4200:48:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "4179:69:58"
},
{
"assignments": [
22070
],
"declarations": [
{
"constant": false,
"id": 22070,
"mutability": "mutable",
"name": "decimalsTokenA",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22125,
"src": "4259:20:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"typeName": {
"id": 22069,
"name": "uint8",
"nodeType": "ElementaryTypeName",
"src": "4259:5:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 22074,
"initialValue": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 22071,
"name": "tokenDecimals",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21848,
"src": "4282:13:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_uint8_$",
"typeString": "mapping(contract IERC20Token => uint8)"
}
},
"id": 22073,
"indexExpression": {
"argumentTypes": null,
"id": 22072,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22033,
"src": "4296:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "4282:22:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "4259:45:58"
},
{
"assignments": [
22076
],
"declarations": [
{
"constant": false,
"id": 22076,
"mutability": "mutable",
"name": "decimalsTokenB",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22125,
"src": "4315:20:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"typeName": {
"id": 22075,
"name": "uint8",
"nodeType": "ElementaryTypeName",
"src": "4315:5:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 22080,
"initialValue": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 22077,
"name": "tokenDecimals",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21848,
"src": "4338:13:58",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_uint8_$",
"typeString": "mapping(contract IERC20Token => uint8)"
}
},
"id": 22079,
"indexExpression": {
"argumentTypes": null,
"id": 22078,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22035,
"src": "4352:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "4338:22:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "4315:45:58"
},
{
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"id": 22083,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 22081,
"name": "decimalsTokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22070,
"src": "5169:14:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"argumentTypes": null,
"id": 22082,
"name": "decimalsTokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22076,
"src": "5186:14:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "5169:31:58",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": {
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"id": 22102,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 22100,
"name": "decimalsTokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22070,
"src": "5325:14:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"argumentTypes": null,
"id": 22101,
"name": "decimalsTokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22076,
"src": "5342:14:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "5325:31:58",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": null,
"id": 22119,
"nodeType": "IfStatement",
"src": "5321:141:58",
"trueBody": {
"id": 22118,
"nodeType": "Block",
"src": "5358:104:58",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 22116,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 22103,
"name": "rateTokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22048,
"src": "5373:10:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 22114,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "3130",
"id": 22108,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5409:2:58",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
},
"value": "10"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
}
],
"id": 22107,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "5401:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_uint256_$",
"typeString": "type(uint256)"
},
"typeName": {
"id": 22106,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5401:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 22109,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5401:11:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "**",
"rightExpression": {
"argumentTypes": null,
"components": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"id": 22112,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 22110,
"name": "decimalsTokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22076,
"src": "5417:14:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"nodeType": "BinaryOperation",
"operator": "-",
"rightExpression": {
"argumentTypes": null,
"id": 22111,
"name": "decimalsTokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22070,
"src": "5434:14:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "5417:31:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
}
],
"id": 22113,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "5416:33:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "5401:48:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 22104,
"name": "rateTokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22048,
"src": "5386:10:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 22105,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "mul",
"nodeType": "MemberAccess",
"referencedDeclaration": 22327,
"src": "5386:14:58",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 22115,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5386:64:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "5373:77:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 22117,
"nodeType": "ExpressionStatement",
"src": "5373:77:58"
}
]
}
},
"id": 22120,
"nodeType": "IfStatement",
"src": "5165:297:58",
"trueBody": {
"id": 22099,
"nodeType": "Block",
"src": "5202:104:58",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 22097,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 22084,
"name": "rateTokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22059,
"src": "5217:10:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 22095,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "3130",
"id": 22089,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5253:2:58",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
},
"value": "10"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
}
],
"id": 22088,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "5245:7:58",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_uint256_$",
"typeString": "type(uint256)"
},
"typeName": {
"id": 22087,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5245:7:58",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 22090,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5245:11:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "**",
"rightExpression": {
"argumentTypes": null,
"components": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"id": 22093,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 22091,
"name": "decimalsTokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22070,
"src": "5261:14:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"nodeType": "BinaryOperation",
"operator": "-",
"rightExpression": {
"argumentTypes": null,
"id": 22092,
"name": "decimalsTokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22076,
"src": "5278:14:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "5261:31:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
}
],
"id": 22094,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "5260:33:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "5245:48:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 22085,
"name": "rateTokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22059,
"src": "5230:10:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 22086,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "mul",
"nodeType": "MemberAccess",
"referencedDeclaration": 22327,
"src": "5230:14:58",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 22096,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5230:64:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "5217:77:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 22098,
"nodeType": "ExpressionStatement",
"src": "5217:77:58"
}
]
}
},
{
"expression": {
"argumentTypes": null,
"components": [
{
"argumentTypes": null,
"id": 22121,
"name": "rateTokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22048,
"src": "5482:10:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 22122,
"name": "rateTokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22059,
"src": "5494:10:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"id": 22123,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "5481:24:58",
"typeDescriptions": {
"typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
"typeString": "tuple(uint256,uint256)"
}
},
"functionReturnParameters": 22046,
"id": 22124,
"nodeType": "Return",
"src": "5474:31:58"
}
]
},
"documentation": {
"id": 22031,
"nodeType": "StructuredDocumentation",
"src": "3383:505:58",
"text": " @dev returns the latest known rate between the two given tokens\n for a given pair of tokens A and B, returns the rate of A / B\n (the number of B units equivalent to a single A unit)\n the rate is returned as a fraction (numerator / denominator) for accuracy\n @param _tokenA token to get the rate of 1 unit of\n @param _tokenB token to get the rate of 1 `_tokenA` against\n @return numerator\n @return denominator"
},
"functionSelector": "ae818004",
"id": 22126,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": [
{
"argumentTypes": null,
"id": 22039,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22033,
"src": "4029:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
{
"argumentTypes": null,
"id": 22040,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22035,
"src": "4038:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"id": 22041,
"modifierName": {
"argumentTypes": null,
"id": 22038,
"name": "supportedTokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21984,
"src": "4013:15:58",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21127_$_t_contract$_IERC20Token_$21127_$",
"typeString": "modifier (contract IERC20Token,contract IERC20Token)"
}
},
"nodeType": "ModifierInvocation",
"src": "4013:33:58"
}
],
"name": "latestRate",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 22037,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "3995:8:58"
},
"parameters": {
"id": 22036,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 22033,
"mutability": "mutable",
"name": "_tokenA",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22126,
"src": "3914:19:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 22032,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "3914:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 22035,
"mutability": "mutable",
"name": "_tokenB",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22126,
"src": "3935:19:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 22034,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "3935:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "3913:42:58"
},
"returnParameters": {
"id": 22046,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 22043,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22126,
"src": "4065:7:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22042,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4065:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 22045,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22126,
"src": "4074:7:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22044,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4074:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "4064:18:58"
},
"scope": 22205,
"src": "3894:1619:58",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
22877
],
"body": {
"id": 22152,
"nodeType": "Block",
"src": "5736:259:58",
"statements": [
{
"assignments": [
22134
],
"declarations": [
{
"constant": false,
"id": 22134,
"mutability": "mutable",
"name": "timestampA",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22152,
"src": "5804:18:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22133,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5804:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 22138,
"initialValue": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"expression": {
"argumentTypes": null,
"id": 22135,
"name": "tokenAOracle",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21851,
"src": "5825:12:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"id": 22136,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "latestTimestamp",
"nodeType": "MemberAccess",
"referencedDeclaration": 22820,
"src": "5825:28:58",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
"typeString": "function () view external returns (uint256)"
}
},
"id": 22137,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5825:30:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "5804:51:58"
},
{
"assignments": [
22140
],
"declarations": [
{
"constant": false,
"id": 22140,
"mutability": "mutable",
"name": "timestampB",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22152,
"src": "5866:18:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22139,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5866:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 22144,
"initialValue": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"expression": {
"argumentTypes": null,
"id": 22141,
"name": "tokenBOracle",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21854,
"src": "5887:12:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IChainlinkPriceOracle_$22821",
"typeString": "contract IChainlinkPriceOracle"
}
},
"id": 22142,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "latestTimestamp",
"nodeType": "MemberAccess",
"referencedDeclaration": 22820,
"src": "5887:28:58",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
"typeString": "function () view external returns (uint256)"
}
},
"id": 22143,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5887:30:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "5866:51:58"
},
{
"expression": {
"argumentTypes": null,
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 22147,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 22145,
"name": "timestampA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22134,
"src": "5938:10:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"argumentTypes": null,
"id": 22146,
"name": "timestampB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22140,
"src": "5951:10:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "5938:23:58",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseExpression": {
"argumentTypes": null,
"id": 22149,
"name": "timestampB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22140,
"src": "5977:10:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 22150,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "Conditional",
"src": "5938:49:58",
"trueExpression": {
"argumentTypes": null,
"id": 22148,
"name": "timestampA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22134,
"src": "5964:10:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 22132,
"id": 22151,
"nodeType": "Return",
"src": "5930:57:58"
}
]
},
"documentation": {
"id": 22127,
"nodeType": "StructuredDocumentation",
"src": "5521:108:58",
"text": " @dev returns the timestamp of the last price update\n @return timestamp"
},
"functionSelector": "c8f33c91",
"id": 22153,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "lastUpdateTime",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 22129,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "5700:8:58"
},
"parameters": {
"id": 22128,
"nodeType": "ParameterList",
"parameters": [],
"src": "5658:2:58"
},
"returnParameters": {
"id": 22132,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 22131,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22153,
"src": "5727:7:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22130,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5727:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "5726:9:58"
},
"scope": 22205,
"src": "5635:360:58",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
22890
],
"body": {
"id": 22183,
"nodeType": "Block",
"src": "6552:152:58",
"statements": [
{
"assignments": [
22169,
22171
],
"declarations": [
{
"constant": false,
"id": 22169,
"mutability": "mutable",
"name": "numerator",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22183,
"src": "6564:17:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22168,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6564:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 22171,
"mutability": "mutable",
"name": "denominator",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22183,
"src": "6583:19:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22170,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6583:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 22176,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 22173,
"name": "_tokenA",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22156,
"src": "6617:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
{
"argumentTypes": null,
"id": 22174,
"name": "_tokenB",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22158,
"src": "6626:7:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 22172,
"name": "latestRate",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22126,
"src": "6606:10:58",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21127_$_t_contract$_IERC20Token_$21127_$returns$_t_uint256_$_t_uint256_$",
"typeString": "function (contract IERC20Token,contract IERC20Token) view returns (uint256,uint256)"
}
},
"id": 22175,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6606:28:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
"typeString": "tuple(uint256,uint256)"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "6563:71:58"
},
{
"expression": {
"argumentTypes": null,
"components": [
{
"argumentTypes": null,
"id": 22177,
"name": "numerator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22169,
"src": "6655:9:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 22178,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22171,
"src": "6666:11:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 22179,
"name": "lastUpdateTime",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22153,
"src": "6679:14:58",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
"typeString": "function () view returns (uint256)"
}
},
"id": 22180,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6679:16:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"id": 22181,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "6654:42:58",
"typeDescriptions": {
"typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
"typeString": "tuple(uint256,uint256,uint256)"
}
},
"functionReturnParameters": 22167,
"id": 22182,
"nodeType": "Return",
"src": "6647:49:58"
}
]
},
"documentation": {
"id": 22154,
"nodeType": "StructuredDocumentation",
"src": "6003:370:58",
"text": " @dev returns both the rate and the timestamp of the last update in a single call (gas optimization)\n @param _tokenA token to get the rate of 1 unit of\n @param _tokenB token to get the rate of 1 `_tokenA` against\n @return numerator\n @return denominator\n @return timestamp of the last update"
},
"functionSelector": "b1772d7a",
"id": 22184,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "latestRateAndUpdateTime",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 22160,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "6493:8:58"
},
"parameters": {
"id": 22159,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 22156,
"mutability": "mutable",
"name": "_tokenA",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22184,
"src": "6412:19:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 22155,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "6412:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 22158,
"mutability": "mutable",
"name": "_tokenB",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22184,
"src": "6433:19:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 22157,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "6433:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "6411:42:58"
},
"returnParameters": {
"id": 22167,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 22162,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22184,
"src": "6520:7:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22161,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6520:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 22164,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22184,
"src": "6529:7:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22163,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6529:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 22166,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22184,
"src": "6538:7:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 22165,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6538:7:58",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "6519:27:58"
},
"scope": 22205,
"src": "6379:325:58",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"body": {
"id": 22203,
"nodeType": "Block",
"src": "6834:128:58",
"statements": [
{
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"id": 22194,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 22192,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22187,
"src": "6849:6:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"id": 22193,
"name": "ETH_ADDRESS",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21837,
"src": "6859:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"src": "6849:21:58",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": null,
"id": 22198,
"nodeType": "IfStatement",
"src": "6845:73:58",
"trueBody": {
"id": 22197,
"nodeType": "Block",
"src": "6872:46:58",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 22195,
"name": "ETH_DECIMALS",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21840,
"src": "6894:12:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"functionReturnParameters": 22191,
"id": 22196,
"nodeType": "Return",
"src": "6887:19:58"
}
]
}
},
{
"expression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"expression": {
"argumentTypes": null,
"id": 22199,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22187,
"src": "6937:6:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"id": 22200,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "decimals",
"nodeType": "MemberAccess",
"referencedDeclaration": 21076,
"src": "6937:15:58",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
"typeString": "function () view external returns (uint8)"
}
},
"id": 22201,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6937:17:58",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"functionReturnParameters": 22191,
"id": 22202,
"nodeType": "Return",
"src": "6930:24:58"
}
]
},
"documentation": {
"id": 22185,
"nodeType": "StructuredDocumentation",
"src": "6712:49:58",
"text": "@dev returns the decimals of a given token "
},
"id": 22204,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "decimals",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 22188,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 22187,
"mutability": "mutable",
"name": "_token",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22204,
"src": "6785:18:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 22186,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "6785:11:58",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "6784:20:58"
},
"returnParameters": {
"id": 22191,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 22190,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 22204,
"src": "6827:5:58",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"typeName": {
"id": 22189,
"name": "uint8",
"nodeType": "ElementaryTypeName",
"src": "6827:5:58",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "6826:7:58"
},
"scope": 22205,
"src": "6767:195:58",
"stateMutability": "view",
"virtual": false,
"visibility": "private"
}
],
"scope": 22206,
"src": "520:6445:58"
}
],
"src": "52:6915:58"
},
"compiler": {
"name": "solc",
"version": "0.6.12+commit.27d51765.Emscripten.clang"
},
"networks": {},
"schemaVersion": "3.2.3",
"updatedAt": "2020-10-20T08:24:47.841Z",
"devdoc": {
"details": "Provides the off-chain rate between two tokens The price oracle uses chainlink oracles internally to get the rates of the two tokens with respect to a common denominator, and then returns the rate between them, which is equivalent to the rate of TokenA / TokenB",
"kind": "dev",
"methods": {
"constructor": {
"details": "initializes a new PriceOracle instance note that the oracles must have the same common denominator (USD, ETH etc.)",
"params": {
"_tokenA": "first token to support",
"_tokenAOracle": "first token price oracle",
"_tokenB": "second token to support",
"_tokenBOracle": "second token price oracle"
}
},
"lastUpdateTime()": {
"details": "returns the timestamp of the last price update",
"returns": {
"_0": "timestamp"
}
},
"latestRate(address,address)": {
"details": "returns the latest known rate between the two given tokens for a given pair of tokens A and B, returns the rate of A / B (the number of B units equivalent to a single A unit) the rate is returned as a fraction (numerator / denominator) for accuracy",
"params": {
"_tokenA": "token to get the rate of 1 unit of",
"_tokenB": "token to get the rate of 1 `_tokenA` against"
},
"returns": {
"_0": "numerator",
"_1": "denominator"
}
},
"latestRateAndUpdateTime(address,address)": {
"details": "returns both the rate and the timestamp of the last update in a single call (gas optimization)",
"params": {
"_tokenA": "token to get the rate of 1 unit of",
"_tokenB": "token to get the rate of 1 `_tokenA` against"
},
"returns": {
"_0": "numerator",
"_1": "denominator",
"_2": "timestamp of the last update"
}
}
},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}