cic-internal-integration/apps/cic-eth/tests/testdata/bancor/ConverterBase.json

28012 lines
1.1 MiB

{
"contractName": "ConverterBase",
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint16",
"name": "_type",
"type": "uint16"
},
{
"indexed": true,
"internalType": "contract IConverterAnchor",
"name": "_anchor",
"type": "address"
},
{
"indexed": true,
"internalType": "bool",
"name": "_activated",
"type": "bool"
}
],
"name": "Activation",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "contract IERC20Token",
"name": "_fromToken",
"type": "address"
},
{
"indexed": true,
"internalType": "contract IERC20Token",
"name": "_toToken",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_trader",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_return",
"type": "uint256"
},
{
"indexed": false,
"internalType": "int256",
"name": "_conversionFee",
"type": "int256"
}
],
"name": "Conversion",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint32",
"name": "_prevFee",
"type": "uint32"
},
{
"indexed": false,
"internalType": "uint32",
"name": "_newFee",
"type": "uint32"
}
],
"name": "ConversionFeeUpdate",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_prevOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_newOwner",
"type": "address"
}
],
"name": "OwnerUpdate",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "contract IERC20Token",
"name": "_token1",
"type": "address"
},
{
"indexed": true,
"internalType": "contract IERC20Token",
"name": "_token2",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_rateN",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_rateD",
"type": "uint256"
}
],
"name": "TokenRateUpdate",
"type": "event"
},
{
"inputs": [],
"name": "acceptOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "anchor",
"outputs": [
{
"internalType": "contract IConverterAnchor",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "conversionFee",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "conversionWhitelist",
"outputs": [
{
"internalType": "contract IWhitelist",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "conversionsEnabled",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "maxConversionFee",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "newOwner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "onlyOwnerCanUpdateRegistry",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "prevRegistry",
"outputs": [
{
"internalType": "contract IContractRegistry",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "registry",
"outputs": [
{
"internalType": "contract IContractRegistry",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "reserveRatio",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "reserveTokens",
"outputs": [
{
"internalType": "contract IERC20Token",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "",
"type": "address"
}
],
"name": "reserves",
"outputs": [
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "weight",
"type": "uint32"
},
{
"internalType": "bool",
"name": "deprecated1",
"type": "bool"
},
{
"internalType": "bool",
"name": "deprecated2",
"type": "bool"
},
{
"internalType": "bool",
"name": "isSet",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "restoreRegistry",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bool",
"name": "_onlyOwnerCanUpdateRegistry",
"type": "bool"
}
],
"name": "restrictRegistryUpdate",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "updateRegistry",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "version",
"outputs": [
{
"internalType": "uint16",
"name": "",
"type": "uint16"
}
],
"stateMutability": "view",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
},
{
"inputs": [],
"name": "converterType",
"outputs": [
{
"internalType": "uint16",
"name": "",
"type": "uint16"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_sourceToken",
"type": "address"
},
{
"internalType": "contract IERC20Token",
"name": "_targetToken",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "targetAmountAndFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address payable",
"name": "_to",
"type": "address"
}
],
"name": "withdrawETH",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "isV28OrHigher",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IWhitelist",
"name": "_whitelist",
"type": "address"
}
],
"name": "setConversionWhitelist",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "isActive",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_newOwner",
"type": "address"
}
],
"name": "transferAnchorOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "acceptAnchorOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_token",
"type": "address"
},
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "withdrawFromAnchor",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "_conversionFee",
"type": "uint32"
}
],
"name": "setConversionFee",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_token",
"type": "address"
},
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "withdrawTokens",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "upgrade",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "reserveTokenCount",
"outputs": [
{
"internalType": "uint16",
"name": "",
"type": "uint16"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_token",
"type": "address"
},
{
"internalType": "uint32",
"name": "_weight",
"type": "uint32"
}
],
"name": "addReserve",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_reserveToken",
"type": "address"
}
],
"name": "reserveWeight",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_reserveToken",
"type": "address"
}
],
"name": "reserveBalance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "hasETHReserve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_sourceToken",
"type": "address"
},
{
"internalType": "contract IERC20Token",
"name": "_targetToken",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "_trader",
"type": "address"
},
{
"internalType": "address payable",
"name": "_beneficiary",
"type": "address"
}
],
"name": "convert",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "token",
"outputs": [
{
"internalType": "contract IConverterAnchor",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_newOwner",
"type": "address"
}
],
"name": "transferTokenOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "acceptTokenOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_address",
"type": "address"
}
],
"name": "connectors",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "",
"type": "uint32"
},
{
"internalType": "bool",
"name": "",
"type": "bool"
},
{
"internalType": "bool",
"name": "",
"type": "bool"
},
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_index",
"type": "uint256"
}
],
"name": "connectorTokens",
"outputs": [
{
"internalType": "contract IERC20Token",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "connectorTokenCount",
"outputs": [
{
"internalType": "uint16",
"name": "",
"type": "uint16"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_connectorToken",
"type": "address"
}
],
"name": "getConnectorBalance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_sourceToken",
"type": "address"
},
{
"internalType": "contract IERC20Token",
"name": "_targetToken",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "getReturn",
"outputs": [
{
"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\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"_type\",\"type\":\"uint16\"},{\"indexed\":true,\"internalType\":\"contract IConverterAnchor\",\"name\":\"_anchor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"_activated\",\"type\":\"bool\"}],\"name\":\"Activation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20Token\",\"name\":\"_fromToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20Token\",\"name\":\"_toToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_trader\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_return\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"_conversionFee\",\"type\":\"int256\"}],\"name\":\"Conversion\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"_prevFee\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"_newFee\",\"type\":\"uint32\"}],\"name\":\"ConversionFeeUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_prevOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"OwnerUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20Token\",\"name\":\"_token1\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20Token\",\"name\":\"_token2\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rateN\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rateD\",\"type\":\"uint256\"}],\"name\":\"TokenRateUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptAnchorOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptTokenOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_weight\",\"type\":\"uint32\"}],\"name\":\"addReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"anchor\",\"outputs\":[{\"internalType\":\"contract IConverterAnchor\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"connectorTokenCount\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"connectorTokens\",\"outputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"connectors\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"conversionFee\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"conversionWhitelist\",\"outputs\":[{\"internalType\":\"contract IWhitelist\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"conversionsEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_sourceToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20Token\",\"name\":\"_targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_trader\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"_beneficiary\",\"type\":\"address\"}],\"name\":\"convert\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"converterType\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_connectorToken\",\"type\":\"address\"}],\"name\":\"getConnectorBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_sourceToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20Token\",\"name\":\"_targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"getReturn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hasETHReserve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isV28OrHigher\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxConversionFee\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"newOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onlyOwnerCanUpdateRegistry\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"prevRegistry\",\"outputs\":[{\"internalType\":\"contract IContractRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registry\",\"outputs\":[{\"internalType\":\"contract IContractRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_reserveToken\",\"type\":\"address\"}],\"name\":\"reserveBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reserveRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reserveTokenCount\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"reserveTokens\",\"outputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_reserveToken\",\"type\":\"address\"}],\"name\":\"reserveWeight\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"reserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"weight\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"deprecated1\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"deprecated2\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"restoreRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_onlyOwnerCanUpdateRegistry\",\"type\":\"bool\"}],\"name\":\"restrictRegistryUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_conversionFee\",\"type\":\"uint32\"}],\"name\":\"setConversionFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IWhitelist\",\"name\":\"_whitelist\",\"type\":\"address\"}],\"name\":\"setConversionWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_sourceToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20Token\",\"name\":\"_targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"targetAmountAndFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IConverterAnchor\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferAnchorOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferTokenOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"withdrawETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFromAnchor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"ConverterBase The converter contains the main logic for conversions between different ERC20 tokens. It is also the upgradable part of the mechanism (note that upgrades are opt-in). The anchor must be set on construction and cannot be changed afterwards. Wrappers are provided for some of the anchor's functions, for easier access. Once the converter accepts ownership of the anchor, it becomes the anchor's sole controller and can execute any of its functions. To upgrade the converter, anchor ownership must be transferred to a new converter, along with any relevant data. Note that the converter can transfer anchor ownership to a new converter that doesn't allow upgrades anymore, for finalizing the relationship between the converter and the anchor. Converter types (defined as uint16 type) - 0 = liquid token converter 1 = liquidity pool v1 converter 2 = liquidity pool v2 converter Note that converters don't currently support tokens with transfer fees.\",\"events\":{\"Activation(uint16,address,bool)\":{\"details\":\"triggered when the converter is activated\",\"params\":{\"_activated\":\"true if the converter was activated, false if it was deactivated\",\"_anchor\":\"converter anchor\",\"_type\":\"converter type\"}},\"Conversion(address,address,address,uint256,uint256,int256)\":{\"details\":\"triggered when a conversion between two tokens occurs\",\"params\":{\"_amount\":\"amount converted, in the source token\",\"_conversionFee\":\"conversion fee\",\"_fromToken\":\"source ERC20 token\",\"_return\":\"amount returned, minus conversion fee\",\"_toToken\":\"target ERC20 token\",\"_trader\":\"wallet that initiated the trade\"}},\"ConversionFeeUpdate(uint32,uint32)\":{\"details\":\"triggered when the conversion fee is updated\",\"params\":{\"_newFee\":\"new fee percentage, represented in ppm\",\"_prevFee\":\"previous fee percentage, represented in ppm\"}},\"TokenRateUpdate(address,address,uint256,uint256)\":{\"details\":\"triggered when the rate between two tokens in the converter changes note that the event might be dispatched for rate updates between any two tokens in the converter note that prior to version 28, you should use the 'PriceDataUpdate' event instead\",\"params\":{\"_rateD\":\"rate of 1 unit of `_token1` in `_token2` (denominator)\",\"_rateN\":\"rate of 1 unit of `_token1` in `_token2` (numerator)\",\"_token1\":\"address of the first token\",\"_token2\":\"address of the second token\"}}},\"kind\":\"dev\",\"methods\":{\"acceptAnchorOwnership()\":{\"details\":\"accepts ownership of the anchor after an ownership transfer most converters are also activated as soon as they accept the anchor ownership can only be called by the contract owner note that prior to version 28, you should use 'acceptTokenOwnership' instead\"},\"acceptOwnership()\":{\"details\":\"used by a new owner to accept an ownership transfer\"},\"acceptTokenOwnership()\":{\"details\":\"deprecated, backward compatibility\"},\"addReserve(address,uint32)\":{\"details\":\"defines a new reserve token for the converter can only be called by the owner while the converter is inactive\",\"params\":{\"_token\":\"address of the reserve token\",\"_weight\":\"reserve weight, represented in ppm, 1-1000000\"}},\"connectorTokenCount()\":{\"details\":\"deprecated, backward compatibility\"},\"connectorTokens(uint256)\":{\"details\":\"deprecated, backward compatibility\"},\"connectors(address)\":{\"details\":\"deprecated, backward compatibility\"},\"constructor\":{\"details\":\"used by sub-contracts to initialize a new converter\",\"params\":{\"_anchor\":\"anchor governed by the converter\",\"_maxConversionFee\":\"maximum conversion fee, represented in ppm\",\"_registry\":\"address of a contract registry contract\"}},\"convert(address,address,uint256,address,address)\":{\"details\":\"converts a specific amount of source tokens to target tokens can only be called by the bancor network contract\",\"params\":{\"_amount\":\"amount of tokens to convert (in units of the source token)\",\"_beneficiary\":\"wallet to receive the conversion result\",\"_sourceToken\":\"source ERC20 token\",\"_targetToken\":\"target ERC20 token\",\"_trader\":\"address of the caller who executed the conversion\"},\"returns\":{\"_0\":\"amount of tokens received (in units of the target token)\"}},\"getConnectorBalance(address)\":{\"details\":\"deprecated, backward compatibility\"},\"getReturn(address,address,uint256)\":{\"details\":\"deprecated, backward compatibility\"},\"hasETHReserve()\":{\"details\":\"checks whether or not the converter has an ETH reserve\",\"returns\":{\"_0\":\"true if the converter has an ETH reserve, false otherwise\"}},\"isActive()\":{\"details\":\"returns true if the converter is active, false otherwise\",\"returns\":{\"_0\":\"true if the converter is active, false otherwise\"}},\"isV28OrHigher()\":{\"details\":\"checks whether or not the converter version is 28 or higher\",\"returns\":{\"_0\":\"true, since the converter version is 28 or higher\"}},\"reserveBalance(address)\":{\"details\":\"returns the reserve's balance note that prior to version 17, you should use 'getConnectorBalance' instead\",\"params\":{\"_reserveToken\":\"reserve token contract address\"},\"returns\":{\"_0\":\"reserve balance\"}},\"reserveTokenCount()\":{\"details\":\"returns the number of reserve tokens defined note that prior to version 17, you should use 'connectorTokenCount' instead\",\"returns\":{\"_0\":\"number of reserve tokens\"}},\"reserveWeight(address)\":{\"details\":\"returns the reserve's weight added in version 28\",\"params\":{\"_reserveToken\":\"reserve token contract address\"},\"returns\":{\"_0\":\"reserve weight\"}},\"restoreRegistry()\":{\"details\":\"restores the previous contract-registry\"},\"restrictRegistryUpdate(bool)\":{\"details\":\"restricts the permission to update the contract-registry\",\"params\":{\"_onlyOwnerCanUpdateRegistry\":\"indicates whether or not permission is restricted to owner only\"}},\"setConversionFee(uint32)\":{\"details\":\"updates the current conversion fee can only be called by the contract owner\",\"params\":{\"_conversionFee\":\"new conversion fee, represented in ppm\"}},\"setConversionWhitelist(address)\":{\"details\":\"allows the owner to update & enable the conversion whitelist contract address when set, only addresses that are whitelisted are actually allowed to use the converter note that the whitelist check is actually done by the BancorNetwork contract\",\"params\":{\"_whitelist\":\"address of a whitelist contract\"}},\"token()\":{\"details\":\"deprecated since version 28, backward compatibility - use only for earlier versions\"},\"transferAnchorOwnership(address)\":{\"details\":\"transfers the anchor ownership the new owner needs to accept the transfer can only be called by the converter upgrder while the upgrader is the owner note that prior to version 28, you should use 'transferAnchorOwnership' instead\",\"params\":{\"_newOwner\":\"new token owner\"}},\"transferOwnership(address)\":{\"details\":\"allows transferring the contract ownership the new owner still needs to accept the transfer can only be called by the contract owner\",\"params\":{\"_newOwner\":\"new contract owner\"}},\"transferTokenOwnership(address)\":{\"details\":\"deprecated, backward compatibility\"},\"updateRegistry()\":{\"details\":\"updates to the new contract-registry\"},\"upgrade()\":{\"details\":\"upgrades the converter to the latest version can only be called by the owner note that the owner needs to call acceptOwnership on the new converter after the upgrade\"},\"withdrawETH(address)\":{\"details\":\"withdraws ether can only be called by the owner if the converter is inactive or by upgrader contract can only be called after the upgrader contract has accepted the ownership of this contract can only be called if the converter has an ETH reserve\",\"params\":{\"_to\":\"address to send the ETH to\"}},\"withdrawFromAnchor(address,address,uint256)\":{\"details\":\"withdraws tokens held by the anchor and sends them to an account can only be called by the owner\",\"params\":{\"_amount\":\"amount to withdraw\",\"_to\":\"account to receive the new amount\",\"_token\":\"ERC20 token contract address\"}},\"withdrawTokens(address,address,uint256)\":{\"details\":\"withdraws tokens held by the converter and sends them to an account can only be called by the owner note that reserve tokens can only be withdrawn by the owner while the converter is inactive unless the owner is the converter upgrader contract\",\"params\":{\"_amount\":\"amount to withdraw\",\"_to\":\"account to receive the new amount\",\"_token\":\"ERC20 token contract address\"}}},\"stateVariables\":{\"version\":{\"details\":\"version number\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/ConverterBase.sol\":\"ConverterBase\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/bancorx/interfaces/IBancorX.sol\":{\"keccak256\":\"0x65b5780d710159c7540078c38406c53db37a349fb468a0bf21bdc6262e497951\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://3df931a12770d10a22451326e38ae9d405d3e2716bdbdd6306b5e2361f6fe511\",\"dweb:/ipfs/QmcRBSaFLz516dAEqb8ZEiyx8ZTHZZ6rfxHn5roL2fHA3S\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/ConverterBase.sol\":{\"keccak256\":\"0x242211f471f27635fa98bdeed238429942c55fc9a5e824c1a30cd88fad727f9b\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://f9769299a5e13c363d102c4c08b09e3a87ec053124dcc157be0a6448c13e3320\",\"dweb:/ipfs/QmUC2CaAr6emVkJN62xXBY83r1f7Hxj62UAavZsCSWcqUb\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IBancorFormula.sol\":{\"keccak256\":\"0xf30c95034af4c4ec6e8a859e90cf7a0bada29a805ede76e04644107a7c677c4e\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://b48070d4abf9c4a08c39e6c494fa9efd7389aa7f8b61b283c9ba02062b1c59b6\",\"dweb:/ipfs/Qme6U7SpspFPzMH2mTyKsXCnJEAgg1vX6NNFzuykbVSY5R\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverter.sol\":{\"keccak256\":\"0x18b0d73a3d5ee951ede1b3f840ed35b40570e34975703079a4451555f4dd089b\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://1cd7263f1ef60793e3929509150420037df9a1194c3d0f40bb2ff5516d6a373f\",\"dweb:/ipfs/QmNUbsZt2rzWPjStYycgz3vMbNP4VrAqZPRAK39QNqUoos\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverterAnchor.sol\":{\"keccak256\":\"0x9448cdbe90293fb5c1a0808b77af8754a1025b59c45f432eee01f659361a6115\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://1ef2bb2e1543c9324daf7f3fd086a57efb45b89f3d62b9d7a9fc78c138d24dbc\",\"dweb:/ipfs/QmVcXDib3K6xYJMBNxawmo4krJGiDfxb5oL64Lc3pi14XK\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverterUpgrader.sol\":{\"keccak256\":\"0x456faf61358bfd76498892509cc99f9729f310c9450e28b0d03b5e7cd9752802\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://01f7b3f24cc895a948ea44f8e067d312b55ef1e9cf491908f3fb948d02b914da\",\"dweb:/ipfs/QmfSwZrWFWmT8xeX3iwSq75Vs8pQaQBGkmxJEHehUiPP1N\"]},\"/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/token/interfaces/IEtherToken.sol\":{\"keccak256\":\"0x6ed324da616d70af0b21fa073b1e5329b430e38b470177633a69710eff3da893\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://44f94aa59c67de636423cbdef82efb7d8e0562e73dfc9049a48054156aebaf14\",\"dweb:/ipfs/Qmdn8KAP54s7X3J6TCoZPhCpS19aCQzFYZuFABugJ5JA5D\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ContractRegistryClient.sol\":{\"keccak256\":\"0x74caf88eff1cb113ad8277df9ba7933a6f1e0deea8fd1855157def3be833b859\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://c7793c9f245736cd8413bc8c4b5c40b67949cbee32289a16d29c83cf59396ad6\",\"dweb:/ipfs/QmWony7b1buUrGnE32gjLAnSwkBYMrJ68vUcCwDMmp3MbJ\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Owned.sol\":{\"keccak256\":\"0x6ef69d9dcc80a8a36d5eb37783375cd5e4831c6d20c723fa6f6b6a06c0aeb53d\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://5a5d087e2c5b47739615ef22e1f29749de44b43c9a37cfae32b3dfc498a258c4\",\"dweb:/ipfs/Qmd1mXKEQbmBxqHk326LGVzNoayXsam8gZNecknnYpBnyh\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ReentrancyGuard.sol\":{\"keccak256\":\"0x5ea87c10dd6e7e79212da712eb5f079c03361e6c96e299a4ffd9aaee8d6a3899\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://882aac64a791df35a942480e6ce611d1acb399af4ac0c4ef0288965c3785bf50\",\"dweb:/ipfs/QmeWeYYFh5HZAzJ1SzPHoTcPvZrE4NPUVfmjvH9Q3m36Gg\"]},\"/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/TokenHandler.sol\":{\"keccak256\":\"0xf65b87e3bf3343e368da67878c19d1a043a1025b10e9053d3562b53b4aa447fe\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://b85c5d96642c14c53b8d5062eecd4d27d3bdb457d1d0f130900763a75a512eb7\",\"dweb:/ipfs/QmUHtbqC1khqnRZXYn11Aykus4m5e9MVNUWqorxhpr5ipJ\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/TokenHolder.sol\":{\"keccak256\":\"0xac6bc102eff6c1bb8c1bb4466eab50322c7c101e2e33d577dd3035f106627577\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://9fdbda2d4509260ca3dd43654bdaea07ef18a5e04213ff16e38e3b4abad78a5f\",\"dweb:/ipfs/QmPb69rzX1DwDeEhhfzqQNS3U2bfGcFjXNaV5ffHsZHzfP\"]},\"/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/IContractRegistry.sol\":{\"keccak256\":\"0x3551889a83738b621c29ed66f1ecb6a843cca4217e54c9357198559b9cc92259\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://231a59c8f2665adeda8c7e6930832409c9b991fd27ad84b3a24335e7bf269bbe\",\"dweb:/ipfs/QmeJJbn1EAUbZenruTEdJAnwUn3dxsVNeJvxPe81qKEGqL\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IOwned.sol\":{\"keccak256\":\"0xc60a9d197abc28c1906ed4d18b59caa0242db754a0e1f67af6e6277593530dae\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://a8c6f3e6525a81a5165ccbf04f73f6c389c14b74135d11a7b5f70b1c9bdac75c\",\"dweb:/ipfs/QmaPu4Z7yUPc9sMADmoTZVY6AnyDSYHtNNCx3mm4VkJwhP\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/ITokenHolder.sol\":{\"keccak256\":\"0x9ccb8ab04d0bd874ba7aae5277e60f35c36918922649a0596bf3664ed257bfe2\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://b65e6db19cd244c9f3545695de5fd7573711c49fb306631ddbf0e1d2fa9fb589\",\"dweb:/ipfs/QmZeu5KYVMTbTx7h2BVUq52fpwL9Q44AUfzeVksucDohgf\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IWhitelist.sol\":{\"keccak256\":\"0x356ad553ceeaea04d7cb8f0d6a5663c47dfccb2bd82517348128f032416ee34a\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://9ea3bbb9945144ead2c1392351f2f9f7444af78569f2b95da2e68bb6b919db52\",\"dweb:/ipfs/QmPyUAk44Kj7nJB4tzYqeSXWHyYP51mRNynEmWra9m4eKS\"]}},\"version\":1}",
"bytecode": "0x",
"deployedBytecode": "0x",
"immutableReferences": {},
"sourceMap": "",
"deployedSourceMap": "",
"source": "// SPDX-License-Identifier: SEE LICENSE IN LICENSE\r\npragma solidity 0.6.12;\r\nimport \"./interfaces/IConverter.sol\";\r\nimport \"./interfaces/IConverterAnchor.sol\";\r\nimport \"./interfaces/IConverterUpgrader.sol\";\r\nimport \"./interfaces/IBancorFormula.sol\";\r\nimport \"../utility/ContractRegistryClient.sol\";\r\nimport \"../utility/ReentrancyGuard.sol\";\r\nimport \"../utility/SafeMath.sol\";\r\nimport \"../utility/TokenHandler.sol\";\r\nimport \"../utility/TokenHolder.sol\";\r\nimport \"../token/interfaces/IEtherToken.sol\";\r\nimport \"../bancorx/interfaces/IBancorX.sol\";\r\n\r\n/**\r\n * @dev ConverterBase\r\n *\r\n * The converter contains the main logic for conversions between different ERC20 tokens.\r\n *\r\n * It is also the upgradable part of the mechanism (note that upgrades are opt-in).\r\n *\r\n * The anchor must be set on construction and cannot be changed afterwards.\r\n * Wrappers are provided for some of the anchor's functions, for easier access.\r\n *\r\n * Once the converter accepts ownership of the anchor, it becomes the anchor's sole controller\r\n * and can execute any of its functions.\r\n *\r\n * To upgrade the converter, anchor ownership must be transferred to a new converter, along with\r\n * any relevant data.\r\n *\r\n * Note that the converter can transfer anchor ownership to a new converter that\r\n * doesn't allow upgrades anymore, for finalizing the relationship between the converter\r\n * and the anchor.\r\n *\r\n * Converter types (defined as uint16 type) -\r\n * 0 = liquid token converter\r\n * 1 = liquidity pool v1 converter\r\n * 2 = liquidity pool v2 converter\r\n *\r\n * Note that converters don't currently support tokens with transfer fees.\r\n*/\r\nabstract contract ConverterBase is IConverter, TokenHandler, TokenHolder, ContractRegistryClient, ReentrancyGuard {\r\n using SafeMath for uint256;\r\n\r\n uint32 internal constant PPM_RESOLUTION = 1000000;\r\n IERC20Token internal constant ETH_RESERVE_ADDRESS = IERC20Token(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);\r\n\r\n struct Reserve {\r\n uint256 balance; // reserve balance\r\n uint32 weight; // reserve weight, represented in ppm, 1-1000000\r\n bool deprecated1; // deprecated\r\n bool deprecated2; // deprecated\r\n bool isSet; // true if the reserve is valid, false otherwise\r\n }\r\n\r\n /**\r\n * @dev version number\r\n */\r\n uint16 public constant version = 39;\r\n\r\n IConverterAnchor public override anchor; // converter anchor contract\r\n IWhitelist public override conversionWhitelist; // whitelist contract with list of addresses that are allowed to use the converter\r\n IERC20Token[] public reserveTokens; // ERC20 standard token addresses (prior version 17, use 'connectorTokens' instead)\r\n mapping (IERC20Token => Reserve) public reserves; // reserve token addresses -> reserve data (prior version 17, use 'connectors' instead)\r\n uint32 public reserveRatio = 0; // ratio between the reserves and the market cap, equal to the total reserve weights\r\n uint32 public override maxConversionFee = 0; // maximum conversion fee for the lifetime of the contract,\r\n // represented in ppm, 0...1000000 (0 = no fee, 100 = 0.01%, 1000000 = 100%)\r\n uint32 public override conversionFee = 0; // current conversion fee, represented in ppm, 0...maxConversionFee\r\n bool public constant conversionsEnabled = true; // deprecated, backward compatibility\r\n\r\n /**\r\n * @dev triggered when the converter is activated\r\n *\r\n * @param _type converter type\r\n * @param _anchor converter anchor\r\n * @param _activated true if the converter was activated, false if it was deactivated\r\n */\r\n event Activation(uint16 indexed _type, IConverterAnchor indexed _anchor, bool indexed _activated);\r\n\r\n /**\r\n * @dev triggered when a conversion between two tokens occurs\r\n *\r\n * @param _fromToken source ERC20 token\r\n * @param _toToken target ERC20 token\r\n * @param _trader wallet that initiated the trade\r\n * @param _amount amount converted, in the source token\r\n * @param _return amount returned, minus conversion fee\r\n * @param _conversionFee conversion fee\r\n */\r\n event Conversion(\r\n IERC20Token indexed _fromToken,\r\n IERC20Token indexed _toToken,\r\n address indexed _trader,\r\n uint256 _amount,\r\n uint256 _return,\r\n int256 _conversionFee\r\n );\r\n\r\n /**\r\n * @dev triggered when the rate between two tokens in the converter changes\r\n * note that the event might be dispatched for rate updates between any two tokens in the converter\r\n * note that prior to version 28, you should use the 'PriceDataUpdate' event instead\r\n *\r\n * @param _token1 address of the first token\r\n * @param _token2 address of the second token\r\n * @param _rateN rate of 1 unit of `_token1` in `_token2` (numerator)\r\n * @param _rateD rate of 1 unit of `_token1` in `_token2` (denominator)\r\n */\r\n event TokenRateUpdate(\r\n IERC20Token indexed _token1,\r\n IERC20Token indexed _token2,\r\n uint256 _rateN,\r\n uint256 _rateD\r\n );\r\n\r\n /**\r\n * @dev triggered when the conversion fee is updated\r\n *\r\n * @param _prevFee previous fee percentage, represented in ppm\r\n * @param _newFee new fee percentage, represented in ppm\r\n */\r\n event ConversionFeeUpdate(uint32 _prevFee, uint32 _newFee);\r\n\r\n /**\r\n * @dev used by sub-contracts to initialize a new converter\r\n *\r\n * @param _anchor anchor governed by the converter\r\n * @param _registry address of a contract registry contract\r\n * @param _maxConversionFee maximum conversion fee, represented in ppm\r\n */\r\n constructor(\r\n IConverterAnchor _anchor,\r\n IContractRegistry _registry,\r\n uint32 _maxConversionFee\r\n )\r\n validAddress(address(_anchor))\r\n ContractRegistryClient(_registry)\r\n internal\r\n validConversionFee(_maxConversionFee)\r\n {\r\n anchor = _anchor;\r\n maxConversionFee = _maxConversionFee;\r\n }\r\n\r\n // ensures that the converter is active\r\n modifier active() {\r\n _active();\r\n _;\r\n }\r\n\r\n // error message binary size optimization\r\n function _active() internal view {\r\n require(isActive(), \"ERR_INACTIVE\");\r\n }\r\n\r\n // ensures that the converter is not active\r\n modifier inactive() {\r\n _inactive();\r\n _;\r\n }\r\n\r\n // error message binary size optimization\r\n function _inactive() internal view {\r\n require(!isActive(), \"ERR_ACTIVE\");\r\n }\r\n\r\n // validates a reserve token address - verifies that the address belongs to one of the reserve tokens\r\n modifier validReserve(IERC20Token _address) {\r\n _validReserve(_address);\r\n _;\r\n }\r\n\r\n // error message binary size optimization\r\n function _validReserve(IERC20Token _address) internal view {\r\n require(reserves[_address].isSet, \"ERR_INVALID_RESERVE\");\r\n }\r\n\r\n // validates conversion fee\r\n modifier validConversionFee(uint32 _conversionFee) {\r\n _validConversionFee(_conversionFee);\r\n _;\r\n }\r\n\r\n // error message binary size optimization\r\n function _validConversionFee(uint32 _conversionFee) internal pure {\r\n require(_conversionFee <= PPM_RESOLUTION, \"ERR_INVALID_CONVERSION_FEE\");\r\n }\r\n\r\n // validates reserve weight\r\n modifier validReserveWeight(uint32 _weight) {\r\n _validReserveWeight(_weight);\r\n _;\r\n }\r\n\r\n // error message binary size optimization\r\n function _validReserveWeight(uint32 _weight) internal pure {\r\n require(_weight > 0 && _weight <= PPM_RESOLUTION, \"ERR_INVALID_RESERVE_WEIGHT\");\r\n }\r\n\r\n // overrides interface declaration\r\n function converterType() public pure virtual override returns (uint16);\r\n\r\n // overrides interface declaration\r\n function targetAmountAndFee(IERC20Token _sourceToken, IERC20Token _targetToken, uint256 _amount)\r\n public\r\n view\r\n virtual\r\n override\r\n returns (uint256, uint256);\r\n\r\n /**\r\n * @dev deposits ether\r\n * can only be called if the converter has an ETH reserve\r\n */\r\n receive() external override payable {\r\n require(reserves[ETH_RESERVE_ADDRESS].isSet, \"ERR_INVALID_RESERVE\"); // require(hasETHReserve(), \"ERR_INVALID_RESERVE\");\r\n // a workaround for a problem when running solidity-coverage\r\n // see https://github.com/sc-forks/solidity-coverage/issues/487\r\n }\r\n\r\n /**\r\n * @dev withdraws ether\r\n * can only be called by the owner if the converter is inactive or by upgrader contract\r\n * can only be called after the upgrader contract has accepted the ownership of this contract\r\n * can only be called if the converter has an ETH reserve\r\n *\r\n * @param _to address to send the ETH to\r\n */\r\n function withdrawETH(address payable _to)\r\n public\r\n override\r\n protected\r\n ownerOnly\r\n validReserve(ETH_RESERVE_ADDRESS)\r\n {\r\n address converterUpgrader = addressOf(CONVERTER_UPGRADER);\r\n\r\n // verify that the converter is inactive or that the owner is the upgrader contract\r\n require(!isActive() || owner == converterUpgrader, \"ERR_ACCESS_DENIED\");\r\n _to.transfer(address(this).balance);\r\n\r\n // sync the ETH reserve balance\r\n syncReserveBalance(ETH_RESERVE_ADDRESS);\r\n }\r\n\r\n /**\r\n * @dev checks whether or not the converter version is 28 or higher\r\n *\r\n * @return true, since the converter version is 28 or higher\r\n */\r\n function isV28OrHigher() public pure returns (bool) {\r\n return true;\r\n }\r\n\r\n /**\r\n * @dev allows the owner to update & enable the conversion whitelist contract address\r\n * when set, only addresses that are whitelisted are actually allowed to use the converter\r\n * note that the whitelist check is actually done by the BancorNetwork contract\r\n *\r\n * @param _whitelist address of a whitelist contract\r\n */\r\n function setConversionWhitelist(IWhitelist _whitelist)\r\n public\r\n override\r\n ownerOnly\r\n notThis(address(_whitelist))\r\n {\r\n conversionWhitelist = _whitelist;\r\n }\r\n\r\n /**\r\n * @dev returns true if the converter is active, false otherwise\r\n *\r\n * @return true if the converter is active, false otherwise\r\n */\r\n function isActive() public view virtual override returns (bool) {\r\n return anchor.owner() == address(this);\r\n }\r\n\r\n /**\r\n * @dev transfers the anchor ownership\r\n * the new owner needs to accept the transfer\r\n * can only be called by the converter upgrder while the upgrader is the owner\r\n * note that prior to version 28, you should use 'transferAnchorOwnership' instead\r\n *\r\n * @param _newOwner new token owner\r\n */\r\n function transferAnchorOwnership(address _newOwner)\r\n public\r\n override\r\n ownerOnly\r\n only(CONVERTER_UPGRADER)\r\n {\r\n anchor.transferOwnership(_newOwner);\r\n }\r\n\r\n /**\r\n * @dev accepts ownership of the anchor after an ownership transfer\r\n * most converters are also activated as soon as they accept the anchor ownership\r\n * can only be called by the contract owner\r\n * note that prior to version 28, you should use 'acceptTokenOwnership' instead\r\n */\r\n function acceptAnchorOwnership() public virtual override ownerOnly {\r\n // verify the the converter has at least one reserve\r\n require(reserveTokenCount() > 0, \"ERR_INVALID_RESERVE_COUNT\");\r\n anchor.acceptOwnership();\r\n syncReserveBalances();\r\n }\r\n\r\n /**\r\n * @dev withdraws tokens held by the anchor and sends them to an account\r\n * can only be called by the owner\r\n *\r\n * @param _token ERC20 token contract address\r\n * @param _to account to receive the new amount\r\n * @param _amount amount to withdraw\r\n */\r\n function withdrawFromAnchor(IERC20Token _token, address _to, uint256 _amount) public ownerOnly {\r\n anchor.withdrawTokens(_token, _to, _amount);\r\n }\r\n\r\n /**\r\n * @dev updates the current conversion fee\r\n * can only be called by the contract owner\r\n *\r\n * @param _conversionFee new conversion fee, represented in ppm\r\n */\r\n function setConversionFee(uint32 _conversionFee) public override ownerOnly {\r\n require(_conversionFee <= maxConversionFee, \"ERR_INVALID_CONVERSION_FEE\");\r\n emit ConversionFeeUpdate(conversionFee, _conversionFee);\r\n conversionFee = _conversionFee;\r\n }\r\n\r\n /**\r\n * @dev withdraws tokens held by the converter and sends them to an account\r\n * can only be called by the owner\r\n * note that reserve tokens can only be withdrawn by the owner while the converter is inactive\r\n * unless the owner is the converter upgrader contract\r\n *\r\n * @param _token ERC20 token contract address\r\n * @param _to account to receive the new amount\r\n * @param _amount amount to withdraw\r\n */\r\n function withdrawTokens(IERC20Token _token, address _to, uint256 _amount)\r\n public\r\n override(IConverter, TokenHolder)\r\n protected\r\n ownerOnly\r\n {\r\n address converterUpgrader = addressOf(CONVERTER_UPGRADER);\r\n\r\n // if the token is not a reserve token, allow withdrawal\r\n // otherwise verify that the converter is inactive or that the owner is the upgrader contract\r\n require(!reserves[_token].isSet || !isActive() || owner == converterUpgrader, \"ERR_ACCESS_DENIED\");\r\n super.withdrawTokens(_token, _to, _amount);\r\n\r\n // if the token is a reserve token, sync the reserve balance\r\n if (reserves[_token].isSet)\r\n syncReserveBalance(_token);\r\n }\r\n\r\n /**\r\n * @dev upgrades the converter to the latest version\r\n * can only be called by the owner\r\n * note that the owner needs to call acceptOwnership on the new converter after the upgrade\r\n */\r\n function upgrade() public ownerOnly {\r\n IConverterUpgrader converterUpgrader = IConverterUpgrader(addressOf(CONVERTER_UPGRADER));\r\n\r\n // trigger de-activation event\r\n emit Activation(converterType(), anchor, false);\r\n\r\n transferOwnership(address(converterUpgrader));\r\n converterUpgrader.upgrade(version);\r\n acceptOwnership();\r\n }\r\n\r\n /**\r\n * @dev returns the number of reserve tokens defined\r\n * note that prior to version 17, you should use 'connectorTokenCount' instead\r\n *\r\n * @return number of reserve tokens\r\n */\r\n function reserveTokenCount() public view returns (uint16) {\r\n return uint16(reserveTokens.length);\r\n }\r\n\r\n /**\r\n * @dev defines a new reserve token for the converter\r\n * can only be called by the owner while the converter is inactive\r\n *\r\n * @param _token address of the reserve token\r\n * @param _weight reserve weight, represented in ppm, 1-1000000\r\n */\r\n function addReserve(IERC20Token _token, uint32 _weight)\r\n public\r\n virtual\r\n override\r\n ownerOnly\r\n inactive\r\n validAddress(address(_token))\r\n notThis(address(_token))\r\n validReserveWeight(_weight)\r\n {\r\n // validate input\r\n require(address(_token) != address(anchor) && !reserves[_token].isSet, \"ERR_INVALID_RESERVE\");\r\n require(_weight <= PPM_RESOLUTION - reserveRatio, \"ERR_INVALID_RESERVE_WEIGHT\");\r\n require(reserveTokenCount() < uint16(-1), \"ERR_INVALID_RESERVE_COUNT\");\r\n\r\n Reserve storage newReserve = reserves[_token];\r\n newReserve.balance = 0;\r\n newReserve.weight = _weight;\r\n newReserve.isSet = true;\r\n reserveTokens.push(_token);\r\n reserveRatio += _weight;\r\n }\r\n\r\n /**\r\n * @dev returns the reserve's weight\r\n * added in version 28\r\n *\r\n * @param _reserveToken reserve token contract address\r\n *\r\n * @return reserve weight\r\n */\r\n function reserveWeight(IERC20Token _reserveToken)\r\n public\r\n view\r\n validReserve(_reserveToken)\r\n returns (uint32)\r\n {\r\n return reserves[_reserveToken].weight;\r\n }\r\n\r\n /**\r\n * @dev returns the reserve's balance\r\n * note that prior to version 17, you should use 'getConnectorBalance' instead\r\n *\r\n * @param _reserveToken reserve token contract address\r\n *\r\n * @return reserve balance\r\n */\r\n function reserveBalance(IERC20Token _reserveToken)\r\n public\r\n override\r\n view\r\n validReserve(_reserveToken)\r\n returns (uint256)\r\n {\r\n return reserves[_reserveToken].balance;\r\n }\r\n\r\n /**\r\n * @dev checks whether or not the converter has an ETH reserve\r\n *\r\n * @return true if the converter has an ETH reserve, false otherwise\r\n */\r\n function hasETHReserve() public view returns (bool) {\r\n return reserves[ETH_RESERVE_ADDRESS].isSet;\r\n }\r\n\r\n /**\r\n * @dev converts a specific amount of source tokens to target tokens\r\n * can only be called by the bancor network contract\r\n *\r\n * @param _sourceToken source ERC20 token\r\n * @param _targetToken target ERC20 token\r\n * @param _amount amount of tokens to convert (in units of the source token)\r\n * @param _trader address of the caller who executed the conversion\r\n * @param _beneficiary wallet to receive the conversion result\r\n *\r\n * @return amount of tokens received (in units of the target token)\r\n */\r\n function convert(IERC20Token _sourceToken, IERC20Token _targetToken, uint256 _amount, address _trader, address payable _beneficiary)\r\n public\r\n override\r\n payable\r\n protected\r\n only(BANCOR_NETWORK)\r\n returns (uint256)\r\n {\r\n // validate input\r\n require(_sourceToken != _targetToken, \"ERR_SAME_SOURCE_TARGET\");\r\n\r\n // if a whitelist is set, verify that both and trader and the beneficiary are whitelisted\r\n require(address(conversionWhitelist) == address(0) ||\r\n (conversionWhitelist.isWhitelisted(_trader) && conversionWhitelist.isWhitelisted(_beneficiary)),\r\n \"ERR_NOT_WHITELISTED\");\r\n\r\n return doConvert(_sourceToken, _targetToken, _amount, _trader, _beneficiary);\r\n }\r\n\r\n /**\r\n * @dev converts a specific amount of source tokens to target tokens\r\n * called by ConverterBase and allows the inherited contracts to implement custom conversion logic\r\n *\r\n * @param _sourceToken source ERC20 token\r\n * @param _targetToken target ERC20 token\r\n * @param _amount amount of tokens to convert (in units of the source token)\r\n * @param _trader address of the caller who executed the conversion\r\n * @param _beneficiary wallet to receive the conversion result\r\n *\r\n * @return amount of tokens received (in units of the target token)\r\n */\r\n function doConvert(\r\n IERC20Token _sourceToken,\r\n IERC20Token _targetToken,\r\n uint256 _amount,\r\n address _trader,\r\n address payable _beneficiary)\r\n internal\r\n virtual\r\n returns (uint256);\r\n\r\n /**\r\n * @dev returns the conversion fee for a given target amount\r\n *\r\n * @param _targetAmount target amount\r\n *\r\n * @return conversion fee\r\n */\r\n function calculateFee(uint256 _targetAmount) internal view returns (uint256) {\r\n return _targetAmount.mul(conversionFee).div(PPM_RESOLUTION);\r\n }\r\n\r\n /**\r\n * @dev syncs the stored reserve balance for a given reserve with the real reserve balance\r\n *\r\n * @param _reserveToken address of the reserve token\r\n */\r\n function syncReserveBalance(IERC20Token _reserveToken) internal validReserve(_reserveToken) {\r\n if (_reserveToken == ETH_RESERVE_ADDRESS)\r\n reserves[_reserveToken].balance = address(this).balance;\r\n else\r\n reserves[_reserveToken].balance = _reserveToken.balanceOf(address(this));\r\n }\r\n\r\n /**\r\n * @dev syncs all stored reserve balances\r\n */\r\n function syncReserveBalances() internal {\r\n uint256 reserveCount = reserveTokens.length;\r\n for (uint256 i = 0; i < reserveCount; i++)\r\n syncReserveBalance(reserveTokens[i]);\r\n }\r\n\r\n /**\r\n * @dev helper, dispatches the Conversion event\r\n *\r\n * @param _sourceToken source ERC20 token\r\n * @param _targetToken target ERC20 token\r\n * @param _trader address of the caller who executed the conversion\r\n * @param _amount amount purchased/sold (in the source token)\r\n * @param _returnAmount amount returned (in the target token)\r\n */\r\n function dispatchConversionEvent(\r\n IERC20Token _sourceToken,\r\n IERC20Token _targetToken,\r\n address _trader,\r\n uint256 _amount,\r\n uint256 _returnAmount,\r\n uint256 _feeAmount)\r\n internal\r\n {\r\n // fee amount is converted to 255 bits -\r\n // negative amount means the fee is taken from the source token, positive amount means its taken from the target token\r\n // currently the fee is always taken from the target token\r\n // since we convert it to a signed number, we first ensure that it's capped at 255 bits to prevent overflow\r\n assert(_feeAmount < 2 ** 255);\r\n emit Conversion(_sourceToken, _targetToken, _trader, _amount, _returnAmount, int256(_feeAmount));\r\n }\r\n\r\n /**\r\n * @dev deprecated since version 28, backward compatibility - use only for earlier versions\r\n */\r\n function token() public view override returns (IConverterAnchor) {\r\n return anchor;\r\n }\r\n\r\n /**\r\n * @dev deprecated, backward compatibility\r\n */\r\n function transferTokenOwnership(address _newOwner) public override ownerOnly {\r\n transferAnchorOwnership(_newOwner);\r\n }\r\n\r\n /**\r\n * @dev deprecated, backward compatibility\r\n */\r\n function acceptTokenOwnership() public override ownerOnly {\r\n acceptAnchorOwnership();\r\n }\r\n\r\n /**\r\n * @dev deprecated, backward compatibility\r\n */\r\n function connectors(IERC20Token _address) public view override returns (uint256, uint32, bool, bool, bool) {\r\n Reserve memory reserve = reserves[_address];\r\n return(reserve.balance, reserve.weight, false, false, reserve.isSet);\r\n }\r\n\r\n /**\r\n * @dev deprecated, backward compatibility\r\n */\r\n function connectorTokens(uint256 _index) public view override returns (IERC20Token) {\r\n return ConverterBase.reserveTokens[_index];\r\n }\r\n\r\n /**\r\n * @dev deprecated, backward compatibility\r\n */\r\n function connectorTokenCount() public view override returns (uint16) {\r\n return reserveTokenCount();\r\n }\r\n\r\n /**\r\n * @dev deprecated, backward compatibility\r\n */\r\n function getConnectorBalance(IERC20Token _connectorToken) public view override returns (uint256) {\r\n return reserveBalance(_connectorToken);\r\n }\r\n\r\n /**\r\n * @dev deprecated, backward compatibility\r\n */\r\n function getReturn(IERC20Token _sourceToken, IERC20Token _targetToken, uint256 _amount) public view returns (uint256, uint256) {\r\n return targetAmountAndFee(_sourceToken, _targetToken, _amount);\r\n }\r\n}\r\n",
"sourcePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/ConverterBase.sol",
"ast": {
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/ConverterBase.sol",
"exportedSymbols": {
"ConverterBase": [
10039
]
},
"id": 10040,
"license": "SEE LICENSE IN LICENSE",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 8979,
"literals": [
"solidity",
"0.6",
".12"
],
"nodeType": "PragmaDirective",
"src": "52:23:8"
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverter.sol",
"file": "./interfaces/IConverter.sol",
"id": 8980,
"nodeType": "ImportDirective",
"scope": 10040,
"sourceUnit": 13341,
"src": "77:37:8",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverterAnchor.sol",
"file": "./interfaces/IConverterAnchor.sol",
"id": 8981,
"nodeType": "ImportDirective",
"scope": 10040,
"sourceUnit": 13350,
"src": "116:43:8",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverterUpgrader.sol",
"file": "./interfaces/IConverterUpgrader.sol",
"id": 8982,
"nodeType": "ImportDirective",
"scope": 10040,
"sourceUnit": 13661,
"src": "161:45:8",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IBancorFormula.sol",
"file": "./interfaces/IBancorFormula.sol",
"id": 8983,
"nodeType": "ImportDirective",
"scope": 10040,
"sourceUnit": 13178,
"src": "208:41:8",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ContractRegistryClient.sol",
"file": "../utility/ContractRegistryClient.sol",
"id": 8984,
"nodeType": "ImportDirective",
"scope": 10040,
"sourceUnit": 21720,
"src": "251:47:8",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ReentrancyGuard.sol",
"file": "../utility/ReentrancyGuard.sol",
"id": 8985,
"nodeType": "ImportDirective",
"scope": 10040,
"sourceUnit": 22243,
"src": "300:40:8",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/SafeMath.sol",
"file": "../utility/SafeMath.sol",
"id": 8986,
"nodeType": "ImportDirective",
"scope": 10040,
"sourceUnit": 22355,
"src": "342:33:8",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/TokenHandler.sol",
"file": "../utility/TokenHandler.sol",
"id": 8987,
"nodeType": "ImportDirective",
"scope": 10040,
"sourceUnit": 22527,
"src": "377:37:8",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/TokenHolder.sol",
"file": "../utility/TokenHolder.sol",
"id": 8988,
"nodeType": "ImportDirective",
"scope": 10040,
"sourceUnit": 22576,
"src": "416:36:8",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/token/interfaces/IEtherToken.sol",
"file": "../token/interfaces/IEtherToken.sol",
"id": 8989,
"nodeType": "ImportDirective",
"scope": 10040,
"sourceUnit": 21154,
"src": "454:45:8",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/bancorx/interfaces/IBancorX.sol",
"file": "../bancorx/interfaces/IBancorX.sol",
"id": 8990,
"nodeType": "ImportDirective",
"scope": 10040,
"sourceUnit": 3552,
"src": "501:44:8",
"symbolAliases": [],
"unitAlias": ""
},
{
"abstract": true,
"baseContracts": [
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 8992,
"name": "IConverter",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 13340,
"src": "1683:10:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverter_$13340",
"typeString": "contract IConverter"
}
},
"id": 8993,
"nodeType": "InheritanceSpecifier",
"src": "1683:10:8"
},
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 8994,
"name": "TokenHandler",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22526,
"src": "1695:12:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_TokenHandler_$22526",
"typeString": "contract TokenHandler"
}
},
"id": 8995,
"nodeType": "InheritanceSpecifier",
"src": "1695:12:8"
},
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 8996,
"name": "TokenHolder",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22575,
"src": "1709:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_TokenHolder_$22575",
"typeString": "contract TokenHolder"
}
},
"id": 8997,
"nodeType": "InheritanceSpecifier",
"src": "1709:11:8"
},
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 8998,
"name": "ContractRegistryClient",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21719,
"src": "1722:22:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ContractRegistryClient_$21719",
"typeString": "contract ContractRegistryClient"
}
},
"id": 8999,
"nodeType": "InheritanceSpecifier",
"src": "1722:22:8"
},
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 9000,
"name": "ReentrancyGuard",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22242,
"src": "1746:15:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ReentrancyGuard_$22242",
"typeString": "contract ReentrancyGuard"
}
},
"id": 9001,
"nodeType": "InheritanceSpecifier",
"src": "1746:15:8"
}
],
"contractDependencies": [
13340,
21719,
21818,
22242,
22526,
22575,
22661,
22847,
22907
],
"contractKind": "contract",
"documentation": {
"id": 8991,
"nodeType": "StructuredDocumentation",
"src": "549:1097:8",
"text": " @dev ConverterBase\n The converter contains the main logic for conversions between different ERC20 tokens.\n It is also the upgradable part of the mechanism (note that upgrades are opt-in).\n The anchor must be set on construction and cannot be changed afterwards.\n Wrappers are provided for some of the anchor's functions, for easier access.\n Once the converter accepts ownership of the anchor, it becomes the anchor's sole controller\n and can execute any of its functions.\n To upgrade the converter, anchor ownership must be transferred to a new converter, along with\n any relevant data.\n Note that the converter can transfer anchor ownership to a new converter that\n doesn't allow upgrades anymore, for finalizing the relationship between the converter\n and the anchor.\n Converter types (defined as uint16 type) -\n 0 = liquid token converter\n 1 = liquidity pool v1 converter\n 2 = liquidity pool v2 converter\n Note that converters don't currently support tokens with transfer fees."
},
"fullyImplemented": false,
"id": 10039,
"linearizedBaseContracts": [
10039,
22242,
21719,
22575,
22661,
21818,
22526,
22907,
13340,
22847
],
"name": "ConverterBase",
"nodeType": "ContractDefinition",
"nodes": [
{
"id": 9004,
"libraryName": {
"contractScope": null,
"id": 9002,
"name": "SafeMath",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22354,
"src": "1775:8:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_SafeMath_$22354",
"typeString": "library SafeMath"
}
},
"nodeType": "UsingForDirective",
"src": "1769:27:8",
"typeName": {
"id": 9003,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1788:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
},
{
"constant": true,
"id": 9007,
"mutability": "constant",
"name": "PPM_RESOLUTION",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10039,
"src": "1804:49:8",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9005,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "1804:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": {
"argumentTypes": null,
"hexValue": "31303030303030",
"id": 9006,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1846:7:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_1000000_by_1",
"typeString": "int_const 1000000"
},
"value": "1000000"
},
"visibility": "internal"
},
{
"constant": true,
"id": 9012,
"mutability": "constant",
"name": "ETH_RESERVE_ADDRESS",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10039,
"src": "1860:107:8",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9008,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "1860:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "307845656565654565656545654565654565456545656545454565656565456565656565656545456545",
"id": 9010,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1924:42:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
"value": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
],
"id": 9009,
"name": "IERC20Token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21127,
"src": "1912:11:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_IERC20Token_$21127_$",
"typeString": "type(contract IERC20Token)"
}
},
"id": 9011,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1912:55:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"visibility": "internal"
},
{
"canonicalName": "ConverterBase.Reserve",
"id": 9023,
"members": [
{
"constant": false,
"id": 9014,
"mutability": "mutable",
"name": "balance",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9023,
"src": "2002:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9013,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2002:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9016,
"mutability": "mutable",
"name": "weight",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9023,
"src": "2050:13:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9015,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "2050:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9018,
"mutability": "mutable",
"name": "deprecated1",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9023,
"src": "2128:16:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 9017,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "2128:4:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9020,
"mutability": "mutable",
"name": "deprecated2",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9023,
"src": "2171:16:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 9019,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "2171:4:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9022,
"mutability": "mutable",
"name": "isSet",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9023,
"src": "2214:10:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 9021,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "2214:4:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"name": "Reserve",
"nodeType": "StructDefinition",
"scope": 10039,
"src": "1976:313:8",
"visibility": "public"
},
{
"constant": true,
"documentation": {
"id": 9024,
"nodeType": "StructuredDocumentation",
"src": "2297:40:8",
"text": " @dev version number"
},
"functionSelector": "54fd4d50",
"id": 9027,
"mutability": "constant",
"name": "version",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10039,
"src": "2343:35:8",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
},
"typeName": {
"id": 9025,
"name": "uint16",
"nodeType": "ElementaryTypeName",
"src": "2343:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
},
"value": {
"argumentTypes": null,
"hexValue": "3339",
"id": 9026,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2376:2:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_39_by_1",
"typeString": "int_const 39"
},
"value": "39"
},
"visibility": "public"
},
{
"baseFunctions": [
13195
],
"constant": false,
"functionSelector": "d3fb73b4",
"id": 9030,
"mutability": "mutable",
"name": "anchor",
"nodeType": "VariableDeclaration",
"overrides": {
"id": 9029,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "2411:8:8"
},
"scope": 10039,
"src": "2387:39:8",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
},
"typeName": {
"contractScope": null,
"id": 9028,
"name": "IConverterAnchor",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 13349,
"src": "2387:16:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"value": null,
"visibility": "public"
},
{
"baseFunctions": [
13233
],
"constant": false,
"functionSelector": "c45d3d92",
"id": 9033,
"mutability": "mutable",
"name": "conversionWhitelist",
"nodeType": "VariableDeclaration",
"overrides": {
"id": 9032,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "2491:8:8"
},
"scope": 10039,
"src": "2473:46:8",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
},
"typeName": {
"contractScope": null,
"id": 9031,
"name": "IWhitelist",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22917,
"src": "2473:10:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
}
},
"value": null,
"visibility": "public"
},
{
"constant": false,
"functionSelector": "d031370b",
"id": 9036,
"mutability": "mutable",
"name": "reserveTokens",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10039,
"src": "2613:34:8",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
"typeString": "contract IERC20Token[]"
},
"typeName": {
"baseType": {
"contractScope": null,
"id": 9034,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "2613:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"id": 9035,
"length": null,
"nodeType": "ArrayTypeName",
"src": "2613:13:8",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage_ptr",
"typeString": "contract IERC20Token[]"
}
},
"value": null,
"visibility": "public"
},
{
"constant": false,
"functionSelector": "d66bd524",
"id": 9040,
"mutability": "mutable",
"name": "reserves",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10039,
"src": "2754:48:8",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve)"
},
"typeName": {
"id": 9039,
"keyType": {
"contractScope": null,
"id": 9037,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "2763:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"nodeType": "Mapping",
"src": "2754:32:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve)"
},
"valueType": {
"contractScope": null,
"id": 9038,
"name": "Reserve",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 9023,
"src": "2778:7:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
"typeString": "struct ConverterBase.Reserve"
}
}
},
"value": null,
"visibility": "public"
},
{
"constant": false,
"functionSelector": "0c7d5cd8",
"id": 9043,
"mutability": "mutable",
"name": "reserveRatio",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10039,
"src": "2899:30:8",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9041,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "2899:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": {
"argumentTypes": null,
"hexValue": "30",
"id": 9042,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2928:1:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"visibility": "public"
},
{
"baseFunctions": [
13243
],
"constant": false,
"functionSelector": "94c275ad",
"id": 9047,
"mutability": "mutable",
"name": "maxConversionFee",
"nodeType": "VariableDeclaration",
"overrides": {
"id": 9045,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "3055:8:8"
},
"scope": 10039,
"src": "3041:43:8",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9044,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "3041:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": {
"argumentTypes": null,
"hexValue": "30",
"id": 9046,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3083:1:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"visibility": "public"
},
{
"baseFunctions": [
13238
],
"constant": false,
"functionSelector": "579cd3ca",
"id": 9051,
"mutability": "mutable",
"name": "conversionFee",
"nodeType": "VariableDeclaration",
"overrides": {
"id": 9049,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "3306:8:8"
},
"scope": 10039,
"src": "3292:40:8",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9048,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "3292:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": {
"argumentTypes": null,
"hexValue": "30",
"id": 9050,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3331:1:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"visibility": "public"
},
{
"constant": true,
"functionSelector": "bf754558",
"id": 9054,
"mutability": "constant",
"name": "conversionsEnabled",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10039,
"src": "3417:46:8",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 9052,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "3417:4:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": {
"argumentTypes": null,
"hexValue": "74727565",
"id": 9053,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3459:4:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "true"
},
"visibility": "public"
},
{
"anonymous": false,
"documentation": {
"id": 9055,
"nodeType": "StructuredDocumentation",
"src": "3514:260:8",
"text": " @dev triggered when the converter is activated\n @param _type converter type\n @param _anchor converter anchor\n @param _activated true if the converter was activated, false if it was deactivated"
},
"id": 9063,
"name": "Activation",
"nodeType": "EventDefinition",
"parameters": {
"id": 9062,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9057,
"indexed": true,
"mutability": "mutable",
"name": "_type",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9063,
"src": "3797:20:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
},
"typeName": {
"id": 9056,
"name": "uint16",
"nodeType": "ElementaryTypeName",
"src": "3797:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9059,
"indexed": true,
"mutability": "mutable",
"name": "_anchor",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9063,
"src": "3819:32:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
},
"typeName": {
"contractScope": null,
"id": 9058,
"name": "IConverterAnchor",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 13349,
"src": "3819:16:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9061,
"indexed": true,
"mutability": "mutable",
"name": "_activated",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9063,
"src": "3853:23:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 9060,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "3853:4:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "3796:81:8"
},
"src": "3780:98:8"
},
{
"anonymous": false,
"documentation": {
"id": 9064,
"nodeType": "StructuredDocumentation",
"src": "3886:447:8",
"text": " @dev triggered when a conversion between two tokens occurs\n @param _fromToken source ERC20 token\n @param _toToken target ERC20 token\n @param _trader wallet that initiated the trade\n @param _amount amount converted, in the source token\n @param _return amount returned, minus conversion fee\n @param _conversionFee conversion fee"
},
"id": 9078,
"name": "Conversion",
"nodeType": "EventDefinition",
"parameters": {
"id": 9077,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9066,
"indexed": true,
"mutability": "mutable",
"name": "_fromToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9078,
"src": "4366:30:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9065,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "4366:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9068,
"indexed": true,
"mutability": "mutable",
"name": "_toToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9078,
"src": "4407:28:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9067,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "4407:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9070,
"indexed": true,
"mutability": "mutable",
"name": "_trader",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9078,
"src": "4446:23:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 9069,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "4446:7:8",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9072,
"indexed": false,
"mutability": "mutable",
"name": "_amount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9078,
"src": "4480:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9071,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4480:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9074,
"indexed": false,
"mutability": "mutable",
"name": "_return",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9078,
"src": "4506:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9073,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4506:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9076,
"indexed": false,
"mutability": "mutable",
"name": "_conversionFee",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9078,
"src": "4532:21:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_int256",
"typeString": "int256"
},
"typeName": {
"id": 9075,
"name": "int256",
"nodeType": "ElementaryTypeName",
"src": "4532:6:8",
"typeDescriptions": {
"typeIdentifier": "t_int256",
"typeString": "int256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "4355:205:8"
},
"src": "4339:222:8"
},
{
"anonymous": false,
"documentation": {
"id": 9079,
"nodeType": "StructuredDocumentation",
"src": "4569:562:8",
"text": " @dev triggered when the rate between two tokens in the converter changes\n note that the event might be dispatched for rate updates between any two tokens in the converter\n note that prior to version 28, you should use the 'PriceDataUpdate' event instead\n @param _token1 address of the first token\n @param _token2 address of the second token\n @param _rateN rate of 1 unit of `_token1` in `_token2` (numerator)\n @param _rateD rate of 1 unit of `_token1` in `_token2` (denominator)"
},
"id": 9089,
"name": "TokenRateUpdate",
"nodeType": "EventDefinition",
"parameters": {
"id": 9088,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9081,
"indexed": true,
"mutability": "mutable",
"name": "_token1",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9089,
"src": "5169:27:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9080,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "5169:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9083,
"indexed": true,
"mutability": "mutable",
"name": "_token2",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9089,
"src": "5207:27:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9082,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "5207:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9085,
"indexed": false,
"mutability": "mutable",
"name": "_rateN",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9089,
"src": "5245:14:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9084,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5245:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9087,
"indexed": false,
"mutability": "mutable",
"name": "_rateD",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9089,
"src": "5270:14:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9086,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5270:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "5158:133:8"
},
"src": "5137:155:8"
},
{
"anonymous": false,
"documentation": {
"id": 9090,
"nodeType": "StructuredDocumentation",
"src": "5300:220:8",
"text": " @dev triggered when the conversion fee is updated\n @param _prevFee previous fee percentage, represented in ppm\n @param _newFee new fee percentage, represented in ppm"
},
"id": 9096,
"name": "ConversionFeeUpdate",
"nodeType": "EventDefinition",
"parameters": {
"id": 9095,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9092,
"indexed": false,
"mutability": "mutable",
"name": "_prevFee",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9096,
"src": "5552:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9091,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "5552:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9094,
"indexed": false,
"mutability": "mutable",
"name": "_newFee",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9096,
"src": "5569:14:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9093,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "5569:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "5551:33:8"
},
"src": "5526:59:8"
},
{
"body": {
"id": 9126,
"nodeType": "Block",
"src": "6192:82:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 9120,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 9118,
"name": "anchor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9030,
"src": "6203:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 9119,
"name": "_anchor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9099,
"src": "6212:7:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"src": "6203:16:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"id": 9121,
"nodeType": "ExpressionStatement",
"src": "6203:16:8"
},
{
"expression": {
"argumentTypes": null,
"id": 9124,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 9122,
"name": "maxConversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9047,
"src": "6230:16:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 9123,
"name": "_maxConversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9103,
"src": "6249:17:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"src": "6230:36:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"id": 9125,
"nodeType": "ExpressionStatement",
"src": "6230:36:8"
}
]
},
"documentation": {
"id": 9097,
"nodeType": "StructuredDocumentation",
"src": "5593:313:8",
"text": " @dev used by sub-contracts to initialize a new converter\n @param _anchor anchor governed by the converter\n @param _registry address of a contract registry contract\n @param _maxConversionFee maximum conversion fee, represented in ppm"
},
"id": 9127,
"implemented": true,
"kind": "constructor",
"modifiers": [
{
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9108,
"name": "_anchor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9099,
"src": "6069:7:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
],
"id": 9107,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "6061:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9106,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "6061:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9109,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6061:16:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"id": 9110,
"modifierName": {
"argumentTypes": null,
"id": 9105,
"name": "validAddress",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22618,
"src": "6048:12:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_address_$",
"typeString": "modifier (address)"
}
},
"nodeType": "ModifierInvocation",
"src": "6048:30:8"
},
{
"arguments": [
{
"argumentTypes": null,
"id": 9112,
"name": "_registry",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9101,
"src": "6111:9:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IContractRegistry_$22831",
"typeString": "contract IContractRegistry"
}
}
],
"id": 9113,
"modifierName": {
"argumentTypes": null,
"id": 9111,
"name": "ContractRegistryClient",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21719,
"src": "6088:22:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_ContractRegistryClient_$21719_$",
"typeString": "type(contract ContractRegistryClient)"
}
},
"nodeType": "ModifierInvocation",
"src": "6088:33:8"
},
{
"arguments": [
{
"argumentTypes": null,
"id": 9115,
"name": "_maxConversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9103,
"src": "6168:17:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
}
],
"id": 9116,
"modifierName": {
"argumentTypes": null,
"id": 9114,
"name": "validConversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9196,
"src": "6149:18:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_uint32_$",
"typeString": "modifier (uint32)"
}
},
"nodeType": "ModifierInvocation",
"src": "6149:37:8"
}
],
"name": "",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9104,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9099,
"mutability": "mutable",
"name": "_anchor",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9127,
"src": "5934:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
},
"typeName": {
"contractScope": null,
"id": 9098,
"name": "IConverterAnchor",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 13349,
"src": "5934:16:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9101,
"mutability": "mutable",
"name": "_registry",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9127,
"src": "5969:27:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IContractRegistry_$22831",
"typeString": "contract IContractRegistry"
},
"typeName": {
"contractScope": null,
"id": 9100,
"name": "IContractRegistry",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22831,
"src": "5969:17:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IContractRegistry_$22831",
"typeString": "contract IContractRegistry"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9103,
"mutability": "mutable",
"name": "_maxConversionFee",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9127,
"src": "6007:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9102,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "6007:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "5923:115:8"
},
"returnParameters": {
"id": 9117,
"nodeType": "ParameterList",
"parameters": [],
"src": "6192:0:8"
},
"scope": 10039,
"src": "5912:362:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9133,
"nodeType": "Block",
"src": "6345:40:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9129,
"name": "_active",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9144,
"src": "6356:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$__$",
"typeString": "function () view"
}
},
"id": 9130,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6356:9:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9131,
"nodeType": "ExpressionStatement",
"src": "6356:9:8"
},
{
"id": 9132,
"nodeType": "PlaceholderStatement",
"src": "6376:1:8"
}
]
},
"documentation": null,
"id": 9134,
"name": "active",
"nodeType": "ModifierDefinition",
"overrides": null,
"parameters": {
"id": 9128,
"nodeType": "ParameterList",
"parameters": [],
"src": "6342:2:8"
},
"src": "6327:58:8",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9143,
"nodeType": "Block",
"src": "6473:54:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9138,
"name": "isActive",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9362,
"src": "6492:8:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
"typeString": "function () view returns (bool)"
}
},
"id": 9139,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6492:10:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f494e414354495645",
"id": 9140,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6504:14:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_a22dd8039fb80c8642cf17389b806c873aa9fbdbf3f2bd8746d8ce373ef50f9e",
"typeString": "literal_string \"ERR_INACTIVE\""
},
"value": "ERR_INACTIVE"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_a22dd8039fb80c8642cf17389b806c873aa9fbdbf3f2bd8746d8ce373ef50f9e",
"typeString": "literal_string \"ERR_INACTIVE\""
}
],
"id": 9137,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "6484:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9141,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6484:35:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9142,
"nodeType": "ExpressionStatement",
"src": "6484:35:8"
}
]
},
"documentation": null,
"id": 9144,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_active",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9135,
"nodeType": "ParameterList",
"parameters": [],
"src": "6456:2:8"
},
"returnParameters": {
"id": 9136,
"nodeType": "ParameterList",
"parameters": [],
"src": "6473:0:8"
},
"scope": 10039,
"src": "6440:87:8",
"stateMutability": "view",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9150,
"nodeType": "Block",
"src": "6604:42:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9146,
"name": "_inactive",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9162,
"src": "6615:9:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$__$",
"typeString": "function () view"
}
},
"id": 9147,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6615:11:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9148,
"nodeType": "ExpressionStatement",
"src": "6615:11:8"
},
{
"id": 9149,
"nodeType": "PlaceholderStatement",
"src": "6637:1:8"
}
]
},
"documentation": null,
"id": 9151,
"name": "inactive",
"nodeType": "ModifierDefinition",
"overrides": null,
"parameters": {
"id": 9145,
"nodeType": "ParameterList",
"parameters": [],
"src": "6601:2:8"
},
"src": "6584:62:8",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9161,
"nodeType": "Block",
"src": "6736:53:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9157,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "6755:11:8",
"subExpression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9155,
"name": "isActive",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9362,
"src": "6756:8:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
"typeString": "function () view returns (bool)"
}
},
"id": 9156,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6756:10:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f414354495645",
"id": 9158,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6768:12:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_181d3d32638945611c2cb46b623de141c5e74a32dcd850864f64837aa849ee3f",
"typeString": "literal_string \"ERR_ACTIVE\""
},
"value": "ERR_ACTIVE"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_181d3d32638945611c2cb46b623de141c5e74a32dcd850864f64837aa849ee3f",
"typeString": "literal_string \"ERR_ACTIVE\""
}
],
"id": 9154,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "6747:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9159,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6747:34:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9160,
"nodeType": "ExpressionStatement",
"src": "6747:34:8"
}
]
},
"documentation": null,
"id": 9162,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_inactive",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9152,
"nodeType": "ParameterList",
"parameters": [],
"src": "6719:2:8"
},
"returnParameters": {
"id": 9153,
"nodeType": "ParameterList",
"parameters": [],
"src": "6736:0:8"
},
"scope": 10039,
"src": "6701:88:8",
"stateMutability": "view",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9171,
"nodeType": "Block",
"src": "6948:54:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9167,
"name": "_address",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9164,
"src": "6973:8:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 9166,
"name": "_validReserve",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9186,
"src": "6959:13:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21127_$returns$__$",
"typeString": "function (contract IERC20Token) view"
}
},
"id": 9168,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6959:23:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9169,
"nodeType": "ExpressionStatement",
"src": "6959:23:8"
},
{
"id": 9170,
"nodeType": "PlaceholderStatement",
"src": "6993:1:8"
}
]
},
"documentation": null,
"id": 9172,
"name": "validReserve",
"nodeType": "ModifierDefinition",
"overrides": null,
"parameters": {
"id": 9165,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9164,
"mutability": "mutable",
"name": "_address",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9172,
"src": "6926:20:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9163,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "6926:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "6925:22:8"
},
"src": "6904:98:8",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9185,
"nodeType": "Block",
"src": "7116:75:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9178,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "7135:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9180,
"indexExpression": {
"argumentTypes": null,
"id": 9179,
"name": "_address",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9174,
"src": "7144:8:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "7135:18:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"id": 9181,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "isSet",
"nodeType": "MemberAccess",
"referencedDeclaration": 9022,
"src": "7135:24:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f494e56414c49445f52455345525645",
"id": 9182,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7161:21:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
"typeString": "literal_string \"ERR_INVALID_RESERVE\""
},
"value": "ERR_INVALID_RESERVE"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
"typeString": "literal_string \"ERR_INVALID_RESERVE\""
}
],
"id": 9177,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "7127:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9183,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "7127:56:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9184,
"nodeType": "ExpressionStatement",
"src": "7127:56:8"
}
]
},
"documentation": null,
"id": 9186,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_validReserve",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9175,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9174,
"mutability": "mutable",
"name": "_address",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9186,
"src": "7080:20:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9173,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "7080:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "7079:22:8"
},
"returnParameters": {
"id": 9176,
"nodeType": "ParameterList",
"parameters": [],
"src": "7116:0:8"
},
"scope": 10039,
"src": "7057:134:8",
"stateMutability": "view",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9195,
"nodeType": "Block",
"src": "7283:66:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9191,
"name": "_conversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9188,
"src": "7314:14:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
],
"id": 9190,
"name": "_validConversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9209,
"src": "7294:19:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint32_$returns$__$",
"typeString": "function (uint32) pure"
}
},
"id": 9192,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "7294:35:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9193,
"nodeType": "ExpressionStatement",
"src": "7294:35:8"
},
{
"id": 9194,
"nodeType": "PlaceholderStatement",
"src": "7340:1:8"
}
]
},
"documentation": null,
"id": 9196,
"name": "validConversionFee",
"nodeType": "ModifierDefinition",
"overrides": null,
"parameters": {
"id": 9189,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9188,
"mutability": "mutable",
"name": "_conversionFee",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9196,
"src": "7260:21:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9187,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "7260:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "7259:23:8"
},
"src": "7232:117:8",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9208,
"nodeType": "Block",
"src": "7470:90:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"id": 9204,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9202,
"name": "_conversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9198,
"src": "7489:14:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"nodeType": "BinaryOperation",
"operator": "<=",
"rightExpression": {
"argumentTypes": null,
"id": 9203,
"name": "PPM_RESOLUTION",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9007,
"src": "7507:14:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"src": "7489:32:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f494e56414c49445f434f4e56455253494f4e5f464545",
"id": 9205,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7523:28:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_ae729833ea0b2cfd1b35fa1d075ae330e76860b5ab276fa04bde88b85e5c4d00",
"typeString": "literal_string \"ERR_INVALID_CONVERSION_FEE\""
},
"value": "ERR_INVALID_CONVERSION_FEE"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_ae729833ea0b2cfd1b35fa1d075ae330e76860b5ab276fa04bde88b85e5c4d00",
"typeString": "literal_string \"ERR_INVALID_CONVERSION_FEE\""
}
],
"id": 9201,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "7481:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9206,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "7481:71:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9207,
"nodeType": "ExpressionStatement",
"src": "7481:71:8"
}
]
},
"documentation": null,
"id": 9209,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_validConversionFee",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9199,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9198,
"mutability": "mutable",
"name": "_conversionFee",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9209,
"src": "7433:21:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9197,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "7433:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "7432:23:8"
},
"returnParameters": {
"id": 9200,
"nodeType": "ParameterList",
"parameters": [],
"src": "7470:0:8"
},
"scope": 10039,
"src": "7404:156:8",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9218,
"nodeType": "Block",
"src": "7645:59:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9214,
"name": "_weight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9211,
"src": "7676:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
],
"id": 9213,
"name": "_validReserveWeight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9236,
"src": "7656:19:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint32_$returns$__$",
"typeString": "function (uint32) pure"
}
},
"id": 9215,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "7656:28:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9216,
"nodeType": "ExpressionStatement",
"src": "7656:28:8"
},
{
"id": 9217,
"nodeType": "PlaceholderStatement",
"src": "7695:1:8"
}
]
},
"documentation": null,
"id": 9219,
"name": "validReserveWeight",
"nodeType": "ModifierDefinition",
"overrides": null,
"parameters": {
"id": 9212,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9211,
"mutability": "mutable",
"name": "_weight",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9219,
"src": "7629:14:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9210,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "7629:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "7628:16:8"
},
"src": "7601:103:8",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9235,
"nodeType": "Block",
"src": "7818:98:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 9231,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"id": 9227,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9225,
"name": "_weight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9221,
"src": "7837:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"argumentTypes": null,
"hexValue": "30",
"id": 9226,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7847:1:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "7837:11:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "&&",
"rightExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"id": 9230,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9228,
"name": "_weight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9221,
"src": "7852:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"nodeType": "BinaryOperation",
"operator": "<=",
"rightExpression": {
"argumentTypes": null,
"id": 9229,
"name": "PPM_RESOLUTION",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9007,
"src": "7863:14:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"src": "7852:25:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "7837:40:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f494e56414c49445f524553455256455f574549474854",
"id": 9232,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7879:28:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_e4e4c57eb13b428a7fc031dc1f6f2c3e13b61f7d7b93994b2d17f8dc75658178",
"typeString": "literal_string \"ERR_INVALID_RESERVE_WEIGHT\""
},
"value": "ERR_INVALID_RESERVE_WEIGHT"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_e4e4c57eb13b428a7fc031dc1f6f2c3e13b61f7d7b93994b2d17f8dc75658178",
"typeString": "literal_string \"ERR_INVALID_RESERVE_WEIGHT\""
}
],
"id": 9224,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "7829:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9233,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "7829:79:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9234,
"nodeType": "ExpressionStatement",
"src": "7829:79:8"
}
]
},
"documentation": null,
"id": 9236,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_validReserveWeight",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9222,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9221,
"mutability": "mutable",
"name": "_weight",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9236,
"src": "7788:14:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9220,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "7788:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "7787:16:8"
},
"returnParameters": {
"id": 9223,
"nodeType": "ParameterList",
"parameters": [],
"src": "7818:0:8"
},
"scope": 10039,
"src": "7759:157:8",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"baseFunctions": [
13190
],
"body": null,
"documentation": null,
"functionSelector": "3e8ff43f",
"id": 9242,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "converterType",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9238,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "8009:8:8"
},
"parameters": {
"id": 9237,
"nodeType": "ParameterList",
"parameters": [],
"src": "7986:2:8"
},
"returnParameters": {
"id": 9241,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9240,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9242,
"src": "8027:6:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
},
"typeName": {
"id": 9239,
"name": "uint16",
"nodeType": "ElementaryTypeName",
"src": "8027:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "8026:8:8"
},
"scope": 10039,
"src": "7964:71:8",
"stateMutability": "pure",
"virtual": true,
"visibility": "public"
},
{
"baseFunctions": [
13213
],
"body": null,
"documentation": null,
"functionSelector": "af94b8d8",
"id": 9256,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "targetAmountAndFee",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9250,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "8236:8:8"
},
"parameters": {
"id": 9249,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9244,
"mutability": "mutable",
"name": "_sourceToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9256,
"src": "8111:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9243,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "8111:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9246,
"mutability": "mutable",
"name": "_targetToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9256,
"src": "8137:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9245,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "8137:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9248,
"mutability": "mutable",
"name": "_amount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9256,
"src": "8163:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9247,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "8163:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "8110:69:8"
},
"returnParameters": {
"id": 9255,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9252,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9256,
"src": "8263:7:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9251,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "8263:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9254,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9256,
"src": "8272:7:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9253,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "8272:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "8262:18:8"
},
"scope": 10039,
"src": "8083:198:8",
"stateMutability": "view",
"virtual": true,
"visibility": "public"
},
{
"baseFunctions": [
13253
],
"body": {
"id": 9269,
"nodeType": "Block",
"src": "8435:281:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9262,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "8454:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9264,
"indexExpression": {
"argumentTypes": null,
"id": 9263,
"name": "ETH_RESERVE_ADDRESS",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9012,
"src": "8463:19:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "8454:29:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"id": 9265,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "isSet",
"nodeType": "MemberAccess",
"referencedDeclaration": 9022,
"src": "8454:35:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f494e56414c49445f52455345525645",
"id": 9266,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8491:21:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
"typeString": "literal_string \"ERR_INVALID_RESERVE\""
},
"value": "ERR_INVALID_RESERVE"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
"typeString": "literal_string \"ERR_INVALID_RESERVE\""
}
],
"id": 9261,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "8446:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9267,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "8446:67:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9268,
"nodeType": "ExpressionStatement",
"src": "8446:67:8"
}
]
},
"documentation": {
"id": 9257,
"nodeType": "StructuredDocumentation",
"src": "8289:104:8",
"text": " @dev deposits ether\n can only be called if the converter has an ETH reserve"
},
"id": 9270,
"implemented": true,
"kind": "receive",
"modifiers": [],
"name": "",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9259,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "8418:8:8"
},
"parameters": {
"id": 9258,
"nodeType": "ParameterList",
"parameters": [],
"src": "8406:2:8"
},
"returnParameters": {
"id": 9260,
"nodeType": "ParameterList",
"parameters": [],
"src": "8435:0:8"
},
"scope": 10039,
"src": "8399:317:8",
"stateMutability": "payable",
"virtual": false,
"visibility": "external"
},
{
"baseFunctions": [
13285
],
"body": {
"id": 9315,
"nodeType": "Block",
"src": "9248:392:8",
"statements": [
{
"assignments": [
9285
],
"declarations": [
{
"constant": false,
"id": 9285,
"mutability": "mutable",
"name": "converterUpgrader",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9315,
"src": "9259:25:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 9284,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "9259:7:8",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 9289,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9287,
"name": "CONVERTER_UPGRADER",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21542,
"src": "9297:18:8",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
],
"id": 9286,
"name": "addressOf",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21718,
"src": "9287:9:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
"typeString": "function (bytes32) view returns (address)"
}
},
"id": 9288,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "9287:29:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "9259:57:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 9297,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9293,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "9430:11:8",
"subExpression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9291,
"name": "isActive",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9362,
"src": "9431:8:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
"typeString": "function () view returns (bool)"
}
},
"id": 9292,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "9431:10:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "||",
"rightExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 9296,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9294,
"name": "owner",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21728,
"src": "9445:5:8",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"id": 9295,
"name": "converterUpgrader",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9285,
"src": "9454:17:8",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"src": "9445:26:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "9430:41:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4143434553535f44454e494544",
"id": 9298,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9473:19:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
"typeString": "literal_string \"ERR_ACCESS_DENIED\""
},
"value": "ERR_ACCESS_DENIED"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
"typeString": "literal_string \"ERR_ACCESS_DENIED\""
}
],
"id": 9290,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "9422:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9299,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "9422:71:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9300,
"nodeType": "ExpressionStatement",
"src": "9422:71:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9306,
"name": "this",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -28,
"src": "9525:4:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ConverterBase_$10039",
"typeString": "contract ConverterBase"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_ConverterBase_$10039",
"typeString": "contract ConverterBase"
}
],
"id": 9305,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "9517:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9304,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "9517:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9307,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "9517:13:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"id": 9308,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "9517:21:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 9301,
"name": "_to",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9273,
"src": "9504:3:8",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"id": 9303,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "transfer",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "9504:12:8",
"typeDescriptions": {
"typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
"typeString": "function (uint256)"
}
},
"id": 9309,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "9504:35:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9310,
"nodeType": "ExpressionStatement",
"src": "9504:35:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9312,
"name": "ETH_RESERVE_ADDRESS",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9012,
"src": "9612:19:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 9311,
"name": "syncReserveBalance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9844,
"src": "9593:18:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21127_$returns$__$",
"typeString": "function (contract IERC20Token)"
}
},
"id": 9313,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "9593:39:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9314,
"nodeType": "ExpressionStatement",
"src": "9593:39:8"
}
]
},
"documentation": {
"id": 9271,
"nodeType": "StructuredDocumentation",
"src": "8724:356:8",
"text": " @dev withdraws ether\n can only be called by the owner if the converter is inactive or by upgrader contract\n can only be called after the upgrader contract has accepted the ownership of this contract\n can only be called if the converter has an ETH reserve\n @param _to address to send the ETH to"
},
"functionSelector": "690d8320",
"id": 9316,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9277,
"modifierName": {
"argumentTypes": null,
"id": 9276,
"name": "protected",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22231,
"src": "9171:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "9171:9:8"
},
{
"arguments": null,
"id": 9279,
"modifierName": {
"argumentTypes": null,
"id": 9278,
"name": "ownerOnly",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21754,
"src": "9190:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "9190:9:8"
},
{
"arguments": [
{
"argumentTypes": null,
"id": 9281,
"name": "ETH_RESERVE_ADDRESS",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9012,
"src": "9222:19:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"id": 9282,
"modifierName": {
"argumentTypes": null,
"id": 9280,
"name": "validReserve",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9172,
"src": "9209:12:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21127_$",
"typeString": "modifier (contract IERC20Token)"
}
},
"nodeType": "ModifierInvocation",
"src": "9209:33:8"
}
],
"name": "withdrawETH",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9275,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "9153:8:8"
},
"parameters": {
"id": 9274,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9273,
"mutability": "mutable",
"name": "_to",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9316,
"src": "9107:19:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
"typeName": {
"id": 9272,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "9107:15:8",
"stateMutability": "payable",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "9106:21:8"
},
"returnParameters": {
"id": 9283,
"nodeType": "ParameterList",
"parameters": [],
"src": "9248:0:8"
},
"scope": 10039,
"src": "9086:554:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"body": {
"id": 9324,
"nodeType": "Block",
"src": "9867:30:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"hexValue": "74727565",
"id": 9322,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9885:4:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "true"
},
"functionReturnParameters": 9321,
"id": 9323,
"nodeType": "Return",
"src": "9878:11:8"
}
]
},
"documentation": {
"id": 9317,
"nodeType": "StructuredDocumentation",
"src": "9648:161:8",
"text": " @dev checks whether or not the converter version is 28 or higher\n @return true, since the converter version is 28 or higher"
},
"functionSelector": "d260529c",
"id": 9325,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "isV28OrHigher",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9318,
"nodeType": "ParameterList",
"parameters": [],
"src": "9837:2:8"
},
"returnParameters": {
"id": 9321,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9320,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9325,
"src": "9861:4:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 9319,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "9861:4:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "9860:6:8"
},
"scope": 10039,
"src": "9815:82:8",
"stateMutability": "pure",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13271
],
"body": {
"id": 9344,
"nodeType": "Block",
"src": "10419:51:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 9342,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 9340,
"name": "conversionWhitelist",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9033,
"src": "10430:19:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 9341,
"name": "_whitelist",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9328,
"src": "10452:10:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
}
},
"src": "10430:32:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
}
},
"id": 9343,
"nodeType": "ExpressionStatement",
"src": "10430:32:8"
}
]
},
"documentation": {
"id": 9326,
"nodeType": "StructuredDocumentation",
"src": "9905:357:8",
"text": " @dev allows the owner to update & enable the conversion whitelist contract address\n when set, only addresses that are whitelisted are actually allowed to use the converter\n note that the whitelist check is actually done by the BancorNetwork contract\n @param _whitelist address of a whitelist contract"
},
"functionSelector": "4af80f0e",
"id": 9345,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9332,
"modifierName": {
"argumentTypes": null,
"id": 9331,
"name": "ownerOnly",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21754,
"src": "10366:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "10366:9:8"
},
{
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9336,
"name": "_whitelist",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9328,
"src": "10401:10:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
}
],
"id": 9335,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "10393:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9334,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "10393:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9337,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "10393:19:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"id": 9338,
"modifierName": {
"argumentTypes": null,
"id": 9333,
"name": "notThis",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22644,
"src": "10385:7:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_address_$",
"typeString": "modifier (address)"
}
},
"nodeType": "ModifierInvocation",
"src": "10385:28:8"
}
],
"name": "setConversionWhitelist",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9330,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "10348:8:8"
},
"parameters": {
"id": 9329,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9328,
"mutability": "mutable",
"name": "_whitelist",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9345,
"src": "10300:21:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
},
"typeName": {
"contractScope": null,
"id": 9327,
"name": "IWhitelist",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22917,
"src": "10300:10:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "10299:23:8"
},
"returnParameters": {
"id": 9339,
"nodeType": "ParameterList",
"parameters": [],
"src": "10419:0:8"
},
"scope": 10039,
"src": "10268:202:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13200
],
"body": {
"id": 9361,
"nodeType": "Block",
"src": "10705:57:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 9359,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"expression": {
"argumentTypes": null,
"id": 9352,
"name": "anchor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9030,
"src": "10723:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"id": 9353,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "owner",
"nodeType": "MemberAccess",
"referencedDeclaration": 22838,
"src": "10723:12:8",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
"typeString": "function () view external returns (address)"
}
},
"id": 9354,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "10723:14:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9357,
"name": "this",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -28,
"src": "10749:4:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ConverterBase_$10039",
"typeString": "contract ConverterBase"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_ConverterBase_$10039",
"typeString": "contract ConverterBase"
}
],
"id": 9356,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "10741:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9355,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "10741:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9358,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "10741:13:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "10723:31:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"functionReturnParameters": 9351,
"id": 9360,
"nodeType": "Return",
"src": "10716:38:8"
}
]
},
"documentation": {
"id": 9346,
"nodeType": "StructuredDocumentation",
"src": "10478:157:8",
"text": " @dev returns true if the converter is active, false otherwise\n @return true if the converter is active, false otherwise"
},
"functionSelector": "22f3e2d4",
"id": 9362,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "isActive",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9348,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "10681:8:8"
},
"parameters": {
"id": 9347,
"nodeType": "ParameterList",
"parameters": [],
"src": "10658:2:8"
},
"returnParameters": {
"id": 9351,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9350,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9362,
"src": "10699:4:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 9349,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "10699:4:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "10698:6:8"
},
"scope": 10039,
"src": "10641:121:8",
"stateMutability": "view",
"virtual": true,
"visibility": "public"
},
{
"baseFunctions": [
13258
],
"body": {
"id": 9380,
"nodeType": "Block",
"src": "11256:54:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9377,
"name": "_newOwner",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9365,
"src": "11292:9:8",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"expression": {
"argumentTypes": null,
"id": 9374,
"name": "anchor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9030,
"src": "11267:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"id": 9376,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "transferOwnership",
"nodeType": "MemberAccess",
"referencedDeclaration": 22843,
"src": "11267:24:8",
"typeDescriptions": {
"typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
"typeString": "function (address) external"
}
},
"id": 9378,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "11267:35:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9379,
"nodeType": "ExpressionStatement",
"src": "11267:35:8"
}
]
},
"documentation": {
"id": 9363,
"nodeType": "StructuredDocumentation",
"src": "10770:336:8",
"text": " @dev transfers the anchor ownership\n the new owner needs to accept the transfer\n can only be called by the converter upgrder while the upgrader is the owner\n note that prior to version 28, you should use 'transferAnchorOwnership' instead\n @param _newOwner new token owner"
},
"functionSelector": "67b6d57c",
"id": 9381,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9369,
"modifierName": {
"argumentTypes": null,
"id": 9368,
"name": "ownerOnly",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21754,
"src": "11207:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "11207:9:8"
},
{
"arguments": [
{
"argumentTypes": null,
"id": 9371,
"name": "CONVERTER_UPGRADER",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21542,
"src": "11231:18:8",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
}
],
"id": 9372,
"modifierName": {
"argumentTypes": null,
"id": 9370,
"name": "only",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21577,
"src": "11226:4:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_bytes32_$",
"typeString": "modifier (bytes32)"
}
},
"nodeType": "ModifierInvocation",
"src": "11226:24:8"
}
],
"name": "transferAnchorOwnership",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9367,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "11189:8:8"
},
"parameters": {
"id": 9366,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9365,
"mutability": "mutable",
"name": "_newOwner",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9381,
"src": "11145:17:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 9364,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "11145:7:8",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "11144:19:8"
},
"returnParameters": {
"id": 9373,
"nodeType": "ParameterList",
"parameters": [],
"src": "11256:0:8"
},
"scope": 10039,
"src": "11112:198:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13261
],
"body": {
"id": 9404,
"nodeType": "Block",
"src": "11700:209:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
},
"id": 9392,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9389,
"name": "reserveTokenCount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9561,
"src": "11781:17:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_uint16_$",
"typeString": "function () view returns (uint16)"
}
},
"id": 9390,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "11781:19:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"argumentTypes": null,
"hexValue": "30",
"id": 9391,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11803:1:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "11781:23:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f494e56414c49445f524553455256455f434f554e54",
"id": 9393,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11806:27:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_ed94f14d8dcbb423a259b4072978fc0c494c6af1fea066a19023afb1a76ac87f",
"typeString": "literal_string \"ERR_INVALID_RESERVE_COUNT\""
},
"value": "ERR_INVALID_RESERVE_COUNT"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_ed94f14d8dcbb423a259b4072978fc0c494c6af1fea066a19023afb1a76ac87f",
"typeString": "literal_string \"ERR_INVALID_RESERVE_COUNT\""
}
],
"id": 9388,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "11773:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9394,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "11773:61:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9395,
"nodeType": "ExpressionStatement",
"src": "11773:61:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"expression": {
"argumentTypes": null,
"id": 9396,
"name": "anchor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9030,
"src": "11845:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"id": 9398,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "acceptOwnership",
"nodeType": "MemberAccess",
"referencedDeclaration": 22846,
"src": "11845:22:8",
"typeDescriptions": {
"typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
"typeString": "function () external"
}
},
"id": 9399,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "11845:24:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9400,
"nodeType": "ExpressionStatement",
"src": "11845:24:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9401,
"name": "syncReserveBalances",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9871,
"src": "11880:19:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
"typeString": "function ()"
}
},
"id": 9402,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "11880:21:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9403,
"nodeType": "ExpressionStatement",
"src": "11880:21:8"
}
]
},
"documentation": {
"id": 9382,
"nodeType": "StructuredDocumentation",
"src": "11318:309:8",
"text": " @dev accepts ownership of the anchor after an ownership transfer\n most converters are also activated as soon as they accept the anchor ownership\n can only be called by the contract owner\n note that prior to version 28, you should use 'acceptTokenOwnership' instead"
},
"functionSelector": "cdc91c69",
"id": 9405,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9386,
"modifierName": {
"argumentTypes": null,
"id": 9385,
"name": "ownerOnly",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21754,
"src": "11690:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "11690:9:8"
}
],
"name": "acceptAnchorOwnership",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9384,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "11681:8:8"
},
"parameters": {
"id": 9383,
"nodeType": "ParameterList",
"parameters": [],
"src": "11663:2:8"
},
"returnParameters": {
"id": 9387,
"nodeType": "ParameterList",
"parameters": [],
"src": "11700:0:8"
},
"scope": 10039,
"src": "11633:276:8",
"stateMutability": "nonpayable",
"virtual": true,
"visibility": "public"
},
{
"body": {
"id": 9425,
"nodeType": "Block",
"src": "12315:62:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9420,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9408,
"src": "12348:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
{
"argumentTypes": null,
"id": 9421,
"name": "_to",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9410,
"src": "12356:3:8",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 9422,
"name": "_amount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9412,
"src": "12361:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 9417,
"name": "anchor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9030,
"src": "12326:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"id": 9419,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "withdrawTokens",
"nodeType": "MemberAccess",
"referencedDeclaration": 22906,
"src": "12326:21:8",
"typeDescriptions": {
"typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20Token_$21127_$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (contract IERC20Token,address,uint256) external"
}
},
"id": 9423,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "12326:43:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9424,
"nodeType": "ExpressionStatement",
"src": "12326:43:8"
}
]
},
"documentation": {
"id": 9406,
"nodeType": "StructuredDocumentation",
"src": "11917:297:8",
"text": " @dev withdraws tokens held by the anchor and sends them to an account\n can only be called by the owner\n @param _token ERC20 token contract address\n @param _to account to receive the new amount\n @param _amount amount to withdraw"
},
"functionSelector": "395900d4",
"id": 9426,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9415,
"modifierName": {
"argumentTypes": null,
"id": 9414,
"name": "ownerOnly",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21754,
"src": "12305:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "12305:9:8"
}
],
"name": "withdrawFromAnchor",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9413,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9408,
"mutability": "mutable",
"name": "_token",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9426,
"src": "12248:18:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9407,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "12248:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9410,
"mutability": "mutable",
"name": "_to",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9426,
"src": "12268:11:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 9409,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "12268:7:8",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9412,
"mutability": "mutable",
"name": "_amount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9426,
"src": "12281:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9411,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "12281:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "12247:50:8"
},
"returnParameters": {
"id": 9416,
"nodeType": "ParameterList",
"parameters": [],
"src": "12315:0:8"
},
"scope": 10039,
"src": "12220:157:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13266
],
"body": {
"id": 9451,
"nodeType": "Block",
"src": "12655:199:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"id": 9438,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9436,
"name": "_conversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9429,
"src": "12674:14:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"nodeType": "BinaryOperation",
"operator": "<=",
"rightExpression": {
"argumentTypes": null,
"id": 9437,
"name": "maxConversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9047,
"src": "12692:16:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"src": "12674:34:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f494e56414c49445f434f4e56455253494f4e5f464545",
"id": 9439,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "12710:28:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_ae729833ea0b2cfd1b35fa1d075ae330e76860b5ab276fa04bde88b85e5c4d00",
"typeString": "literal_string \"ERR_INVALID_CONVERSION_FEE\""
},
"value": "ERR_INVALID_CONVERSION_FEE"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_ae729833ea0b2cfd1b35fa1d075ae330e76860b5ab276fa04bde88b85e5c4d00",
"typeString": "literal_string \"ERR_INVALID_CONVERSION_FEE\""
}
],
"id": 9435,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "12666:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9440,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "12666:73:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9441,
"nodeType": "ExpressionStatement",
"src": "12666:73:8"
},
{
"eventCall": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9443,
"name": "conversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9051,
"src": "12775:13:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
{
"argumentTypes": null,
"id": 9444,
"name": "_conversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9429,
"src": "12790:14:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
{
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
],
"id": 9442,
"name": "ConversionFeeUpdate",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9096,
"src": "12755:19:8",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_uint32_$returns$__$",
"typeString": "function (uint32,uint32)"
}
},
"id": 9445,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "12755:50:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9446,
"nodeType": "EmitStatement",
"src": "12750:55:8"
},
{
"expression": {
"argumentTypes": null,
"id": 9449,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 9447,
"name": "conversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9051,
"src": "12816:13:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 9448,
"name": "_conversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9429,
"src": "12832:14:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"src": "12816:30:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"id": 9450,
"nodeType": "ExpressionStatement",
"src": "12816:30:8"
}
]
},
"documentation": {
"id": 9427,
"nodeType": "StructuredDocumentation",
"src": "12385:189:8",
"text": " @dev updates the current conversion fee\n can only be called by the contract owner\n @param _conversionFee new conversion fee, represented in ppm"
},
"functionSelector": "ecbca55d",
"id": 9452,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9433,
"modifierName": {
"argumentTypes": null,
"id": 9432,
"name": "ownerOnly",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21754,
"src": "12645:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "12645:9:8"
}
],
"name": "setConversionFee",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9431,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "12636:8:8"
},
"parameters": {
"id": 9430,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9429,
"mutability": "mutable",
"name": "_conversionFee",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9452,
"src": "12606:21:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9428,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "12606:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "12605:23:8"
},
"returnParameters": {
"id": 9434,
"nodeType": "ParameterList",
"parameters": [],
"src": "12655:0:8"
},
"scope": 10039,
"src": "12580:274:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13280,
22574
],
"body": {
"id": 9509,
"nodeType": "Block",
"src": "13506:559:8",
"statements": [
{
"assignments": [
9470
],
"declarations": [
{
"constant": false,
"id": 9470,
"mutability": "mutable",
"name": "converterUpgrader",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9509,
"src": "13517:25:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 9469,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "13517:7:8",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 9474,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9472,
"name": "CONVERTER_UPGRADER",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21542,
"src": "13555:18:8",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
],
"id": 9471,
"name": "addressOf",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21718,
"src": "13545:9:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
"typeString": "function (bytes32) view returns (address)"
}
},
"id": 9473,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "13545:29:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "13517:57:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 9488,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 9484,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9480,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "13764:23:8",
"subExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9476,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "13765:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9478,
"indexExpression": {
"argumentTypes": null,
"id": 9477,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9455,
"src": "13774:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "13765:16:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"id": 9479,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "isSet",
"nodeType": "MemberAccess",
"referencedDeclaration": 9022,
"src": "13765:22:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "||",
"rightExpression": {
"argumentTypes": null,
"id": 9483,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "13791:11:8",
"subExpression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9481,
"name": "isActive",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9362,
"src": "13792:8:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
"typeString": "function () view returns (bool)"
}
},
"id": 9482,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "13792:10:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "13764:38:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "||",
"rightExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 9487,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9485,
"name": "owner",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21728,
"src": "13806:5:8",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"id": 9486,
"name": "converterUpgrader",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9470,
"src": "13815:17:8",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"src": "13806:26:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "13764:68:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4143434553535f44454e494544",
"id": 9489,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "13834:19:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
"typeString": "literal_string \"ERR_ACCESS_DENIED\""
},
"value": "ERR_ACCESS_DENIED"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
"typeString": "literal_string \"ERR_ACCESS_DENIED\""
}
],
"id": 9475,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "13756:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9490,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "13756:98:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9491,
"nodeType": "ExpressionStatement",
"src": "13756:98:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9495,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9455,
"src": "13886:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
{
"argumentTypes": null,
"id": 9496,
"name": "_to",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9457,
"src": "13894:3:8",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 9497,
"name": "_amount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9459,
"src": "13899:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 9492,
"name": "super",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -25,
"src": "13865:5:8",
"typeDescriptions": {
"typeIdentifier": "t_super$_ConverterBase_$10039",
"typeString": "contract super ConverterBase"
}
},
"id": 9494,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "withdrawTokens",
"nodeType": "MemberAccess",
"referencedDeclaration": 22574,
"src": "13865:20:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21127_$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (contract IERC20Token,address,uint256)"
}
},
"id": 9498,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "13865:42:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9499,
"nodeType": "ExpressionStatement",
"src": "13865:42:8"
},
{
"condition": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9500,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "13994:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9502,
"indexExpression": {
"argumentTypes": null,
"id": 9501,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9455,
"src": "14003:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "13994:16:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"id": 9503,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "isSet",
"nodeType": "MemberAccess",
"referencedDeclaration": 9022,
"src": "13994:22:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": null,
"id": 9508,
"nodeType": "IfStatement",
"src": "13990:67:8",
"trueBody": {
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9505,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9455,
"src": "14050:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 9504,
"name": "syncReserveBalance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9844,
"src": "14031:18:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21127_$returns$__$",
"typeString": "function (contract IERC20Token)"
}
},
"id": 9506,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "14031:26:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9507,
"nodeType": "ExpressionStatement",
"src": "14031:26:8"
}
}
]
},
"documentation": {
"id": 9453,
"nodeType": "StructuredDocumentation",
"src": "12862:462:8",
"text": " @dev withdraws tokens held by the converter and sends them to an account\n can only be called by the owner\n note that reserve tokens can only be withdrawn by the owner while the converter is inactive\n unless the owner is the converter upgrader contract\n @param _token ERC20 token contract address\n @param _to account to receive the new amount\n @param _amount amount to withdraw"
},
"functionSelector": "5e35359e",
"id": 9510,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9465,
"modifierName": {
"argumentTypes": null,
"id": 9464,
"name": "protected",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22231,
"src": "13472:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "13472:9:8"
},
{
"arguments": null,
"id": 9467,
"modifierName": {
"argumentTypes": null,
"id": 9466,
"name": "ownerOnly",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21754,
"src": "13491:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "13491:9:8"
}
],
"name": "withdrawTokens",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9463,
"nodeType": "OverrideSpecifier",
"overrides": [
{
"contractScope": null,
"id": 9461,
"name": "IConverter",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 13340,
"src": "13438:10:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverter_$13340",
"typeString": "contract IConverter"
}
},
{
"contractScope": null,
"id": 9462,
"name": "TokenHolder",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22575,
"src": "13450:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_TokenHolder_$22575",
"typeString": "contract TokenHolder"
}
}
],
"src": "13429:33:8"
},
"parameters": {
"id": 9460,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9455,
"mutability": "mutable",
"name": "_token",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9510,
"src": "13354:18:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9454,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "13354:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9457,
"mutability": "mutable",
"name": "_to",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9510,
"src": "13374:11:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 9456,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "13374:7:8",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9459,
"mutability": "mutable",
"name": "_amount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9510,
"src": "13387:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9458,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "13387:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "13353:50:8"
},
"returnParameters": {
"id": 9468,
"nodeType": "ParameterList",
"parameters": [],
"src": "13506:0:8"
},
"scope": 10039,
"src": "13330:735:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"body": {
"id": 9547,
"nodeType": "Block",
"src": "14324:338:8",
"statements": [
{
"assignments": [
9517
],
"declarations": [
{
"constant": false,
"id": 9517,
"mutability": "mutable",
"name": "converterUpgrader",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9547,
"src": "14335:36:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
"typeString": "contract IConverterUpgrader"
},
"typeName": {
"contractScope": null,
"id": 9516,
"name": "IConverterUpgrader",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 13660,
"src": "14335:18:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
"typeString": "contract IConverterUpgrader"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 9523,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9520,
"name": "CONVERTER_UPGRADER",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21542,
"src": "14403:18:8",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
],
"id": 9519,
"name": "addressOf",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21718,
"src": "14393:9:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
"typeString": "function (bytes32) view returns (address)"
}
},
"id": 9521,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "14393:29:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 9518,
"name": "IConverterUpgrader",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 13660,
"src": "14374:18:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_IConverterUpgrader_$13660_$",
"typeString": "type(contract IConverterUpgrader)"
}
},
"id": 9522,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "14374:49:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
"typeString": "contract IConverterUpgrader"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "14335:88:8"
},
{
"eventCall": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9525,
"name": "converterType",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9242,
"src": "14492:13:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$__$returns$_t_uint16_$",
"typeString": "function () pure returns (uint16)"
}
},
"id": 9526,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "14492:15:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
},
{
"argumentTypes": null,
"id": 9527,
"name": "anchor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9030,
"src": "14509:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
{
"argumentTypes": null,
"hexValue": "66616c7365",
"id": 9528,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "14517:5:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "false"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint16",
"typeString": "uint16"
},
{
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
},
{
"typeIdentifier": "t_bool",
"typeString": "bool"
}
],
"id": 9524,
"name": "Activation",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9063,
"src": "14481:10:8",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_uint16_$_t_contract$_IConverterAnchor_$13349_$_t_bool_$returns$__$",
"typeString": "function (uint16,contract IConverterAnchor,bool)"
}
},
"id": 9529,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "14481:42:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9530,
"nodeType": "EmitStatement",
"src": "14476:47:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9534,
"name": "converterUpgrader",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9517,
"src": "14562:17:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
"typeString": "contract IConverterUpgrader"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
"typeString": "contract IConverterUpgrader"
}
],
"id": 9533,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "14554:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9532,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "14554:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9535,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "14554:26:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 9531,
"name": "transferOwnership",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21787,
"src": "14536:17:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
"typeString": "function (address)"
}
},
"id": 9536,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "14536:45:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9537,
"nodeType": "ExpressionStatement",
"src": "14536:45:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9541,
"name": "version",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9027,
"src": "14618:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
],
"expression": {
"argumentTypes": null,
"id": 9538,
"name": "converterUpgrader",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9517,
"src": "14592:17:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
"typeString": "contract IConverterUpgrader"
}
},
"id": 9540,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "upgrade",
"nodeType": "MemberAccess",
"referencedDeclaration": 13659,
"src": "14592:25:8",
"typeDescriptions": {
"typeIdentifier": "t_function_external_nonpayable$_t_uint16_$returns$__$",
"typeString": "function (uint16) external"
}
},
"id": 9542,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "14592:34:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9543,
"nodeType": "ExpressionStatement",
"src": "14592:34:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9544,
"name": "acceptOwnership",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21817,
"src": "14637:15:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
"typeString": "function ()"
}
},
"id": 9545,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "14637:17:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9546,
"nodeType": "ExpressionStatement",
"src": "14637:17:8"
}
]
},
"documentation": {
"id": 9511,
"nodeType": "StructuredDocumentation",
"src": "14073:209:8",
"text": " @dev upgrades the converter to the latest version\n can only be called by the owner\n note that the owner needs to call acceptOwnership on the new converter after the upgrade"
},
"functionSelector": "d55ec697",
"id": 9548,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9514,
"modifierName": {
"argumentTypes": null,
"id": 9513,
"name": "ownerOnly",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21754,
"src": "14314:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "14314:9:8"
}
],
"name": "upgrade",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9512,
"nodeType": "ParameterList",
"parameters": [],
"src": "14304:2:8"
},
"returnParameters": {
"id": 9515,
"nodeType": "ParameterList",
"parameters": [],
"src": "14324:0:8"
},
"scope": 10039,
"src": "14288:374:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"body": {
"id": 9560,
"nodeType": "Block",
"src": "14940:54:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 9556,
"name": "reserveTokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9036,
"src": "14965:13:8",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
"typeString": "contract IERC20Token[] storage ref"
}
},
"id": 9557,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "length",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "14965:20:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 9555,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "14958:6:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_uint16_$",
"typeString": "type(uint16)"
},
"typeName": {
"id": 9554,
"name": "uint16",
"nodeType": "ElementaryTypeName",
"src": "14958:6:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9558,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "14958:28:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
},
"functionReturnParameters": 9553,
"id": 9559,
"nodeType": "Return",
"src": "14951:35:8"
}
]
},
"documentation": {
"id": 9549,
"nodeType": "StructuredDocumentation",
"src": "14670:206:8",
"text": " @dev returns the number of reserve tokens defined\n note that prior to version 17, you should use 'connectorTokenCount' instead\n @return number of reserve tokens"
},
"functionSelector": "9b99a8e2",
"id": 9561,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "reserveTokenCount",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9550,
"nodeType": "ParameterList",
"parameters": [],
"src": "14908:2:8"
},
"returnParameters": {
"id": 9553,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9552,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9561,
"src": "14932:6:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
},
"typeName": {
"id": 9551,
"name": "uint16",
"nodeType": "ElementaryTypeName",
"src": "14932:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "14931:8:8"
},
"scope": 10039,
"src": "14882:112:8",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13292
],
"body": {
"id": 9663,
"nodeType": "Block",
"src": "15545:544:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 9604,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 9598,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9592,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9564,
"src": "15599:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 9591,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "15591:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9590,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "15591:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9593,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "15591:15:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9596,
"name": "anchor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9030,
"src": "15618:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
],
"id": 9595,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "15610:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9594,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "15610:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9597,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "15610:15:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"src": "15591:34:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "&&",
"rightExpression": {
"argumentTypes": null,
"id": 9603,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "15629:23:8",
"subExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9599,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "15630:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9601,
"indexExpression": {
"argumentTypes": null,
"id": 9600,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9564,
"src": "15639:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "15630:16:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"id": 9602,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "isSet",
"nodeType": "MemberAccess",
"referencedDeclaration": 9022,
"src": "15630:22:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "15591:61:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f494e56414c49445f52455345525645",
"id": 9605,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "15654:21:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
"typeString": "literal_string \"ERR_INVALID_RESERVE\""
},
"value": "ERR_INVALID_RESERVE"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
"typeString": "literal_string \"ERR_INVALID_RESERVE\""
}
],
"id": 9589,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "15583:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9606,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "15583:93:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9607,
"nodeType": "ExpressionStatement",
"src": "15583:93:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"id": 9613,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9609,
"name": "_weight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9566,
"src": "15695:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"nodeType": "BinaryOperation",
"operator": "<=",
"rightExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"id": 9612,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9610,
"name": "PPM_RESOLUTION",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9007,
"src": "15706:14:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"nodeType": "BinaryOperation",
"operator": "-",
"rightExpression": {
"argumentTypes": null,
"id": 9611,
"name": "reserveRatio",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9043,
"src": "15723:12:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"src": "15706:29:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"src": "15695:40:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f494e56414c49445f524553455256455f574549474854",
"id": 9614,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "15737:28:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_e4e4c57eb13b428a7fc031dc1f6f2c3e13b61f7d7b93994b2d17f8dc75658178",
"typeString": "literal_string \"ERR_INVALID_RESERVE_WEIGHT\""
},
"value": "ERR_INVALID_RESERVE_WEIGHT"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_e4e4c57eb13b428a7fc031dc1f6f2c3e13b61f7d7b93994b2d17f8dc75658178",
"typeString": "literal_string \"ERR_INVALID_RESERVE_WEIGHT\""
}
],
"id": 9608,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "15687:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9615,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "15687:79:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9616,
"nodeType": "ExpressionStatement",
"src": "15687:79:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
},
"id": 9625,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9618,
"name": "reserveTokenCount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9561,
"src": "15785:17:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_uint16_$",
"typeString": "function () view returns (uint16)"
}
},
"id": 9619,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "15785:19:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9623,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "-",
"prefix": true,
"src": "15814:2:8",
"subExpression": {
"argumentTypes": null,
"hexValue": "31",
"id": 9622,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "15815:1:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"typeDescriptions": {
"typeIdentifier": "t_rational_minus_1_by_1",
"typeString": "int_const -1"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_rational_minus_1_by_1",
"typeString": "int_const -1"
}
],
"id": 9621,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "15807:6:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_uint16_$",
"typeString": "type(uint16)"
},
"typeName": {
"id": 9620,
"name": "uint16",
"nodeType": "ElementaryTypeName",
"src": "15807:6:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9624,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "15807:10:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
},
"src": "15785:32:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f494e56414c49445f524553455256455f434f554e54",
"id": 9626,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "15819:27:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_ed94f14d8dcbb423a259b4072978fc0c494c6af1fea066a19023afb1a76ac87f",
"typeString": "literal_string \"ERR_INVALID_RESERVE_COUNT\""
},
"value": "ERR_INVALID_RESERVE_COUNT"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_ed94f14d8dcbb423a259b4072978fc0c494c6af1fea066a19023afb1a76ac87f",
"typeString": "literal_string \"ERR_INVALID_RESERVE_COUNT\""
}
],
"id": 9617,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "15777:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9627,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "15777:70:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9628,
"nodeType": "ExpressionStatement",
"src": "15777:70:8"
},
{
"assignments": [
9630
],
"declarations": [
{
"constant": false,
"id": 9630,
"mutability": "mutable",
"name": "newReserve",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9663,
"src": "15860:26:8",
"stateVariable": false,
"storageLocation": "storage",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
"typeString": "struct ConverterBase.Reserve"
},
"typeName": {
"contractScope": null,
"id": 9629,
"name": "Reserve",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 9023,
"src": "15860:7:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
"typeString": "struct ConverterBase.Reserve"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 9634,
"initialValue": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9631,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "15889:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9633,
"indexExpression": {
"argumentTypes": null,
"id": 9632,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9564,
"src": "15898:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "15889:16:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "15860:45:8"
},
{
"expression": {
"argumentTypes": null,
"id": 9639,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 9635,
"name": "newReserve",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9630,
"src": "15916:10:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
"typeString": "struct ConverterBase.Reserve storage pointer"
}
},
"id": 9637,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 9014,
"src": "15916:18:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"hexValue": "30",
"id": 9638,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "15937:1:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "15916:22:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 9640,
"nodeType": "ExpressionStatement",
"src": "15916:22:8"
},
{
"expression": {
"argumentTypes": null,
"id": 9645,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 9641,
"name": "newReserve",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9630,
"src": "15949:10:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
"typeString": "struct ConverterBase.Reserve storage pointer"
}
},
"id": 9643,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberName": "weight",
"nodeType": "MemberAccess",
"referencedDeclaration": 9016,
"src": "15949:17:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 9644,
"name": "_weight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9566,
"src": "15969:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"src": "15949:27:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"id": 9646,
"nodeType": "ExpressionStatement",
"src": "15949:27:8"
},
{
"expression": {
"argumentTypes": null,
"id": 9651,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 9647,
"name": "newReserve",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9630,
"src": "15987:10:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
"typeString": "struct ConverterBase.Reserve storage pointer"
}
},
"id": 9649,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberName": "isSet",
"nodeType": "MemberAccess",
"referencedDeclaration": 9022,
"src": "15987:16:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"hexValue": "74727565",
"id": 9650,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "16006:4:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "true"
},
"src": "15987:23:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 9652,
"nodeType": "ExpressionStatement",
"src": "15987:23:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9656,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9564,
"src": "16040:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"expression": {
"argumentTypes": null,
"id": 9653,
"name": "reserveTokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9036,
"src": "16021:13:8",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
"typeString": "contract IERC20Token[] storage ref"
}
},
"id": 9655,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "push",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "16021:18:8",
"typeDescriptions": {
"typeIdentifier": "t_function_arraypush_nonpayable$_t_contract$_IERC20Token_$21127_$returns$__$",
"typeString": "function (contract IERC20Token)"
}
},
"id": 9657,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "16021:26:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9658,
"nodeType": "ExpressionStatement",
"src": "16021:26:8"
},
{
"expression": {
"argumentTypes": null,
"id": 9661,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 9659,
"name": "reserveRatio",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9043,
"src": "16058:12:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"argumentTypes": null,
"id": 9660,
"name": "_weight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9566,
"src": "16074:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"src": "16058:23:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"id": 9662,
"nodeType": "ExpressionStatement",
"src": "16058:23:8"
}
]
},
"documentation": {
"id": 9562,
"nodeType": "StructuredDocumentation",
"src": "15002:278:8",
"text": " @dev defines a new reserve token for the converter\n can only be called by the owner while the converter is inactive\n @param _token address of the reserve token\n @param _weight reserve weight, represented in ppm, 1-1000000"
},
"functionSelector": "6a49d2c4",
"id": 9664,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9570,
"modifierName": {
"argumentTypes": null,
"id": 9569,
"name": "ownerOnly",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21754,
"src": "15402:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "15402:9:8"
},
{
"arguments": null,
"id": 9572,
"modifierName": {
"argumentTypes": null,
"id": 9571,
"name": "inactive",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9151,
"src": "15421:8:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "15421:8:8"
},
{
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9576,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9564,
"src": "15460:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 9575,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "15452:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9574,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "15452:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9577,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "15452:15:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"id": 9578,
"modifierName": {
"argumentTypes": null,
"id": 9573,
"name": "validAddress",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22618,
"src": "15439:12:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_address_$",
"typeString": "modifier (address)"
}
},
"nodeType": "ModifierInvocation",
"src": "15439:29:8"
},
{
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9582,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9564,
"src": "15494:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 9581,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "15486:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9580,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "15486:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9583,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "15486:15:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"id": 9584,
"modifierName": {
"argumentTypes": null,
"id": 9579,
"name": "notThis",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22644,
"src": "15478:7:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_address_$",
"typeString": "modifier (address)"
}
},
"nodeType": "ModifierInvocation",
"src": "15478:24:8"
},
{
"arguments": [
{
"argumentTypes": null,
"id": 9586,
"name": "_weight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9566,
"src": "15531:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
}
],
"id": 9587,
"modifierName": {
"argumentTypes": null,
"id": 9585,
"name": "validReserveWeight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9219,
"src": "15512:18:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_uint32_$",
"typeString": "modifier (uint32)"
}
},
"nodeType": "ModifierInvocation",
"src": "15512:27:8"
}
],
"name": "addReserve",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9568,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "15384:8:8"
},
"parameters": {
"id": 9567,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9564,
"mutability": "mutable",
"name": "_token",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9664,
"src": "15306:18:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9563,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "15306:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9566,
"mutability": "mutable",
"name": "_weight",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9664,
"src": "15326:14:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9565,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "15326:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "15305:36:8"
},
"returnParameters": {
"id": 9588,
"nodeType": "ParameterList",
"parameters": [],
"src": "15545:0:8"
},
"scope": 10039,
"src": "15286:803:8",
"stateMutability": "nonpayable",
"virtual": true,
"visibility": "public"
},
{
"body": {
"id": 9680,
"nodeType": "Block",
"src": "16448:56:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9675,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "16466:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9677,
"indexExpression": {
"argumentTypes": null,
"id": 9676,
"name": "_reserveToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9667,
"src": "16475:13:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "16466:23:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"id": 9678,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "weight",
"nodeType": "MemberAccess",
"referencedDeclaration": 9016,
"src": "16466:30:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"functionReturnParameters": 9674,
"id": 9679,
"nodeType": "Return",
"src": "16459:37:8"
}
]
},
"documentation": {
"id": 9665,
"nodeType": "StructuredDocumentation",
"src": "16097:197:8",
"text": " @dev returns the reserve's weight\n added in version 28\n @param _reserveToken reserve token contract address\n @return reserve weight"
},
"functionSelector": "1cfab290",
"id": 9681,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": [
{
"argumentTypes": null,
"id": 9670,
"name": "_reserveToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9667,
"src": "16402:13:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"id": 9671,
"modifierName": {
"argumentTypes": null,
"id": 9669,
"name": "validReserve",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9172,
"src": "16389:12:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21127_$",
"typeString": "modifier (contract IERC20Token)"
}
},
"nodeType": "ModifierInvocation",
"src": "16389:27:8"
}
],
"name": "reserveWeight",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9668,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9667,
"mutability": "mutable",
"name": "_reserveToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9681,
"src": "16323:25:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9666,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "16323:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "16322:27:8"
},
"returnParameters": {
"id": 9674,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9673,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9681,
"src": "16435:6:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9672,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "16435:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "16434:8:8"
},
"scope": 10039,
"src": "16300:204:8",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13250
],
"body": {
"id": 9698,
"nodeType": "Block",
"src": "16941:57:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9693,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "16959:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9695,
"indexExpression": {
"argumentTypes": null,
"id": 9694,
"name": "_reserveToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9684,
"src": "16968:13:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "16959:23:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"id": 9696,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 9014,
"src": "16959:31:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 9692,
"id": 9697,
"nodeType": "Return",
"src": "16952:38:8"
}
]
},
"documentation": {
"id": 9682,
"nodeType": "StructuredDocumentation",
"src": "16512:255:8",
"text": " @dev returns the reserve's balance\n note that prior to version 17, you should use 'getConnectorBalance' instead\n @param _reserveToken reserve token contract address\n @return reserve balance"
},
"functionSelector": "dc8de379",
"id": 9699,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": [
{
"argumentTypes": null,
"id": 9688,
"name": "_reserveToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9684,
"src": "16894:13:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"id": 9689,
"modifierName": {
"argumentTypes": null,
"id": 9687,
"name": "validReserve",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9172,
"src": "16881:12:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21127_$",
"typeString": "modifier (contract IERC20Token)"
}
},
"nodeType": "ModifierInvocation",
"src": "16881:27:8"
}
],
"name": "reserveBalance",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9686,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "16849:8:8"
},
"parameters": {
"id": 9685,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9684,
"mutability": "mutable",
"name": "_reserveToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9699,
"src": "16797:25:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9683,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "16797:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "16796:27:8"
},
"returnParameters": {
"id": 9692,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9691,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9699,
"src": "16927:7:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9690,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "16927:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "16926:9:8"
},
"scope": 10039,
"src": "16773:225:8",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"body": {
"id": 9710,
"nodeType": "Block",
"src": "17228:61:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9705,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "17246:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9707,
"indexExpression": {
"argumentTypes": null,
"id": 9706,
"name": "ETH_RESERVE_ADDRESS",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9012,
"src": "17255:19:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "17246:29:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"id": 9708,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "isSet",
"nodeType": "MemberAccess",
"referencedDeclaration": 9022,
"src": "17246:35:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"functionReturnParameters": 9704,
"id": 9709,
"nodeType": "Return",
"src": "17239:42:8"
}
]
},
"documentation": {
"id": 9700,
"nodeType": "StructuredDocumentation",
"src": "17006:164:8",
"text": " @dev checks whether or not the converter has an ETH reserve\n @return true if the converter has an ETH reserve, false otherwise"
},
"functionSelector": "12c2aca4",
"id": 9711,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "hasETHReserve",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9701,
"nodeType": "ParameterList",
"parameters": [],
"src": "17198:2:8"
},
"returnParameters": {
"id": 9704,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9703,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9711,
"src": "17222:4:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 9702,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "17222:4:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "17221:6:8"
},
"scope": 10039,
"src": "17176:113:8",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13228
],
"body": {
"id": 9772,
"nodeType": "Block",
"src": "18137:517:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"id": 9736,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9734,
"name": "_sourceToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9714,
"src": "18183:12:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"id": 9735,
"name": "_targetToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9716,
"src": "18199:12:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"src": "18183:28:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f53414d455f534f555243455f544152474554",
"id": 9737,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "18213:24:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_238302f57e4481fe6a4c903e930919efa155f2aabe0b5da37da1448cea5fd634",
"typeString": "literal_string \"ERR_SAME_SOURCE_TARGET\""
},
"value": "ERR_SAME_SOURCE_TARGET"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_238302f57e4481fe6a4c903e930919efa155f2aabe0b5da37da1448cea5fd634",
"typeString": "literal_string \"ERR_SAME_SOURCE_TARGET\""
}
],
"id": 9733,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "18175:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9738,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "18175:63:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9739,
"nodeType": "ExpressionStatement",
"src": "18175:63:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 9760,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 9749,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9743,
"name": "conversionWhitelist",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9033,
"src": "18366:19:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
}
],
"id": 9742,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "18358:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9741,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "18358:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9744,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "18358:28:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "30",
"id": 9747,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "18398:1:8",
"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": 9746,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "18390:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9745,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "18390:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9748,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "18390:10:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "18358:42:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "||",
"rightExpression": {
"argumentTypes": null,
"components": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 9758,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9752,
"name": "_trader",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9720,
"src": "18456:7:8",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"expression": {
"argumentTypes": null,
"id": 9750,
"name": "conversionWhitelist",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9033,
"src": "18422:19:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
}
},
"id": 9751,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "isWhitelisted",
"nodeType": "MemberAccess",
"referencedDeclaration": 22916,
"src": "18422:33:8",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
"typeString": "function (address) view external returns (bool)"
}
},
"id": 9753,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "18422:42:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "&&",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9756,
"name": "_beneficiary",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9722,
"src": "18502:12:8",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
],
"expression": {
"argumentTypes": null,
"id": 9754,
"name": "conversionWhitelist",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9033,
"src": "18468:19:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
}
},
"id": 9755,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "isWhitelisted",
"nodeType": "MemberAccess",
"referencedDeclaration": 22916,
"src": "18468:33:8",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
"typeString": "function (address) view external returns (bool)"
}
},
"id": 9757,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "18468:47:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "18422:93:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
}
],
"id": 9759,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "18421:95:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "18358:158:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4e4f545f57484954454c4953544544",
"id": 9761,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "18535:21:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_d03711a645ac13b3887baa10c28f347997e96617340d7ffae036e653d4c59185",
"typeString": "literal_string \"ERR_NOT_WHITELISTED\""
},
"value": "ERR_NOT_WHITELISTED"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_d03711a645ac13b3887baa10c28f347997e96617340d7ffae036e653d4c59185",
"typeString": "literal_string \"ERR_NOT_WHITELISTED\""
}
],
"id": 9740,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "18350:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9762,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "18350:207:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9763,
"nodeType": "ExpressionStatement",
"src": "18350:207:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9765,
"name": "_sourceToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9714,
"src": "18587:12:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
{
"argumentTypes": null,
"id": 9766,
"name": "_targetToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9716,
"src": "18601:12:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
{
"argumentTypes": null,
"id": 9767,
"name": "_amount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9718,
"src": "18615:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 9768,
"name": "_trader",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9720,
"src": "18624:7:8",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 9769,
"name": "_beneficiary",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9722,
"src": "18633:12:8",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
],
"id": 9764,
"name": "doConvert",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9789,
"src": "18577:9:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21127_$_t_contract$_IERC20Token_$21127_$_t_uint256_$_t_address_$_t_address_payable_$returns$_t_uint256_$",
"typeString": "function (contract IERC20Token,contract IERC20Token,uint256,address,address payable) returns (uint256)"
}
},
"id": 9770,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "18577:69:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 9732,
"id": 9771,
"nodeType": "Return",
"src": "18570:76:8"
}
]
},
"documentation": {
"id": 9712,
"nodeType": "StructuredDocumentation",
"src": "17297:569:8",
"text": " @dev converts a specific amount of source tokens to target tokens\n can only be called by the bancor network contract\n @param _sourceToken source ERC20 token\n @param _targetToken target ERC20 token\n @param _amount amount of tokens to convert (in units of the source token)\n @param _trader address of the caller who executed the conversion\n @param _beneficiary wallet to receive the conversion result\n @return amount of tokens received (in units of the target token)"
},
"functionSelector": "e8dc12ff",
"id": 9773,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9726,
"modifierName": {
"argumentTypes": null,
"id": 9725,
"name": "protected",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22231,
"src": "18065:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "18065:9:8"
},
{
"arguments": [
{
"argumentTypes": null,
"id": 9728,
"name": "BANCOR_NETWORK",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21530,
"src": "18089:14:8",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
}
],
"id": 9729,
"modifierName": {
"argumentTypes": null,
"id": 9727,
"name": "only",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21577,
"src": "18084:4:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_bytes32_$",
"typeString": "modifier (bytes32)"
}
},
"nodeType": "ModifierInvocation",
"src": "18084:20:8"
}
],
"name": "convert",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9724,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "18030:8:8"
},
"parameters": {
"id": 9723,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9714,
"mutability": "mutable",
"name": "_sourceToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9773,
"src": "17889:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9713,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "17889:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9716,
"mutability": "mutable",
"name": "_targetToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9773,
"src": "17915:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9715,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "17915:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9718,
"mutability": "mutable",
"name": "_amount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9773,
"src": "17941:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9717,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "17941:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9720,
"mutability": "mutable",
"name": "_trader",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9773,
"src": "17958:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 9719,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "17958:7:8",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9722,
"mutability": "mutable",
"name": "_beneficiary",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9773,
"src": "17975:28:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
"typeName": {
"id": 9721,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "17975:15:8",
"stateMutability": "payable",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "17888:116:8"
},
"returnParameters": {
"id": 9732,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9731,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9773,
"src": "18123:7:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9730,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "18123:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "18122:9:8"
},
"scope": 10039,
"src": "17872:782:8",
"stateMutability": "payable",
"virtual": false,
"visibility": "public"
},
{
"body": null,
"documentation": {
"id": 9774,
"nodeType": "StructuredDocumentation",
"src": "18662:615:8",
"text": " @dev converts a specific amount of source tokens to target tokens\n called by ConverterBase and allows the inherited contracts to implement custom conversion logic\n @param _sourceToken source ERC20 token\n @param _targetToken target ERC20 token\n @param _amount amount of tokens to convert (in units of the source token)\n @param _trader address of the caller who executed the conversion\n @param _beneficiary wallet to receive the conversion result\n @return amount of tokens received (in units of the target token)"
},
"id": 9789,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "doConvert",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9785,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9776,
"mutability": "mutable",
"name": "_sourceToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9789,
"src": "19312:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9775,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "19312:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9778,
"mutability": "mutable",
"name": "_targetToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9789,
"src": "19347:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9777,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "19347:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9780,
"mutability": "mutable",
"name": "_amount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9789,
"src": "19382:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9779,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "19382:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9782,
"mutability": "mutable",
"name": "_trader",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9789,
"src": "19408:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 9781,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "19408:7:8",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9784,
"mutability": "mutable",
"name": "_beneficiary",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9789,
"src": "19434:28:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
"typeName": {
"id": 9783,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "19434:15:8",
"stateMutability": "payable",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "19301:162:8"
},
"returnParameters": {
"id": 9788,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9787,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9789,
"src": "19517:7:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9786,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "19517:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "19516:9:8"
},
"scope": 10039,
"src": "19283:243:8",
"stateMutability": "nonpayable",
"virtual": true,
"visibility": "internal"
},
{
"body": {
"id": 9805,
"nodeType": "Block",
"src": "19790:78:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9802,
"name": "PPM_RESOLUTION",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9007,
"src": "19845:14:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
],
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9799,
"name": "conversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9051,
"src": "19826:13:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
],
"expression": {
"argumentTypes": null,
"id": 9797,
"name": "_targetAmount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9792,
"src": "19808:13:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 9798,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "mul",
"nodeType": "MemberAccess",
"referencedDeclaration": 22327,
"src": "19808:17:8",
"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": 9800,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "19808:32:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 9801,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "div",
"nodeType": "MemberAccess",
"referencedDeclaration": 22353,
"src": "19808:36:8",
"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": 9803,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "19808:52:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 9796,
"id": 9804,
"nodeType": "Return",
"src": "19801:59:8"
}
]
},
"documentation": {
"id": 9790,
"nodeType": "StructuredDocumentation",
"src": "19534:173:8",
"text": " @dev returns the conversion fee for a given target amount\n @param _targetAmount target amount\n @return conversion fee"
},
"id": 9806,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "calculateFee",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9793,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9792,
"mutability": "mutable",
"name": "_targetAmount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9806,
"src": "19735:21:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9791,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "19735:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "19734:23:8"
},
"returnParameters": {
"id": 9796,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9795,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9806,
"src": "19781:7:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9794,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "19781:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "19780:9:8"
},
"scope": 10039,
"src": "19713:155:8",
"stateMutability": "view",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9843,
"nodeType": "Block",
"src": "20153:230:8",
"statements": [
{
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"id": 9817,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9815,
"name": "_reserveToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9809,
"src": "20168:13:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"id": 9816,
"name": "ETH_RESERVE_ADDRESS",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9012,
"src": "20185:19:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"src": "20168:36:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": {
"expression": {
"argumentTypes": null,
"id": 9840,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9829,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "20303:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9831,
"indexExpression": {
"argumentTypes": null,
"id": 9830,
"name": "_reserveToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9809,
"src": "20312:13:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "20303:23:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"id": 9832,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 9014,
"src": "20303:31:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9837,
"name": "this",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -28,
"src": "20369:4:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ConverterBase_$10039",
"typeString": "contract ConverterBase"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_ConverterBase_$10039",
"typeString": "contract ConverterBase"
}
],
"id": 9836,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "20361:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9835,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "20361:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9838,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "20361:13:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
],
"expression": {
"argumentTypes": null,
"id": 9833,
"name": "_reserveToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9809,
"src": "20337:13:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"id": 9834,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "balanceOf",
"nodeType": "MemberAccess",
"referencedDeclaration": 21088,
"src": "20337:23:8",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
"typeString": "function (address) view external returns (uint256)"
}
},
"id": 9839,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "20337:38:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "20303:72:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 9841,
"nodeType": "ExpressionStatement",
"src": "20303:72:8"
},
"id": 9842,
"nodeType": "IfStatement",
"src": "20164:211:8",
"trueBody": {
"expression": {
"argumentTypes": null,
"id": 9827,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9818,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "20219:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9820,
"indexExpression": {
"argumentTypes": null,
"id": 9819,
"name": "_reserveToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9809,
"src": "20228:13:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "20219:23:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"id": 9821,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 9014,
"src": "20219:31:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9824,
"name": "this",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -28,
"src": "20261:4:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ConverterBase_$10039",
"typeString": "contract ConverterBase"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_ConverterBase_$10039",
"typeString": "contract ConverterBase"
}
],
"id": 9823,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "20253:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9822,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "20253:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9825,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "20253:13:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"id": 9826,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "20253:21:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "20219:55:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 9828,
"nodeType": "ExpressionStatement",
"src": "20219:55:8"
}
}
]
},
"documentation": {
"id": 9807,
"nodeType": "StructuredDocumentation",
"src": "19876:179:8",
"text": " @dev syncs the stored reserve balance for a given reserve with the real reserve balance\n @param _reserveToken address of the reserve token"
},
"id": 9844,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": [
{
"argumentTypes": null,
"id": 9812,
"name": "_reserveToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9809,
"src": "20138:13:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"id": 9813,
"modifierName": {
"argumentTypes": null,
"id": 9811,
"name": "validReserve",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9172,
"src": "20125:12:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21127_$",
"typeString": "modifier (contract IERC20Token)"
}
},
"nodeType": "ModifierInvocation",
"src": "20125:27:8"
}
],
"name": "syncReserveBalance",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9810,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9809,
"mutability": "mutable",
"name": "_reserveToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9844,
"src": "20089:25:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9808,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "20089:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "20088:27:8"
},
"returnParameters": {
"id": 9814,
"nodeType": "ParameterList",
"parameters": [],
"src": "20153:0:8"
},
"scope": 10039,
"src": "20061:322:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9870,
"nodeType": "Block",
"src": "20496:165:8",
"statements": [
{
"assignments": [
9849
],
"declarations": [
{
"constant": false,
"id": 9849,
"mutability": "mutable",
"name": "reserveCount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9870,
"src": "20507:20:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9848,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "20507:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 9852,
"initialValue": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 9850,
"name": "reserveTokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9036,
"src": "20530:13:8",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
"typeString": "contract IERC20Token[] storage ref"
}
},
"id": 9851,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "length",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "20530:20:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "20507:43:8"
},
{
"body": {
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9864,
"name": "reserveTokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9036,
"src": "20636:13:8",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
"typeString": "contract IERC20Token[] storage ref"
}
},
"id": 9866,
"indexExpression": {
"argumentTypes": null,
"id": 9865,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9854,
"src": "20650:1:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "20636:16:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 9863,
"name": "syncReserveBalance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9844,
"src": "20617:18:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21127_$returns$__$",
"typeString": "function (contract IERC20Token)"
}
},
"id": 9867,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "20617:36:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9868,
"nodeType": "ExpressionStatement",
"src": "20617:36:8"
},
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 9859,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9857,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9854,
"src": "20581:1:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"argumentTypes": null,
"id": 9858,
"name": "reserveCount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9849,
"src": "20585:12:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "20581:16:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 9869,
"initializationExpression": {
"assignments": [
9854
],
"declarations": [
{
"constant": false,
"id": 9854,
"mutability": "mutable",
"name": "i",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9869,
"src": "20566:9:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9853,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "20566:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 9856,
"initialValue": {
"argumentTypes": null,
"hexValue": "30",
"id": 9855,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "20578:1:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"nodeType": "VariableDeclarationStatement",
"src": "20566:13:8"
},
"loopExpression": {
"expression": {
"argumentTypes": null,
"id": 9861,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "++",
"prefix": false,
"src": "20599:3:8",
"subExpression": {
"argumentTypes": null,
"id": 9860,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9854,
"src": "20599:1:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 9862,
"nodeType": "ExpressionStatement",
"src": "20599:3:8"
},
"nodeType": "ForStatement",
"src": "20561:92:8"
}
]
},
"documentation": {
"id": 9845,
"nodeType": "StructuredDocumentation",
"src": "20391:59:8",
"text": " @dev syncs all stored reserve balances"
},
"id": 9871,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "syncReserveBalances",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9846,
"nodeType": "ParameterList",
"parameters": [],
"src": "20484:2:8"
},
"returnParameters": {
"id": 9847,
"nodeType": "ParameterList",
"parameters": [],
"src": "20496:0:8"
},
"scope": 10039,
"src": "20456:205:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9907,
"nodeType": "Block",
"src": "21324:518:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 9892,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9888,
"name": "_feeAmount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9884,
"src": "21705:10:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
"typeString": "int_const 5789...(69 digits omitted)...9968"
},
"id": 9891,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"hexValue": "32",
"id": 9889,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "21718:1:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"nodeType": "BinaryOperation",
"operator": "**",
"rightExpression": {
"argumentTypes": null,
"hexValue": "323535",
"id": 9890,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "21723:3:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_255_by_1",
"typeString": "int_const 255"
},
"value": "255"
},
"src": "21718:8:8",
"typeDescriptions": {
"typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
"typeString": "int_const 5789...(69 digits omitted)...9968"
}
},
"src": "21705:21:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
}
],
"id": 9887,
"name": "assert",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -3,
"src": "21698:6:8",
"typeDescriptions": {
"typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$",
"typeString": "function (bool) pure"
}
},
"id": 9893,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "21698:29:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9894,
"nodeType": "ExpressionStatement",
"src": "21698:29:8"
},
{
"eventCall": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9896,
"name": "_sourceToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9874,
"src": "21754:12:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
{
"argumentTypes": null,
"id": 9897,
"name": "_targetToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9876,
"src": "21768:12:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
{
"argumentTypes": null,
"id": 9898,
"name": "_trader",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9878,
"src": "21782:7:8",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 9899,
"name": "_amount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9880,
"src": "21791:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 9900,
"name": "_returnAmount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9882,
"src": "21800:13:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9903,
"name": "_feeAmount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9884,
"src": "21822:10:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 9902,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "21815:6:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_int256_$",
"typeString": "type(int256)"
},
"typeName": {
"id": 9901,
"name": "int256",
"nodeType": "ElementaryTypeName",
"src": "21815:6:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9904,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "21815:18:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_int256",
"typeString": "int256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_int256",
"typeString": "int256"
}
],
"id": 9895,
"name": "Conversion",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9078,
"src": "21743:10:8",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_contract$_IERC20Token_$21127_$_t_contract$_IERC20Token_$21127_$_t_address_$_t_uint256_$_t_uint256_$_t_int256_$returns$__$",
"typeString": "function (contract IERC20Token,contract IERC20Token,address,uint256,uint256,int256)"
}
},
"id": 9905,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "21743:91:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9906,
"nodeType": "EmitStatement",
"src": "21738:96:8"
}
]
},
"documentation": {
"id": 9872,
"nodeType": "StructuredDocumentation",
"src": "20669:409:8",
"text": " @dev helper, dispatches the Conversion event\n @param _sourceToken source ERC20 token\n @param _targetToken target ERC20 token\n @param _trader address of the caller who executed the conversion\n @param _amount amount purchased/sold (in the source token)\n @param _returnAmount amount returned (in the target token)"
},
"id": 9908,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "dispatchConversionEvent",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9885,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9874,
"mutability": "mutable",
"name": "_sourceToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9908,
"src": "21127:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9873,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "21127:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9876,
"mutability": "mutable",
"name": "_targetToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9908,
"src": "21162:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9875,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "21162:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9878,
"mutability": "mutable",
"name": "_trader",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9908,
"src": "21197:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 9877,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "21197:7:8",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9880,
"mutability": "mutable",
"name": "_amount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9908,
"src": "21223:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9879,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "21223:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9882,
"mutability": "mutable",
"name": "_returnAmount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9908,
"src": "21249:21:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9881,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "21249:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9884,
"mutability": "mutable",
"name": "_feeAmount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9908,
"src": "21281:18:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9883,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "21281:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "21116:184:8"
},
"returnParameters": {
"id": 9886,
"nodeType": "ParameterList",
"parameters": [],
"src": "21324:0:8"
},
"scope": 10039,
"src": "21084:758:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "internal"
},
{
"baseFunctions": [
13297
],
"body": {
"id": 9917,
"nodeType": "Block",
"src": "22030:32:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 9915,
"name": "anchor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9030,
"src": "22048:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"functionReturnParameters": 9914,
"id": 9916,
"nodeType": "Return",
"src": "22041:13:8"
}
]
},
"documentation": {
"id": 9909,
"nodeType": "StructuredDocumentation",
"src": "21850:109:8",
"text": " @dev deprecated since version 28, backward compatibility - use only for earlier versions"
},
"functionSelector": "fc0c546a",
"id": 9918,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "token",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9911,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "21994:8:8"
},
"parameters": {
"id": 9910,
"nodeType": "ParameterList",
"parameters": [],
"src": "21979:2:8"
},
"returnParameters": {
"id": 9914,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9913,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9918,
"src": "22012:16:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
},
"typeName": {
"contractScope": null,
"id": 9912,
"name": "IConverterAnchor",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 13349,
"src": "22012:16:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "22011:18:8"
},
"scope": 10039,
"src": "21965:97:8",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13302
],
"body": {
"id": 9931,
"nodeType": "Block",
"src": "22213:53:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9928,
"name": "_newOwner",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9921,
"src": "22248:9:8",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 9927,
"name": "transferAnchorOwnership",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9381,
"src": "22224:23:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
"typeString": "function (address)"
}
},
"id": 9929,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "22224:34:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9930,
"nodeType": "ExpressionStatement",
"src": "22224:34:8"
}
]
},
"documentation": {
"id": 9919,
"nodeType": "StructuredDocumentation",
"src": "22070:60:8",
"text": " @dev deprecated, backward compatibility"
},
"functionSelector": "21e6b53d",
"id": 9932,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9925,
"modifierName": {
"argumentTypes": null,
"id": 9924,
"name": "ownerOnly",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21754,
"src": "22203:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "22203:9:8"
}
],
"name": "transferTokenOwnership",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9923,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "22194:8:8"
},
"parameters": {
"id": 9922,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9921,
"mutability": "mutable",
"name": "_newOwner",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9932,
"src": "22168:17:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 9920,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "22168:7:8",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "22167:19:8"
},
"returnParameters": {
"id": 9926,
"nodeType": "ParameterList",
"parameters": [],
"src": "22213:0:8"
},
"scope": 10039,
"src": "22136:130:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13305
],
"body": {
"id": 9942,
"nodeType": "Block",
"src": "22398:42:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9939,
"name": "acceptAnchorOwnership",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9405,
"src": "22409:21:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
"typeString": "function ()"
}
},
"id": 9940,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "22409:23:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9941,
"nodeType": "ExpressionStatement",
"src": "22409:23:8"
}
]
},
"documentation": {
"id": 9933,
"nodeType": "StructuredDocumentation",
"src": "22274:60:8",
"text": " @dev deprecated, backward compatibility"
},
"functionSelector": "38a5e016",
"id": 9943,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9937,
"modifierName": {
"argumentTypes": null,
"id": 9936,
"name": "ownerOnly",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21754,
"src": "22388:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "22388:9:8"
}
],
"name": "acceptTokenOwnership",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9935,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "22379:8:8"
},
"parameters": {
"id": 9934,
"nodeType": "ParameterList",
"parameters": [],
"src": "22369:2:8"
},
"returnParameters": {
"id": 9938,
"nodeType": "ParameterList",
"parameters": [],
"src": "22398:0:8"
},
"scope": 10039,
"src": "22340:100:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13320
],
"body": {
"id": 9976,
"nodeType": "Block",
"src": "22621:141:8",
"statements": [
{
"assignments": [
9961
],
"declarations": [
{
"constant": false,
"id": 9961,
"mutability": "mutable",
"name": "reserve",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9976,
"src": "22632:22:8",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_memory_ptr",
"typeString": "struct ConverterBase.Reserve"
},
"typeName": {
"contractScope": null,
"id": 9960,
"name": "Reserve",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 9023,
"src": "22632:7:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
"typeString": "struct ConverterBase.Reserve"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 9965,
"initialValue": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9962,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "22657:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9964,
"indexExpression": {
"argumentTypes": null,
"id": 9963,
"name": "_address",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9946,
"src": "22666:8:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "22657:18:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "22632:43:8"
},
{
"expression": {
"argumentTypes": null,
"components": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 9966,
"name": "reserve",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9961,
"src": "22693:7:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_memory_ptr",
"typeString": "struct ConverterBase.Reserve memory"
}
},
"id": 9967,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 9014,
"src": "22693:15:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 9968,
"name": "reserve",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9961,
"src": "22710:7:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_memory_ptr",
"typeString": "struct ConverterBase.Reserve memory"
}
},
"id": 9969,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "weight",
"nodeType": "MemberAccess",
"referencedDeclaration": 9016,
"src": "22710:14:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
{
"argumentTypes": null,
"hexValue": "66616c7365",
"id": 9970,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "22726:5:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "false"
},
{
"argumentTypes": null,
"hexValue": "66616c7365",
"id": 9971,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "22733:5:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "false"
},
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 9972,
"name": "reserve",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9961,
"src": "22740:7:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_memory_ptr",
"typeString": "struct ConverterBase.Reserve memory"
}
},
"id": 9973,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "isSet",
"nodeType": "MemberAccess",
"referencedDeclaration": 9022,
"src": "22740:13:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
}
],
"id": 9974,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "22692:62:8",
"typeDescriptions": {
"typeIdentifier": "t_tuple$_t_uint256_$_t_uint32_$_t_bool_$_t_bool_$_t_bool_$",
"typeString": "tuple(uint256,uint32,bool,bool,bool)"
}
},
"functionReturnParameters": 9959,
"id": 9975,
"nodeType": "Return",
"src": "22686:68:8"
}
]
},
"documentation": {
"id": 9944,
"nodeType": "StructuredDocumentation",
"src": "22448:60:8",
"text": " @dev deprecated, backward compatibility"
},
"functionSelector": "0e53aae9",
"id": 9977,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "connectors",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9948,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "22568:8:8"
},
"parameters": {
"id": 9947,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9946,
"mutability": "mutable",
"name": "_address",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9977,
"src": "22534:20:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9945,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "22534:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "22533:22:8"
},
"returnParameters": {
"id": 9959,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9950,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9977,
"src": "22586:7:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9949,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "22586:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9952,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9977,
"src": "22595:6:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9951,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "22595:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9954,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9977,
"src": "22603:4:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 9953,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "22603:4:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9956,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9977,
"src": "22609:4:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 9955,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "22609:4:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9958,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9977,
"src": "22615:4:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 9957,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "22615:4:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "22585:35:8"
},
"scope": 10039,
"src": "22514:248:8",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13334
],
"body": {
"id": 9991,
"nodeType": "Block",
"src": "22920:61:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 9986,
"name": "ConverterBase",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 10039,
"src": "22938:13:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_ConverterBase_$10039_$",
"typeString": "type(contract ConverterBase)"
}
},
"id": 9987,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "reserveTokens",
"nodeType": "MemberAccess",
"referencedDeclaration": 9036,
"src": "22938:27:8",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
"typeString": "contract IERC20Token[] storage ref"
}
},
"id": 9989,
"indexExpression": {
"argumentTypes": null,
"id": 9988,
"name": "_index",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9980,
"src": "22966:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "22938:35:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"functionReturnParameters": 9985,
"id": 9990,
"nodeType": "Return",
"src": "22931:42:8"
}
]
},
"documentation": {
"id": 9978,
"nodeType": "StructuredDocumentation",
"src": "22770:60:8",
"text": " @dev deprecated, backward compatibility"
},
"functionSelector": "19b64015",
"id": 9992,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "connectorTokens",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9982,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "22889:8:8"
},
"parameters": {
"id": 9981,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9980,
"mutability": "mutable",
"name": "_index",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9992,
"src": "22861:14:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9979,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "22861:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "22860:16:8"
},
"returnParameters": {
"id": 9985,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9984,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9992,
"src": "22907:11:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9983,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "22907:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "22906:13:8"
},
"scope": 10039,
"src": "22836:145:8",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13339
],
"body": {
"id": 10002,
"nodeType": "Block",
"src": "23124:45:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9999,
"name": "reserveTokenCount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9561,
"src": "23142:17:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_uint16_$",
"typeString": "function () view returns (uint16)"
}
},
"id": 10000,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "23142:19:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
},
"functionReturnParameters": 9998,
"id": 10001,
"nodeType": "Return",
"src": "23135:26:8"
}
]
},
"documentation": {
"id": 9993,
"nodeType": "StructuredDocumentation",
"src": "22989:60:8",
"text": " @dev deprecated, backward compatibility"
},
"functionSelector": "71f52bf3",
"id": 10003,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "connectorTokenCount",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9995,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "23098:8:8"
},
"parameters": {
"id": 9994,
"nodeType": "ParameterList",
"parameters": [],
"src": "23083:2:8"
},
"returnParameters": {
"id": 9998,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9997,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10003,
"src": "23116:6:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
},
"typeName": {
"id": 9996,
"name": "uint16",
"nodeType": "ElementaryTypeName",
"src": "23116:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "23115:8:8"
},
"scope": 10039,
"src": "23055:114:8",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13327
],
"body": {
"id": 10016,
"nodeType": "Block",
"src": "23340:57:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 10013,
"name": "_connectorToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 10006,
"src": "23373:15:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 10012,
"name": "reserveBalance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9699,
"src": "23358:14:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21127_$returns$_t_uint256_$",
"typeString": "function (contract IERC20Token) view returns (uint256)"
}
},
"id": 10014,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "23358:31:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 10011,
"id": 10015,
"nodeType": "Return",
"src": "23351:38:8"
}
]
},
"documentation": {
"id": 10004,
"nodeType": "StructuredDocumentation",
"src": "23177:60:8",
"text": " @dev deprecated, backward compatibility"
},
"functionSelector": "d8959512",
"id": 10017,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "getConnectorBalance",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 10008,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "23313:8:8"
},
"parameters": {
"id": 10007,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 10006,
"mutability": "mutable",
"name": "_connectorToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10017,
"src": "23272:27:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 10005,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "23272:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "23271:29:8"
},
"returnParameters": {
"id": 10011,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 10010,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10017,
"src": "23331:7:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 10009,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "23331:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "23330:9:8"
},
"scope": 10039,
"src": "23243:154:8",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"body": {
"id": 10037,
"nodeType": "Block",
"src": "23598:81:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 10032,
"name": "_sourceToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 10020,
"src": "23635:12:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
{
"argumentTypes": null,
"id": 10033,
"name": "_targetToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 10022,
"src": "23649:12:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
{
"argumentTypes": null,
"id": 10034,
"name": "_amount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 10024,
"src": "23663:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 10031,
"name": "targetAmountAndFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9256,
"src": "23616:18:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21127_$_t_contract$_IERC20Token_$21127_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
"typeString": "function (contract IERC20Token,contract IERC20Token,uint256) view returns (uint256,uint256)"
}
},
"id": 10035,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "23616:55:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
"typeString": "tuple(uint256,uint256)"
}
},
"functionReturnParameters": 10030,
"id": 10036,
"nodeType": "Return",
"src": "23609:62:8"
}
]
},
"documentation": {
"id": 10018,
"nodeType": "StructuredDocumentation",
"src": "23405:60:8",
"text": " @dev deprecated, backward compatibility"
},
"functionSelector": "1e1401f8",
"id": 10038,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "getReturn",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 10025,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 10020,
"mutability": "mutable",
"name": "_sourceToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10038,
"src": "23490:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 10019,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "23490:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 10022,
"mutability": "mutable",
"name": "_targetToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10038,
"src": "23516:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 10021,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "23516:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 10024,
"mutability": "mutable",
"name": "_amount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10038,
"src": "23542:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 10023,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "23542:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "23489:69:8"
},
"returnParameters": {
"id": 10030,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 10027,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10038,
"src": "23580:7:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 10026,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "23580:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 10029,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10038,
"src": "23589:7:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 10028,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "23589:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "23579:18:8"
},
"scope": 10039,
"src": "23471:208:8",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
}
],
"scope": 10040,
"src": "1648:22034:8"
}
],
"src": "52:23632:8"
},
"legacyAST": {
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/ConverterBase.sol",
"exportedSymbols": {
"ConverterBase": [
10039
]
},
"id": 10040,
"license": "SEE LICENSE IN LICENSE",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 8979,
"literals": [
"solidity",
"0.6",
".12"
],
"nodeType": "PragmaDirective",
"src": "52:23:8"
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverter.sol",
"file": "./interfaces/IConverter.sol",
"id": 8980,
"nodeType": "ImportDirective",
"scope": 10040,
"sourceUnit": 13341,
"src": "77:37:8",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverterAnchor.sol",
"file": "./interfaces/IConverterAnchor.sol",
"id": 8981,
"nodeType": "ImportDirective",
"scope": 10040,
"sourceUnit": 13350,
"src": "116:43:8",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverterUpgrader.sol",
"file": "./interfaces/IConverterUpgrader.sol",
"id": 8982,
"nodeType": "ImportDirective",
"scope": 10040,
"sourceUnit": 13661,
"src": "161:45:8",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IBancorFormula.sol",
"file": "./interfaces/IBancorFormula.sol",
"id": 8983,
"nodeType": "ImportDirective",
"scope": 10040,
"sourceUnit": 13178,
"src": "208:41:8",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ContractRegistryClient.sol",
"file": "../utility/ContractRegistryClient.sol",
"id": 8984,
"nodeType": "ImportDirective",
"scope": 10040,
"sourceUnit": 21720,
"src": "251:47:8",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ReentrancyGuard.sol",
"file": "../utility/ReentrancyGuard.sol",
"id": 8985,
"nodeType": "ImportDirective",
"scope": 10040,
"sourceUnit": 22243,
"src": "300:40:8",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/SafeMath.sol",
"file": "../utility/SafeMath.sol",
"id": 8986,
"nodeType": "ImportDirective",
"scope": 10040,
"sourceUnit": 22355,
"src": "342:33:8",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/TokenHandler.sol",
"file": "../utility/TokenHandler.sol",
"id": 8987,
"nodeType": "ImportDirective",
"scope": 10040,
"sourceUnit": 22527,
"src": "377:37:8",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/TokenHolder.sol",
"file": "../utility/TokenHolder.sol",
"id": 8988,
"nodeType": "ImportDirective",
"scope": 10040,
"sourceUnit": 22576,
"src": "416:36:8",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/token/interfaces/IEtherToken.sol",
"file": "../token/interfaces/IEtherToken.sol",
"id": 8989,
"nodeType": "ImportDirective",
"scope": 10040,
"sourceUnit": 21154,
"src": "454:45:8",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/bancorx/interfaces/IBancorX.sol",
"file": "../bancorx/interfaces/IBancorX.sol",
"id": 8990,
"nodeType": "ImportDirective",
"scope": 10040,
"sourceUnit": 3552,
"src": "501:44:8",
"symbolAliases": [],
"unitAlias": ""
},
{
"abstract": true,
"baseContracts": [
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 8992,
"name": "IConverter",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 13340,
"src": "1683:10:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverter_$13340",
"typeString": "contract IConverter"
}
},
"id": 8993,
"nodeType": "InheritanceSpecifier",
"src": "1683:10:8"
},
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 8994,
"name": "TokenHandler",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22526,
"src": "1695:12:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_TokenHandler_$22526",
"typeString": "contract TokenHandler"
}
},
"id": 8995,
"nodeType": "InheritanceSpecifier",
"src": "1695:12:8"
},
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 8996,
"name": "TokenHolder",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22575,
"src": "1709:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_TokenHolder_$22575",
"typeString": "contract TokenHolder"
}
},
"id": 8997,
"nodeType": "InheritanceSpecifier",
"src": "1709:11:8"
},
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 8998,
"name": "ContractRegistryClient",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21719,
"src": "1722:22:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ContractRegistryClient_$21719",
"typeString": "contract ContractRegistryClient"
}
},
"id": 8999,
"nodeType": "InheritanceSpecifier",
"src": "1722:22:8"
},
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 9000,
"name": "ReentrancyGuard",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22242,
"src": "1746:15:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ReentrancyGuard_$22242",
"typeString": "contract ReentrancyGuard"
}
},
"id": 9001,
"nodeType": "InheritanceSpecifier",
"src": "1746:15:8"
}
],
"contractDependencies": [
13340,
21719,
21818,
22242,
22526,
22575,
22661,
22847,
22907
],
"contractKind": "contract",
"documentation": {
"id": 8991,
"nodeType": "StructuredDocumentation",
"src": "549:1097:8",
"text": " @dev ConverterBase\n The converter contains the main logic for conversions between different ERC20 tokens.\n It is also the upgradable part of the mechanism (note that upgrades are opt-in).\n The anchor must be set on construction and cannot be changed afterwards.\n Wrappers are provided for some of the anchor's functions, for easier access.\n Once the converter accepts ownership of the anchor, it becomes the anchor's sole controller\n and can execute any of its functions.\n To upgrade the converter, anchor ownership must be transferred to a new converter, along with\n any relevant data.\n Note that the converter can transfer anchor ownership to a new converter that\n doesn't allow upgrades anymore, for finalizing the relationship between the converter\n and the anchor.\n Converter types (defined as uint16 type) -\n 0 = liquid token converter\n 1 = liquidity pool v1 converter\n 2 = liquidity pool v2 converter\n Note that converters don't currently support tokens with transfer fees."
},
"fullyImplemented": false,
"id": 10039,
"linearizedBaseContracts": [
10039,
22242,
21719,
22575,
22661,
21818,
22526,
22907,
13340,
22847
],
"name": "ConverterBase",
"nodeType": "ContractDefinition",
"nodes": [
{
"id": 9004,
"libraryName": {
"contractScope": null,
"id": 9002,
"name": "SafeMath",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22354,
"src": "1775:8:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_SafeMath_$22354",
"typeString": "library SafeMath"
}
},
"nodeType": "UsingForDirective",
"src": "1769:27:8",
"typeName": {
"id": 9003,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1788:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
},
{
"constant": true,
"id": 9007,
"mutability": "constant",
"name": "PPM_RESOLUTION",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10039,
"src": "1804:49:8",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9005,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "1804:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": {
"argumentTypes": null,
"hexValue": "31303030303030",
"id": 9006,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1846:7:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_1000000_by_1",
"typeString": "int_const 1000000"
},
"value": "1000000"
},
"visibility": "internal"
},
{
"constant": true,
"id": 9012,
"mutability": "constant",
"name": "ETH_RESERVE_ADDRESS",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10039,
"src": "1860:107:8",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9008,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "1860:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "307845656565654565656545654565654565456545656545454565656565456565656565656545456545",
"id": 9010,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1924:42:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
"value": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
],
"id": 9009,
"name": "IERC20Token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21127,
"src": "1912:11:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_IERC20Token_$21127_$",
"typeString": "type(contract IERC20Token)"
}
},
"id": 9011,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1912:55:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"visibility": "internal"
},
{
"canonicalName": "ConverterBase.Reserve",
"id": 9023,
"members": [
{
"constant": false,
"id": 9014,
"mutability": "mutable",
"name": "balance",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9023,
"src": "2002:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9013,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2002:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9016,
"mutability": "mutable",
"name": "weight",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9023,
"src": "2050:13:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9015,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "2050:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9018,
"mutability": "mutable",
"name": "deprecated1",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9023,
"src": "2128:16:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 9017,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "2128:4:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9020,
"mutability": "mutable",
"name": "deprecated2",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9023,
"src": "2171:16:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 9019,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "2171:4:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9022,
"mutability": "mutable",
"name": "isSet",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9023,
"src": "2214:10:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 9021,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "2214:4:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"name": "Reserve",
"nodeType": "StructDefinition",
"scope": 10039,
"src": "1976:313:8",
"visibility": "public"
},
{
"constant": true,
"documentation": {
"id": 9024,
"nodeType": "StructuredDocumentation",
"src": "2297:40:8",
"text": " @dev version number"
},
"functionSelector": "54fd4d50",
"id": 9027,
"mutability": "constant",
"name": "version",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10039,
"src": "2343:35:8",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
},
"typeName": {
"id": 9025,
"name": "uint16",
"nodeType": "ElementaryTypeName",
"src": "2343:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
},
"value": {
"argumentTypes": null,
"hexValue": "3339",
"id": 9026,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2376:2:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_39_by_1",
"typeString": "int_const 39"
},
"value": "39"
},
"visibility": "public"
},
{
"baseFunctions": [
13195
],
"constant": false,
"functionSelector": "d3fb73b4",
"id": 9030,
"mutability": "mutable",
"name": "anchor",
"nodeType": "VariableDeclaration",
"overrides": {
"id": 9029,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "2411:8:8"
},
"scope": 10039,
"src": "2387:39:8",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
},
"typeName": {
"contractScope": null,
"id": 9028,
"name": "IConverterAnchor",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 13349,
"src": "2387:16:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"value": null,
"visibility": "public"
},
{
"baseFunctions": [
13233
],
"constant": false,
"functionSelector": "c45d3d92",
"id": 9033,
"mutability": "mutable",
"name": "conversionWhitelist",
"nodeType": "VariableDeclaration",
"overrides": {
"id": 9032,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "2491:8:8"
},
"scope": 10039,
"src": "2473:46:8",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
},
"typeName": {
"contractScope": null,
"id": 9031,
"name": "IWhitelist",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22917,
"src": "2473:10:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
}
},
"value": null,
"visibility": "public"
},
{
"constant": false,
"functionSelector": "d031370b",
"id": 9036,
"mutability": "mutable",
"name": "reserveTokens",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10039,
"src": "2613:34:8",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
"typeString": "contract IERC20Token[]"
},
"typeName": {
"baseType": {
"contractScope": null,
"id": 9034,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "2613:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"id": 9035,
"length": null,
"nodeType": "ArrayTypeName",
"src": "2613:13:8",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage_ptr",
"typeString": "contract IERC20Token[]"
}
},
"value": null,
"visibility": "public"
},
{
"constant": false,
"functionSelector": "d66bd524",
"id": 9040,
"mutability": "mutable",
"name": "reserves",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10039,
"src": "2754:48:8",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve)"
},
"typeName": {
"id": 9039,
"keyType": {
"contractScope": null,
"id": 9037,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "2763:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"nodeType": "Mapping",
"src": "2754:32:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve)"
},
"valueType": {
"contractScope": null,
"id": 9038,
"name": "Reserve",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 9023,
"src": "2778:7:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
"typeString": "struct ConverterBase.Reserve"
}
}
},
"value": null,
"visibility": "public"
},
{
"constant": false,
"functionSelector": "0c7d5cd8",
"id": 9043,
"mutability": "mutable",
"name": "reserveRatio",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10039,
"src": "2899:30:8",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9041,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "2899:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": {
"argumentTypes": null,
"hexValue": "30",
"id": 9042,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2928:1:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"visibility": "public"
},
{
"baseFunctions": [
13243
],
"constant": false,
"functionSelector": "94c275ad",
"id": 9047,
"mutability": "mutable",
"name": "maxConversionFee",
"nodeType": "VariableDeclaration",
"overrides": {
"id": 9045,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "3055:8:8"
},
"scope": 10039,
"src": "3041:43:8",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9044,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "3041:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": {
"argumentTypes": null,
"hexValue": "30",
"id": 9046,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3083:1:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"visibility": "public"
},
{
"baseFunctions": [
13238
],
"constant": false,
"functionSelector": "579cd3ca",
"id": 9051,
"mutability": "mutable",
"name": "conversionFee",
"nodeType": "VariableDeclaration",
"overrides": {
"id": 9049,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "3306:8:8"
},
"scope": 10039,
"src": "3292:40:8",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9048,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "3292:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": {
"argumentTypes": null,
"hexValue": "30",
"id": 9050,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3331:1:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"visibility": "public"
},
{
"constant": true,
"functionSelector": "bf754558",
"id": 9054,
"mutability": "constant",
"name": "conversionsEnabled",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10039,
"src": "3417:46:8",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 9052,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "3417:4:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": {
"argumentTypes": null,
"hexValue": "74727565",
"id": 9053,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3459:4:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "true"
},
"visibility": "public"
},
{
"anonymous": false,
"documentation": {
"id": 9055,
"nodeType": "StructuredDocumentation",
"src": "3514:260:8",
"text": " @dev triggered when the converter is activated\n @param _type converter type\n @param _anchor converter anchor\n @param _activated true if the converter was activated, false if it was deactivated"
},
"id": 9063,
"name": "Activation",
"nodeType": "EventDefinition",
"parameters": {
"id": 9062,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9057,
"indexed": true,
"mutability": "mutable",
"name": "_type",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9063,
"src": "3797:20:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
},
"typeName": {
"id": 9056,
"name": "uint16",
"nodeType": "ElementaryTypeName",
"src": "3797:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9059,
"indexed": true,
"mutability": "mutable",
"name": "_anchor",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9063,
"src": "3819:32:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
},
"typeName": {
"contractScope": null,
"id": 9058,
"name": "IConverterAnchor",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 13349,
"src": "3819:16:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9061,
"indexed": true,
"mutability": "mutable",
"name": "_activated",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9063,
"src": "3853:23:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 9060,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "3853:4:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "3796:81:8"
},
"src": "3780:98:8"
},
{
"anonymous": false,
"documentation": {
"id": 9064,
"nodeType": "StructuredDocumentation",
"src": "3886:447:8",
"text": " @dev triggered when a conversion between two tokens occurs\n @param _fromToken source ERC20 token\n @param _toToken target ERC20 token\n @param _trader wallet that initiated the trade\n @param _amount amount converted, in the source token\n @param _return amount returned, minus conversion fee\n @param _conversionFee conversion fee"
},
"id": 9078,
"name": "Conversion",
"nodeType": "EventDefinition",
"parameters": {
"id": 9077,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9066,
"indexed": true,
"mutability": "mutable",
"name": "_fromToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9078,
"src": "4366:30:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9065,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "4366:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9068,
"indexed": true,
"mutability": "mutable",
"name": "_toToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9078,
"src": "4407:28:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9067,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "4407:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9070,
"indexed": true,
"mutability": "mutable",
"name": "_trader",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9078,
"src": "4446:23:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 9069,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "4446:7:8",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9072,
"indexed": false,
"mutability": "mutable",
"name": "_amount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9078,
"src": "4480:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9071,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4480:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9074,
"indexed": false,
"mutability": "mutable",
"name": "_return",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9078,
"src": "4506:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9073,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4506:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9076,
"indexed": false,
"mutability": "mutable",
"name": "_conversionFee",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9078,
"src": "4532:21:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_int256",
"typeString": "int256"
},
"typeName": {
"id": 9075,
"name": "int256",
"nodeType": "ElementaryTypeName",
"src": "4532:6:8",
"typeDescriptions": {
"typeIdentifier": "t_int256",
"typeString": "int256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "4355:205:8"
},
"src": "4339:222:8"
},
{
"anonymous": false,
"documentation": {
"id": 9079,
"nodeType": "StructuredDocumentation",
"src": "4569:562:8",
"text": " @dev triggered when the rate between two tokens in the converter changes\n note that the event might be dispatched for rate updates between any two tokens in the converter\n note that prior to version 28, you should use the 'PriceDataUpdate' event instead\n @param _token1 address of the first token\n @param _token2 address of the second token\n @param _rateN rate of 1 unit of `_token1` in `_token2` (numerator)\n @param _rateD rate of 1 unit of `_token1` in `_token2` (denominator)"
},
"id": 9089,
"name": "TokenRateUpdate",
"nodeType": "EventDefinition",
"parameters": {
"id": 9088,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9081,
"indexed": true,
"mutability": "mutable",
"name": "_token1",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9089,
"src": "5169:27:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9080,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "5169:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9083,
"indexed": true,
"mutability": "mutable",
"name": "_token2",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9089,
"src": "5207:27:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9082,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "5207:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9085,
"indexed": false,
"mutability": "mutable",
"name": "_rateN",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9089,
"src": "5245:14:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9084,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5245:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9087,
"indexed": false,
"mutability": "mutable",
"name": "_rateD",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9089,
"src": "5270:14:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9086,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5270:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "5158:133:8"
},
"src": "5137:155:8"
},
{
"anonymous": false,
"documentation": {
"id": 9090,
"nodeType": "StructuredDocumentation",
"src": "5300:220:8",
"text": " @dev triggered when the conversion fee is updated\n @param _prevFee previous fee percentage, represented in ppm\n @param _newFee new fee percentage, represented in ppm"
},
"id": 9096,
"name": "ConversionFeeUpdate",
"nodeType": "EventDefinition",
"parameters": {
"id": 9095,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9092,
"indexed": false,
"mutability": "mutable",
"name": "_prevFee",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9096,
"src": "5552:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9091,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "5552:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9094,
"indexed": false,
"mutability": "mutable",
"name": "_newFee",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9096,
"src": "5569:14:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9093,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "5569:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "5551:33:8"
},
"src": "5526:59:8"
},
{
"body": {
"id": 9126,
"nodeType": "Block",
"src": "6192:82:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 9120,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 9118,
"name": "anchor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9030,
"src": "6203:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 9119,
"name": "_anchor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9099,
"src": "6212:7:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"src": "6203:16:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"id": 9121,
"nodeType": "ExpressionStatement",
"src": "6203:16:8"
},
{
"expression": {
"argumentTypes": null,
"id": 9124,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 9122,
"name": "maxConversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9047,
"src": "6230:16:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 9123,
"name": "_maxConversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9103,
"src": "6249:17:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"src": "6230:36:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"id": 9125,
"nodeType": "ExpressionStatement",
"src": "6230:36:8"
}
]
},
"documentation": {
"id": 9097,
"nodeType": "StructuredDocumentation",
"src": "5593:313:8",
"text": " @dev used by sub-contracts to initialize a new converter\n @param _anchor anchor governed by the converter\n @param _registry address of a contract registry contract\n @param _maxConversionFee maximum conversion fee, represented in ppm"
},
"id": 9127,
"implemented": true,
"kind": "constructor",
"modifiers": [
{
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9108,
"name": "_anchor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9099,
"src": "6069:7:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
],
"id": 9107,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "6061:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9106,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "6061:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9109,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6061:16:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"id": 9110,
"modifierName": {
"argumentTypes": null,
"id": 9105,
"name": "validAddress",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22618,
"src": "6048:12:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_address_$",
"typeString": "modifier (address)"
}
},
"nodeType": "ModifierInvocation",
"src": "6048:30:8"
},
{
"arguments": [
{
"argumentTypes": null,
"id": 9112,
"name": "_registry",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9101,
"src": "6111:9:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IContractRegistry_$22831",
"typeString": "contract IContractRegistry"
}
}
],
"id": 9113,
"modifierName": {
"argumentTypes": null,
"id": 9111,
"name": "ContractRegistryClient",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21719,
"src": "6088:22:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_ContractRegistryClient_$21719_$",
"typeString": "type(contract ContractRegistryClient)"
}
},
"nodeType": "ModifierInvocation",
"src": "6088:33:8"
},
{
"arguments": [
{
"argumentTypes": null,
"id": 9115,
"name": "_maxConversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9103,
"src": "6168:17:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
}
],
"id": 9116,
"modifierName": {
"argumentTypes": null,
"id": 9114,
"name": "validConversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9196,
"src": "6149:18:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_uint32_$",
"typeString": "modifier (uint32)"
}
},
"nodeType": "ModifierInvocation",
"src": "6149:37:8"
}
],
"name": "",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9104,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9099,
"mutability": "mutable",
"name": "_anchor",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9127,
"src": "5934:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
},
"typeName": {
"contractScope": null,
"id": 9098,
"name": "IConverterAnchor",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 13349,
"src": "5934:16:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9101,
"mutability": "mutable",
"name": "_registry",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9127,
"src": "5969:27:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IContractRegistry_$22831",
"typeString": "contract IContractRegistry"
},
"typeName": {
"contractScope": null,
"id": 9100,
"name": "IContractRegistry",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22831,
"src": "5969:17:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IContractRegistry_$22831",
"typeString": "contract IContractRegistry"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9103,
"mutability": "mutable",
"name": "_maxConversionFee",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9127,
"src": "6007:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9102,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "6007:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "5923:115:8"
},
"returnParameters": {
"id": 9117,
"nodeType": "ParameterList",
"parameters": [],
"src": "6192:0:8"
},
"scope": 10039,
"src": "5912:362:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9133,
"nodeType": "Block",
"src": "6345:40:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9129,
"name": "_active",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9144,
"src": "6356:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$__$",
"typeString": "function () view"
}
},
"id": 9130,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6356:9:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9131,
"nodeType": "ExpressionStatement",
"src": "6356:9:8"
},
{
"id": 9132,
"nodeType": "PlaceholderStatement",
"src": "6376:1:8"
}
]
},
"documentation": null,
"id": 9134,
"name": "active",
"nodeType": "ModifierDefinition",
"overrides": null,
"parameters": {
"id": 9128,
"nodeType": "ParameterList",
"parameters": [],
"src": "6342:2:8"
},
"src": "6327:58:8",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9143,
"nodeType": "Block",
"src": "6473:54:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9138,
"name": "isActive",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9362,
"src": "6492:8:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
"typeString": "function () view returns (bool)"
}
},
"id": 9139,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6492:10:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f494e414354495645",
"id": 9140,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6504:14:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_a22dd8039fb80c8642cf17389b806c873aa9fbdbf3f2bd8746d8ce373ef50f9e",
"typeString": "literal_string \"ERR_INACTIVE\""
},
"value": "ERR_INACTIVE"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_a22dd8039fb80c8642cf17389b806c873aa9fbdbf3f2bd8746d8ce373ef50f9e",
"typeString": "literal_string \"ERR_INACTIVE\""
}
],
"id": 9137,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "6484:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9141,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6484:35:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9142,
"nodeType": "ExpressionStatement",
"src": "6484:35:8"
}
]
},
"documentation": null,
"id": 9144,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_active",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9135,
"nodeType": "ParameterList",
"parameters": [],
"src": "6456:2:8"
},
"returnParameters": {
"id": 9136,
"nodeType": "ParameterList",
"parameters": [],
"src": "6473:0:8"
},
"scope": 10039,
"src": "6440:87:8",
"stateMutability": "view",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9150,
"nodeType": "Block",
"src": "6604:42:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9146,
"name": "_inactive",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9162,
"src": "6615:9:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$__$",
"typeString": "function () view"
}
},
"id": 9147,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6615:11:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9148,
"nodeType": "ExpressionStatement",
"src": "6615:11:8"
},
{
"id": 9149,
"nodeType": "PlaceholderStatement",
"src": "6637:1:8"
}
]
},
"documentation": null,
"id": 9151,
"name": "inactive",
"nodeType": "ModifierDefinition",
"overrides": null,
"parameters": {
"id": 9145,
"nodeType": "ParameterList",
"parameters": [],
"src": "6601:2:8"
},
"src": "6584:62:8",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9161,
"nodeType": "Block",
"src": "6736:53:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9157,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "6755:11:8",
"subExpression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9155,
"name": "isActive",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9362,
"src": "6756:8:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
"typeString": "function () view returns (bool)"
}
},
"id": 9156,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6756:10:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f414354495645",
"id": 9158,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6768:12:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_181d3d32638945611c2cb46b623de141c5e74a32dcd850864f64837aa849ee3f",
"typeString": "literal_string \"ERR_ACTIVE\""
},
"value": "ERR_ACTIVE"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_181d3d32638945611c2cb46b623de141c5e74a32dcd850864f64837aa849ee3f",
"typeString": "literal_string \"ERR_ACTIVE\""
}
],
"id": 9154,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "6747:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9159,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6747:34:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9160,
"nodeType": "ExpressionStatement",
"src": "6747:34:8"
}
]
},
"documentation": null,
"id": 9162,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_inactive",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9152,
"nodeType": "ParameterList",
"parameters": [],
"src": "6719:2:8"
},
"returnParameters": {
"id": 9153,
"nodeType": "ParameterList",
"parameters": [],
"src": "6736:0:8"
},
"scope": 10039,
"src": "6701:88:8",
"stateMutability": "view",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9171,
"nodeType": "Block",
"src": "6948:54:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9167,
"name": "_address",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9164,
"src": "6973:8:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 9166,
"name": "_validReserve",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9186,
"src": "6959:13:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21127_$returns$__$",
"typeString": "function (contract IERC20Token) view"
}
},
"id": 9168,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6959:23:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9169,
"nodeType": "ExpressionStatement",
"src": "6959:23:8"
},
{
"id": 9170,
"nodeType": "PlaceholderStatement",
"src": "6993:1:8"
}
]
},
"documentation": null,
"id": 9172,
"name": "validReserve",
"nodeType": "ModifierDefinition",
"overrides": null,
"parameters": {
"id": 9165,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9164,
"mutability": "mutable",
"name": "_address",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9172,
"src": "6926:20:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9163,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "6926:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "6925:22:8"
},
"src": "6904:98:8",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9185,
"nodeType": "Block",
"src": "7116:75:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9178,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "7135:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9180,
"indexExpression": {
"argumentTypes": null,
"id": 9179,
"name": "_address",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9174,
"src": "7144:8:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "7135:18:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"id": 9181,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "isSet",
"nodeType": "MemberAccess",
"referencedDeclaration": 9022,
"src": "7135:24:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f494e56414c49445f52455345525645",
"id": 9182,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7161:21:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
"typeString": "literal_string \"ERR_INVALID_RESERVE\""
},
"value": "ERR_INVALID_RESERVE"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
"typeString": "literal_string \"ERR_INVALID_RESERVE\""
}
],
"id": 9177,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "7127:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9183,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "7127:56:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9184,
"nodeType": "ExpressionStatement",
"src": "7127:56:8"
}
]
},
"documentation": null,
"id": 9186,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_validReserve",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9175,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9174,
"mutability": "mutable",
"name": "_address",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9186,
"src": "7080:20:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9173,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "7080:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "7079:22:8"
},
"returnParameters": {
"id": 9176,
"nodeType": "ParameterList",
"parameters": [],
"src": "7116:0:8"
},
"scope": 10039,
"src": "7057:134:8",
"stateMutability": "view",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9195,
"nodeType": "Block",
"src": "7283:66:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9191,
"name": "_conversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9188,
"src": "7314:14:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
],
"id": 9190,
"name": "_validConversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9209,
"src": "7294:19:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint32_$returns$__$",
"typeString": "function (uint32) pure"
}
},
"id": 9192,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "7294:35:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9193,
"nodeType": "ExpressionStatement",
"src": "7294:35:8"
},
{
"id": 9194,
"nodeType": "PlaceholderStatement",
"src": "7340:1:8"
}
]
},
"documentation": null,
"id": 9196,
"name": "validConversionFee",
"nodeType": "ModifierDefinition",
"overrides": null,
"parameters": {
"id": 9189,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9188,
"mutability": "mutable",
"name": "_conversionFee",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9196,
"src": "7260:21:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9187,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "7260:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "7259:23:8"
},
"src": "7232:117:8",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9208,
"nodeType": "Block",
"src": "7470:90:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"id": 9204,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9202,
"name": "_conversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9198,
"src": "7489:14:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"nodeType": "BinaryOperation",
"operator": "<=",
"rightExpression": {
"argumentTypes": null,
"id": 9203,
"name": "PPM_RESOLUTION",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9007,
"src": "7507:14:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"src": "7489:32:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f494e56414c49445f434f4e56455253494f4e5f464545",
"id": 9205,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7523:28:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_ae729833ea0b2cfd1b35fa1d075ae330e76860b5ab276fa04bde88b85e5c4d00",
"typeString": "literal_string \"ERR_INVALID_CONVERSION_FEE\""
},
"value": "ERR_INVALID_CONVERSION_FEE"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_ae729833ea0b2cfd1b35fa1d075ae330e76860b5ab276fa04bde88b85e5c4d00",
"typeString": "literal_string \"ERR_INVALID_CONVERSION_FEE\""
}
],
"id": 9201,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "7481:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9206,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "7481:71:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9207,
"nodeType": "ExpressionStatement",
"src": "7481:71:8"
}
]
},
"documentation": null,
"id": 9209,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_validConversionFee",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9199,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9198,
"mutability": "mutable",
"name": "_conversionFee",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9209,
"src": "7433:21:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9197,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "7433:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "7432:23:8"
},
"returnParameters": {
"id": 9200,
"nodeType": "ParameterList",
"parameters": [],
"src": "7470:0:8"
},
"scope": 10039,
"src": "7404:156:8",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9218,
"nodeType": "Block",
"src": "7645:59:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9214,
"name": "_weight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9211,
"src": "7676:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
],
"id": 9213,
"name": "_validReserveWeight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9236,
"src": "7656:19:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint32_$returns$__$",
"typeString": "function (uint32) pure"
}
},
"id": 9215,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "7656:28:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9216,
"nodeType": "ExpressionStatement",
"src": "7656:28:8"
},
{
"id": 9217,
"nodeType": "PlaceholderStatement",
"src": "7695:1:8"
}
]
},
"documentation": null,
"id": 9219,
"name": "validReserveWeight",
"nodeType": "ModifierDefinition",
"overrides": null,
"parameters": {
"id": 9212,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9211,
"mutability": "mutable",
"name": "_weight",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9219,
"src": "7629:14:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9210,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "7629:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "7628:16:8"
},
"src": "7601:103:8",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9235,
"nodeType": "Block",
"src": "7818:98:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 9231,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"id": 9227,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9225,
"name": "_weight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9221,
"src": "7837:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"argumentTypes": null,
"hexValue": "30",
"id": 9226,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7847:1:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "7837:11:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "&&",
"rightExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"id": 9230,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9228,
"name": "_weight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9221,
"src": "7852:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"nodeType": "BinaryOperation",
"operator": "<=",
"rightExpression": {
"argumentTypes": null,
"id": 9229,
"name": "PPM_RESOLUTION",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9007,
"src": "7863:14:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"src": "7852:25:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "7837:40:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f494e56414c49445f524553455256455f574549474854",
"id": 9232,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7879:28:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_e4e4c57eb13b428a7fc031dc1f6f2c3e13b61f7d7b93994b2d17f8dc75658178",
"typeString": "literal_string \"ERR_INVALID_RESERVE_WEIGHT\""
},
"value": "ERR_INVALID_RESERVE_WEIGHT"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_e4e4c57eb13b428a7fc031dc1f6f2c3e13b61f7d7b93994b2d17f8dc75658178",
"typeString": "literal_string \"ERR_INVALID_RESERVE_WEIGHT\""
}
],
"id": 9224,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "7829:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9233,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "7829:79:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9234,
"nodeType": "ExpressionStatement",
"src": "7829:79:8"
}
]
},
"documentation": null,
"id": 9236,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_validReserveWeight",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9222,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9221,
"mutability": "mutable",
"name": "_weight",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9236,
"src": "7788:14:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9220,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "7788:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "7787:16:8"
},
"returnParameters": {
"id": 9223,
"nodeType": "ParameterList",
"parameters": [],
"src": "7818:0:8"
},
"scope": 10039,
"src": "7759:157:8",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"baseFunctions": [
13190
],
"body": null,
"documentation": null,
"functionSelector": "3e8ff43f",
"id": 9242,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "converterType",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9238,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "8009:8:8"
},
"parameters": {
"id": 9237,
"nodeType": "ParameterList",
"parameters": [],
"src": "7986:2:8"
},
"returnParameters": {
"id": 9241,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9240,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9242,
"src": "8027:6:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
},
"typeName": {
"id": 9239,
"name": "uint16",
"nodeType": "ElementaryTypeName",
"src": "8027:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "8026:8:8"
},
"scope": 10039,
"src": "7964:71:8",
"stateMutability": "pure",
"virtual": true,
"visibility": "public"
},
{
"baseFunctions": [
13213
],
"body": null,
"documentation": null,
"functionSelector": "af94b8d8",
"id": 9256,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "targetAmountAndFee",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9250,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "8236:8:8"
},
"parameters": {
"id": 9249,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9244,
"mutability": "mutable",
"name": "_sourceToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9256,
"src": "8111:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9243,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "8111:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9246,
"mutability": "mutable",
"name": "_targetToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9256,
"src": "8137:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9245,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "8137:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9248,
"mutability": "mutable",
"name": "_amount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9256,
"src": "8163:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9247,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "8163:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "8110:69:8"
},
"returnParameters": {
"id": 9255,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9252,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9256,
"src": "8263:7:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9251,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "8263:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9254,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9256,
"src": "8272:7:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9253,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "8272:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "8262:18:8"
},
"scope": 10039,
"src": "8083:198:8",
"stateMutability": "view",
"virtual": true,
"visibility": "public"
},
{
"baseFunctions": [
13253
],
"body": {
"id": 9269,
"nodeType": "Block",
"src": "8435:281:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9262,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "8454:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9264,
"indexExpression": {
"argumentTypes": null,
"id": 9263,
"name": "ETH_RESERVE_ADDRESS",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9012,
"src": "8463:19:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "8454:29:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"id": 9265,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "isSet",
"nodeType": "MemberAccess",
"referencedDeclaration": 9022,
"src": "8454:35:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f494e56414c49445f52455345525645",
"id": 9266,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8491:21:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
"typeString": "literal_string \"ERR_INVALID_RESERVE\""
},
"value": "ERR_INVALID_RESERVE"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
"typeString": "literal_string \"ERR_INVALID_RESERVE\""
}
],
"id": 9261,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "8446:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9267,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "8446:67:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9268,
"nodeType": "ExpressionStatement",
"src": "8446:67:8"
}
]
},
"documentation": {
"id": 9257,
"nodeType": "StructuredDocumentation",
"src": "8289:104:8",
"text": " @dev deposits ether\n can only be called if the converter has an ETH reserve"
},
"id": 9270,
"implemented": true,
"kind": "receive",
"modifiers": [],
"name": "",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9259,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "8418:8:8"
},
"parameters": {
"id": 9258,
"nodeType": "ParameterList",
"parameters": [],
"src": "8406:2:8"
},
"returnParameters": {
"id": 9260,
"nodeType": "ParameterList",
"parameters": [],
"src": "8435:0:8"
},
"scope": 10039,
"src": "8399:317:8",
"stateMutability": "payable",
"virtual": false,
"visibility": "external"
},
{
"baseFunctions": [
13285
],
"body": {
"id": 9315,
"nodeType": "Block",
"src": "9248:392:8",
"statements": [
{
"assignments": [
9285
],
"declarations": [
{
"constant": false,
"id": 9285,
"mutability": "mutable",
"name": "converterUpgrader",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9315,
"src": "9259:25:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 9284,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "9259:7:8",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 9289,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9287,
"name": "CONVERTER_UPGRADER",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21542,
"src": "9297:18:8",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
],
"id": 9286,
"name": "addressOf",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21718,
"src": "9287:9:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
"typeString": "function (bytes32) view returns (address)"
}
},
"id": 9288,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "9287:29:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "9259:57:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 9297,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9293,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "9430:11:8",
"subExpression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9291,
"name": "isActive",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9362,
"src": "9431:8:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
"typeString": "function () view returns (bool)"
}
},
"id": 9292,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "9431:10:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "||",
"rightExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 9296,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9294,
"name": "owner",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21728,
"src": "9445:5:8",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"id": 9295,
"name": "converterUpgrader",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9285,
"src": "9454:17:8",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"src": "9445:26:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "9430:41:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4143434553535f44454e494544",
"id": 9298,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9473:19:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
"typeString": "literal_string \"ERR_ACCESS_DENIED\""
},
"value": "ERR_ACCESS_DENIED"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
"typeString": "literal_string \"ERR_ACCESS_DENIED\""
}
],
"id": 9290,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "9422:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9299,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "9422:71:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9300,
"nodeType": "ExpressionStatement",
"src": "9422:71:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9306,
"name": "this",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -28,
"src": "9525:4:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ConverterBase_$10039",
"typeString": "contract ConverterBase"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_ConverterBase_$10039",
"typeString": "contract ConverterBase"
}
],
"id": 9305,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "9517:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9304,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "9517:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9307,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "9517:13:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"id": 9308,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "9517:21:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 9301,
"name": "_to",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9273,
"src": "9504:3:8",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"id": 9303,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "transfer",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "9504:12:8",
"typeDescriptions": {
"typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
"typeString": "function (uint256)"
}
},
"id": 9309,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "9504:35:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9310,
"nodeType": "ExpressionStatement",
"src": "9504:35:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9312,
"name": "ETH_RESERVE_ADDRESS",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9012,
"src": "9612:19:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 9311,
"name": "syncReserveBalance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9844,
"src": "9593:18:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21127_$returns$__$",
"typeString": "function (contract IERC20Token)"
}
},
"id": 9313,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "9593:39:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9314,
"nodeType": "ExpressionStatement",
"src": "9593:39:8"
}
]
},
"documentation": {
"id": 9271,
"nodeType": "StructuredDocumentation",
"src": "8724:356:8",
"text": " @dev withdraws ether\n can only be called by the owner if the converter is inactive or by upgrader contract\n can only be called after the upgrader contract has accepted the ownership of this contract\n can only be called if the converter has an ETH reserve\n @param _to address to send the ETH to"
},
"functionSelector": "690d8320",
"id": 9316,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9277,
"modifierName": {
"argumentTypes": null,
"id": 9276,
"name": "protected",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22231,
"src": "9171:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "9171:9:8"
},
{
"arguments": null,
"id": 9279,
"modifierName": {
"argumentTypes": null,
"id": 9278,
"name": "ownerOnly",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21754,
"src": "9190:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "9190:9:8"
},
{
"arguments": [
{
"argumentTypes": null,
"id": 9281,
"name": "ETH_RESERVE_ADDRESS",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9012,
"src": "9222:19:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"id": 9282,
"modifierName": {
"argumentTypes": null,
"id": 9280,
"name": "validReserve",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9172,
"src": "9209:12:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21127_$",
"typeString": "modifier (contract IERC20Token)"
}
},
"nodeType": "ModifierInvocation",
"src": "9209:33:8"
}
],
"name": "withdrawETH",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9275,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "9153:8:8"
},
"parameters": {
"id": 9274,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9273,
"mutability": "mutable",
"name": "_to",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9316,
"src": "9107:19:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
"typeName": {
"id": 9272,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "9107:15:8",
"stateMutability": "payable",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "9106:21:8"
},
"returnParameters": {
"id": 9283,
"nodeType": "ParameterList",
"parameters": [],
"src": "9248:0:8"
},
"scope": 10039,
"src": "9086:554:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"body": {
"id": 9324,
"nodeType": "Block",
"src": "9867:30:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"hexValue": "74727565",
"id": 9322,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9885:4:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "true"
},
"functionReturnParameters": 9321,
"id": 9323,
"nodeType": "Return",
"src": "9878:11:8"
}
]
},
"documentation": {
"id": 9317,
"nodeType": "StructuredDocumentation",
"src": "9648:161:8",
"text": " @dev checks whether or not the converter version is 28 or higher\n @return true, since the converter version is 28 or higher"
},
"functionSelector": "d260529c",
"id": 9325,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "isV28OrHigher",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9318,
"nodeType": "ParameterList",
"parameters": [],
"src": "9837:2:8"
},
"returnParameters": {
"id": 9321,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9320,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9325,
"src": "9861:4:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 9319,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "9861:4:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "9860:6:8"
},
"scope": 10039,
"src": "9815:82:8",
"stateMutability": "pure",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13271
],
"body": {
"id": 9344,
"nodeType": "Block",
"src": "10419:51:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 9342,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 9340,
"name": "conversionWhitelist",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9033,
"src": "10430:19:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 9341,
"name": "_whitelist",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9328,
"src": "10452:10:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
}
},
"src": "10430:32:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
}
},
"id": 9343,
"nodeType": "ExpressionStatement",
"src": "10430:32:8"
}
]
},
"documentation": {
"id": 9326,
"nodeType": "StructuredDocumentation",
"src": "9905:357:8",
"text": " @dev allows the owner to update & enable the conversion whitelist contract address\n when set, only addresses that are whitelisted are actually allowed to use the converter\n note that the whitelist check is actually done by the BancorNetwork contract\n @param _whitelist address of a whitelist contract"
},
"functionSelector": "4af80f0e",
"id": 9345,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9332,
"modifierName": {
"argumentTypes": null,
"id": 9331,
"name": "ownerOnly",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21754,
"src": "10366:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "10366:9:8"
},
{
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9336,
"name": "_whitelist",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9328,
"src": "10401:10:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
}
],
"id": 9335,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "10393:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9334,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "10393:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9337,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "10393:19:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"id": 9338,
"modifierName": {
"argumentTypes": null,
"id": 9333,
"name": "notThis",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22644,
"src": "10385:7:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_address_$",
"typeString": "modifier (address)"
}
},
"nodeType": "ModifierInvocation",
"src": "10385:28:8"
}
],
"name": "setConversionWhitelist",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9330,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "10348:8:8"
},
"parameters": {
"id": 9329,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9328,
"mutability": "mutable",
"name": "_whitelist",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9345,
"src": "10300:21:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
},
"typeName": {
"contractScope": null,
"id": 9327,
"name": "IWhitelist",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22917,
"src": "10300:10:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "10299:23:8"
},
"returnParameters": {
"id": 9339,
"nodeType": "ParameterList",
"parameters": [],
"src": "10419:0:8"
},
"scope": 10039,
"src": "10268:202:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13200
],
"body": {
"id": 9361,
"nodeType": "Block",
"src": "10705:57:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 9359,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"expression": {
"argumentTypes": null,
"id": 9352,
"name": "anchor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9030,
"src": "10723:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"id": 9353,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "owner",
"nodeType": "MemberAccess",
"referencedDeclaration": 22838,
"src": "10723:12:8",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
"typeString": "function () view external returns (address)"
}
},
"id": 9354,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "10723:14:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9357,
"name": "this",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -28,
"src": "10749:4:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ConverterBase_$10039",
"typeString": "contract ConverterBase"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_ConverterBase_$10039",
"typeString": "contract ConverterBase"
}
],
"id": 9356,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "10741:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9355,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "10741:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9358,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "10741:13:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "10723:31:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"functionReturnParameters": 9351,
"id": 9360,
"nodeType": "Return",
"src": "10716:38:8"
}
]
},
"documentation": {
"id": 9346,
"nodeType": "StructuredDocumentation",
"src": "10478:157:8",
"text": " @dev returns true if the converter is active, false otherwise\n @return true if the converter is active, false otherwise"
},
"functionSelector": "22f3e2d4",
"id": 9362,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "isActive",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9348,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "10681:8:8"
},
"parameters": {
"id": 9347,
"nodeType": "ParameterList",
"parameters": [],
"src": "10658:2:8"
},
"returnParameters": {
"id": 9351,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9350,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9362,
"src": "10699:4:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 9349,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "10699:4:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "10698:6:8"
},
"scope": 10039,
"src": "10641:121:8",
"stateMutability": "view",
"virtual": true,
"visibility": "public"
},
{
"baseFunctions": [
13258
],
"body": {
"id": 9380,
"nodeType": "Block",
"src": "11256:54:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9377,
"name": "_newOwner",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9365,
"src": "11292:9:8",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"expression": {
"argumentTypes": null,
"id": 9374,
"name": "anchor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9030,
"src": "11267:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"id": 9376,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "transferOwnership",
"nodeType": "MemberAccess",
"referencedDeclaration": 22843,
"src": "11267:24:8",
"typeDescriptions": {
"typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
"typeString": "function (address) external"
}
},
"id": 9378,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "11267:35:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9379,
"nodeType": "ExpressionStatement",
"src": "11267:35:8"
}
]
},
"documentation": {
"id": 9363,
"nodeType": "StructuredDocumentation",
"src": "10770:336:8",
"text": " @dev transfers the anchor ownership\n the new owner needs to accept the transfer\n can only be called by the converter upgrder while the upgrader is the owner\n note that prior to version 28, you should use 'transferAnchorOwnership' instead\n @param _newOwner new token owner"
},
"functionSelector": "67b6d57c",
"id": 9381,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9369,
"modifierName": {
"argumentTypes": null,
"id": 9368,
"name": "ownerOnly",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21754,
"src": "11207:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "11207:9:8"
},
{
"arguments": [
{
"argumentTypes": null,
"id": 9371,
"name": "CONVERTER_UPGRADER",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21542,
"src": "11231:18:8",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
}
],
"id": 9372,
"modifierName": {
"argumentTypes": null,
"id": 9370,
"name": "only",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21577,
"src": "11226:4:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_bytes32_$",
"typeString": "modifier (bytes32)"
}
},
"nodeType": "ModifierInvocation",
"src": "11226:24:8"
}
],
"name": "transferAnchorOwnership",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9367,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "11189:8:8"
},
"parameters": {
"id": 9366,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9365,
"mutability": "mutable",
"name": "_newOwner",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9381,
"src": "11145:17:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 9364,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "11145:7:8",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "11144:19:8"
},
"returnParameters": {
"id": 9373,
"nodeType": "ParameterList",
"parameters": [],
"src": "11256:0:8"
},
"scope": 10039,
"src": "11112:198:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13261
],
"body": {
"id": 9404,
"nodeType": "Block",
"src": "11700:209:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
},
"id": 9392,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9389,
"name": "reserveTokenCount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9561,
"src": "11781:17:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_uint16_$",
"typeString": "function () view returns (uint16)"
}
},
"id": 9390,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "11781:19:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"argumentTypes": null,
"hexValue": "30",
"id": 9391,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11803:1:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "11781:23:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f494e56414c49445f524553455256455f434f554e54",
"id": 9393,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11806:27:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_ed94f14d8dcbb423a259b4072978fc0c494c6af1fea066a19023afb1a76ac87f",
"typeString": "literal_string \"ERR_INVALID_RESERVE_COUNT\""
},
"value": "ERR_INVALID_RESERVE_COUNT"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_ed94f14d8dcbb423a259b4072978fc0c494c6af1fea066a19023afb1a76ac87f",
"typeString": "literal_string \"ERR_INVALID_RESERVE_COUNT\""
}
],
"id": 9388,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "11773:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9394,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "11773:61:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9395,
"nodeType": "ExpressionStatement",
"src": "11773:61:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"expression": {
"argumentTypes": null,
"id": 9396,
"name": "anchor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9030,
"src": "11845:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"id": 9398,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "acceptOwnership",
"nodeType": "MemberAccess",
"referencedDeclaration": 22846,
"src": "11845:22:8",
"typeDescriptions": {
"typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
"typeString": "function () external"
}
},
"id": 9399,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "11845:24:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9400,
"nodeType": "ExpressionStatement",
"src": "11845:24:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9401,
"name": "syncReserveBalances",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9871,
"src": "11880:19:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
"typeString": "function ()"
}
},
"id": 9402,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "11880:21:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9403,
"nodeType": "ExpressionStatement",
"src": "11880:21:8"
}
]
},
"documentation": {
"id": 9382,
"nodeType": "StructuredDocumentation",
"src": "11318:309:8",
"text": " @dev accepts ownership of the anchor after an ownership transfer\n most converters are also activated as soon as they accept the anchor ownership\n can only be called by the contract owner\n note that prior to version 28, you should use 'acceptTokenOwnership' instead"
},
"functionSelector": "cdc91c69",
"id": 9405,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9386,
"modifierName": {
"argumentTypes": null,
"id": 9385,
"name": "ownerOnly",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21754,
"src": "11690:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "11690:9:8"
}
],
"name": "acceptAnchorOwnership",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9384,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "11681:8:8"
},
"parameters": {
"id": 9383,
"nodeType": "ParameterList",
"parameters": [],
"src": "11663:2:8"
},
"returnParameters": {
"id": 9387,
"nodeType": "ParameterList",
"parameters": [],
"src": "11700:0:8"
},
"scope": 10039,
"src": "11633:276:8",
"stateMutability": "nonpayable",
"virtual": true,
"visibility": "public"
},
{
"body": {
"id": 9425,
"nodeType": "Block",
"src": "12315:62:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9420,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9408,
"src": "12348:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
{
"argumentTypes": null,
"id": 9421,
"name": "_to",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9410,
"src": "12356:3:8",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 9422,
"name": "_amount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9412,
"src": "12361:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 9417,
"name": "anchor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9030,
"src": "12326:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"id": 9419,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "withdrawTokens",
"nodeType": "MemberAccess",
"referencedDeclaration": 22906,
"src": "12326:21:8",
"typeDescriptions": {
"typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20Token_$21127_$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (contract IERC20Token,address,uint256) external"
}
},
"id": 9423,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "12326:43:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9424,
"nodeType": "ExpressionStatement",
"src": "12326:43:8"
}
]
},
"documentation": {
"id": 9406,
"nodeType": "StructuredDocumentation",
"src": "11917:297:8",
"text": " @dev withdraws tokens held by the anchor and sends them to an account\n can only be called by the owner\n @param _token ERC20 token contract address\n @param _to account to receive the new amount\n @param _amount amount to withdraw"
},
"functionSelector": "395900d4",
"id": 9426,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9415,
"modifierName": {
"argumentTypes": null,
"id": 9414,
"name": "ownerOnly",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21754,
"src": "12305:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "12305:9:8"
}
],
"name": "withdrawFromAnchor",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9413,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9408,
"mutability": "mutable",
"name": "_token",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9426,
"src": "12248:18:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9407,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "12248:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9410,
"mutability": "mutable",
"name": "_to",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9426,
"src": "12268:11:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 9409,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "12268:7:8",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9412,
"mutability": "mutable",
"name": "_amount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9426,
"src": "12281:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9411,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "12281:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "12247:50:8"
},
"returnParameters": {
"id": 9416,
"nodeType": "ParameterList",
"parameters": [],
"src": "12315:0:8"
},
"scope": 10039,
"src": "12220:157:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13266
],
"body": {
"id": 9451,
"nodeType": "Block",
"src": "12655:199:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"id": 9438,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9436,
"name": "_conversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9429,
"src": "12674:14:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"nodeType": "BinaryOperation",
"operator": "<=",
"rightExpression": {
"argumentTypes": null,
"id": 9437,
"name": "maxConversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9047,
"src": "12692:16:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"src": "12674:34:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f494e56414c49445f434f4e56455253494f4e5f464545",
"id": 9439,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "12710:28:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_ae729833ea0b2cfd1b35fa1d075ae330e76860b5ab276fa04bde88b85e5c4d00",
"typeString": "literal_string \"ERR_INVALID_CONVERSION_FEE\""
},
"value": "ERR_INVALID_CONVERSION_FEE"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_ae729833ea0b2cfd1b35fa1d075ae330e76860b5ab276fa04bde88b85e5c4d00",
"typeString": "literal_string \"ERR_INVALID_CONVERSION_FEE\""
}
],
"id": 9435,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "12666:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9440,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "12666:73:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9441,
"nodeType": "ExpressionStatement",
"src": "12666:73:8"
},
{
"eventCall": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9443,
"name": "conversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9051,
"src": "12775:13:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
{
"argumentTypes": null,
"id": 9444,
"name": "_conversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9429,
"src": "12790:14:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
{
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
],
"id": 9442,
"name": "ConversionFeeUpdate",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9096,
"src": "12755:19:8",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_uint32_$returns$__$",
"typeString": "function (uint32,uint32)"
}
},
"id": 9445,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "12755:50:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9446,
"nodeType": "EmitStatement",
"src": "12750:55:8"
},
{
"expression": {
"argumentTypes": null,
"id": 9449,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 9447,
"name": "conversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9051,
"src": "12816:13:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 9448,
"name": "_conversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9429,
"src": "12832:14:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"src": "12816:30:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"id": 9450,
"nodeType": "ExpressionStatement",
"src": "12816:30:8"
}
]
},
"documentation": {
"id": 9427,
"nodeType": "StructuredDocumentation",
"src": "12385:189:8",
"text": " @dev updates the current conversion fee\n can only be called by the contract owner\n @param _conversionFee new conversion fee, represented in ppm"
},
"functionSelector": "ecbca55d",
"id": 9452,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9433,
"modifierName": {
"argumentTypes": null,
"id": 9432,
"name": "ownerOnly",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21754,
"src": "12645:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "12645:9:8"
}
],
"name": "setConversionFee",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9431,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "12636:8:8"
},
"parameters": {
"id": 9430,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9429,
"mutability": "mutable",
"name": "_conversionFee",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9452,
"src": "12606:21:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9428,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "12606:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "12605:23:8"
},
"returnParameters": {
"id": 9434,
"nodeType": "ParameterList",
"parameters": [],
"src": "12655:0:8"
},
"scope": 10039,
"src": "12580:274:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13280,
22574
],
"body": {
"id": 9509,
"nodeType": "Block",
"src": "13506:559:8",
"statements": [
{
"assignments": [
9470
],
"declarations": [
{
"constant": false,
"id": 9470,
"mutability": "mutable",
"name": "converterUpgrader",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9509,
"src": "13517:25:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 9469,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "13517:7:8",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 9474,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9472,
"name": "CONVERTER_UPGRADER",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21542,
"src": "13555:18:8",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
],
"id": 9471,
"name": "addressOf",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21718,
"src": "13545:9:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
"typeString": "function (bytes32) view returns (address)"
}
},
"id": 9473,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "13545:29:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "13517:57:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 9488,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 9484,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9480,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "13764:23:8",
"subExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9476,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "13765:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9478,
"indexExpression": {
"argumentTypes": null,
"id": 9477,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9455,
"src": "13774:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "13765:16:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"id": 9479,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "isSet",
"nodeType": "MemberAccess",
"referencedDeclaration": 9022,
"src": "13765:22:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "||",
"rightExpression": {
"argumentTypes": null,
"id": 9483,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "13791:11:8",
"subExpression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9481,
"name": "isActive",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9362,
"src": "13792:8:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
"typeString": "function () view returns (bool)"
}
},
"id": 9482,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "13792:10:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "13764:38:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "||",
"rightExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 9487,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9485,
"name": "owner",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21728,
"src": "13806:5:8",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"id": 9486,
"name": "converterUpgrader",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9470,
"src": "13815:17:8",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"src": "13806:26:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "13764:68:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4143434553535f44454e494544",
"id": 9489,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "13834:19:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
"typeString": "literal_string \"ERR_ACCESS_DENIED\""
},
"value": "ERR_ACCESS_DENIED"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
"typeString": "literal_string \"ERR_ACCESS_DENIED\""
}
],
"id": 9475,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "13756:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9490,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "13756:98:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9491,
"nodeType": "ExpressionStatement",
"src": "13756:98:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9495,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9455,
"src": "13886:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
{
"argumentTypes": null,
"id": 9496,
"name": "_to",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9457,
"src": "13894:3:8",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 9497,
"name": "_amount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9459,
"src": "13899:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 9492,
"name": "super",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -25,
"src": "13865:5:8",
"typeDescriptions": {
"typeIdentifier": "t_super$_ConverterBase_$10039",
"typeString": "contract super ConverterBase"
}
},
"id": 9494,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "withdrawTokens",
"nodeType": "MemberAccess",
"referencedDeclaration": 22574,
"src": "13865:20:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21127_$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (contract IERC20Token,address,uint256)"
}
},
"id": 9498,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "13865:42:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9499,
"nodeType": "ExpressionStatement",
"src": "13865:42:8"
},
{
"condition": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9500,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "13994:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9502,
"indexExpression": {
"argumentTypes": null,
"id": 9501,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9455,
"src": "14003:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "13994:16:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"id": 9503,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "isSet",
"nodeType": "MemberAccess",
"referencedDeclaration": 9022,
"src": "13994:22:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": null,
"id": 9508,
"nodeType": "IfStatement",
"src": "13990:67:8",
"trueBody": {
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9505,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9455,
"src": "14050:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 9504,
"name": "syncReserveBalance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9844,
"src": "14031:18:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21127_$returns$__$",
"typeString": "function (contract IERC20Token)"
}
},
"id": 9506,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "14031:26:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9507,
"nodeType": "ExpressionStatement",
"src": "14031:26:8"
}
}
]
},
"documentation": {
"id": 9453,
"nodeType": "StructuredDocumentation",
"src": "12862:462:8",
"text": " @dev withdraws tokens held by the converter and sends them to an account\n can only be called by the owner\n note that reserve tokens can only be withdrawn by the owner while the converter is inactive\n unless the owner is the converter upgrader contract\n @param _token ERC20 token contract address\n @param _to account to receive the new amount\n @param _amount amount to withdraw"
},
"functionSelector": "5e35359e",
"id": 9510,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9465,
"modifierName": {
"argumentTypes": null,
"id": 9464,
"name": "protected",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22231,
"src": "13472:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "13472:9:8"
},
{
"arguments": null,
"id": 9467,
"modifierName": {
"argumentTypes": null,
"id": 9466,
"name": "ownerOnly",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21754,
"src": "13491:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "13491:9:8"
}
],
"name": "withdrawTokens",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9463,
"nodeType": "OverrideSpecifier",
"overrides": [
{
"contractScope": null,
"id": 9461,
"name": "IConverter",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 13340,
"src": "13438:10:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverter_$13340",
"typeString": "contract IConverter"
}
},
{
"contractScope": null,
"id": 9462,
"name": "TokenHolder",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 22575,
"src": "13450:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_TokenHolder_$22575",
"typeString": "contract TokenHolder"
}
}
],
"src": "13429:33:8"
},
"parameters": {
"id": 9460,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9455,
"mutability": "mutable",
"name": "_token",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9510,
"src": "13354:18:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9454,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "13354:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9457,
"mutability": "mutable",
"name": "_to",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9510,
"src": "13374:11:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 9456,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "13374:7:8",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9459,
"mutability": "mutable",
"name": "_amount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9510,
"src": "13387:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9458,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "13387:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "13353:50:8"
},
"returnParameters": {
"id": 9468,
"nodeType": "ParameterList",
"parameters": [],
"src": "13506:0:8"
},
"scope": 10039,
"src": "13330:735:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"body": {
"id": 9547,
"nodeType": "Block",
"src": "14324:338:8",
"statements": [
{
"assignments": [
9517
],
"declarations": [
{
"constant": false,
"id": 9517,
"mutability": "mutable",
"name": "converterUpgrader",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9547,
"src": "14335:36:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
"typeString": "contract IConverterUpgrader"
},
"typeName": {
"contractScope": null,
"id": 9516,
"name": "IConverterUpgrader",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 13660,
"src": "14335:18:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
"typeString": "contract IConverterUpgrader"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 9523,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9520,
"name": "CONVERTER_UPGRADER",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21542,
"src": "14403:18:8",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
],
"id": 9519,
"name": "addressOf",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21718,
"src": "14393:9:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
"typeString": "function (bytes32) view returns (address)"
}
},
"id": 9521,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "14393:29:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 9518,
"name": "IConverterUpgrader",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 13660,
"src": "14374:18:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_IConverterUpgrader_$13660_$",
"typeString": "type(contract IConverterUpgrader)"
}
},
"id": 9522,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "14374:49:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
"typeString": "contract IConverterUpgrader"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "14335:88:8"
},
{
"eventCall": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9525,
"name": "converterType",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9242,
"src": "14492:13:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$__$returns$_t_uint16_$",
"typeString": "function () pure returns (uint16)"
}
},
"id": 9526,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "14492:15:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
},
{
"argumentTypes": null,
"id": 9527,
"name": "anchor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9030,
"src": "14509:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
{
"argumentTypes": null,
"hexValue": "66616c7365",
"id": 9528,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "14517:5:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "false"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint16",
"typeString": "uint16"
},
{
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
},
{
"typeIdentifier": "t_bool",
"typeString": "bool"
}
],
"id": 9524,
"name": "Activation",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9063,
"src": "14481:10:8",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_uint16_$_t_contract$_IConverterAnchor_$13349_$_t_bool_$returns$__$",
"typeString": "function (uint16,contract IConverterAnchor,bool)"
}
},
"id": 9529,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "14481:42:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9530,
"nodeType": "EmitStatement",
"src": "14476:47:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9534,
"name": "converterUpgrader",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9517,
"src": "14562:17:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
"typeString": "contract IConverterUpgrader"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
"typeString": "contract IConverterUpgrader"
}
],
"id": 9533,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "14554:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9532,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "14554:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9535,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "14554:26:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 9531,
"name": "transferOwnership",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21787,
"src": "14536:17:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
"typeString": "function (address)"
}
},
"id": 9536,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "14536:45:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9537,
"nodeType": "ExpressionStatement",
"src": "14536:45:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9541,
"name": "version",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9027,
"src": "14618:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
],
"expression": {
"argumentTypes": null,
"id": 9538,
"name": "converterUpgrader",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9517,
"src": "14592:17:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
"typeString": "contract IConverterUpgrader"
}
},
"id": 9540,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "upgrade",
"nodeType": "MemberAccess",
"referencedDeclaration": 13659,
"src": "14592:25:8",
"typeDescriptions": {
"typeIdentifier": "t_function_external_nonpayable$_t_uint16_$returns$__$",
"typeString": "function (uint16) external"
}
},
"id": 9542,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "14592:34:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9543,
"nodeType": "ExpressionStatement",
"src": "14592:34:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9544,
"name": "acceptOwnership",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21817,
"src": "14637:15:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
"typeString": "function ()"
}
},
"id": 9545,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "14637:17:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9546,
"nodeType": "ExpressionStatement",
"src": "14637:17:8"
}
]
},
"documentation": {
"id": 9511,
"nodeType": "StructuredDocumentation",
"src": "14073:209:8",
"text": " @dev upgrades the converter to the latest version\n can only be called by the owner\n note that the owner needs to call acceptOwnership on the new converter after the upgrade"
},
"functionSelector": "d55ec697",
"id": 9548,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9514,
"modifierName": {
"argumentTypes": null,
"id": 9513,
"name": "ownerOnly",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21754,
"src": "14314:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "14314:9:8"
}
],
"name": "upgrade",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9512,
"nodeType": "ParameterList",
"parameters": [],
"src": "14304:2:8"
},
"returnParameters": {
"id": 9515,
"nodeType": "ParameterList",
"parameters": [],
"src": "14324:0:8"
},
"scope": 10039,
"src": "14288:374:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"body": {
"id": 9560,
"nodeType": "Block",
"src": "14940:54:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 9556,
"name": "reserveTokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9036,
"src": "14965:13:8",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
"typeString": "contract IERC20Token[] storage ref"
}
},
"id": 9557,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "length",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "14965:20:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 9555,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "14958:6:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_uint16_$",
"typeString": "type(uint16)"
},
"typeName": {
"id": 9554,
"name": "uint16",
"nodeType": "ElementaryTypeName",
"src": "14958:6:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9558,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "14958:28:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
},
"functionReturnParameters": 9553,
"id": 9559,
"nodeType": "Return",
"src": "14951:35:8"
}
]
},
"documentation": {
"id": 9549,
"nodeType": "StructuredDocumentation",
"src": "14670:206:8",
"text": " @dev returns the number of reserve tokens defined\n note that prior to version 17, you should use 'connectorTokenCount' instead\n @return number of reserve tokens"
},
"functionSelector": "9b99a8e2",
"id": 9561,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "reserveTokenCount",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9550,
"nodeType": "ParameterList",
"parameters": [],
"src": "14908:2:8"
},
"returnParameters": {
"id": 9553,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9552,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9561,
"src": "14932:6:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
},
"typeName": {
"id": 9551,
"name": "uint16",
"nodeType": "ElementaryTypeName",
"src": "14932:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "14931:8:8"
},
"scope": 10039,
"src": "14882:112:8",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13292
],
"body": {
"id": 9663,
"nodeType": "Block",
"src": "15545:544:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 9604,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 9598,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9592,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9564,
"src": "15599:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 9591,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "15591:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9590,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "15591:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9593,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "15591:15:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9596,
"name": "anchor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9030,
"src": "15618:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
],
"id": 9595,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "15610:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9594,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "15610:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9597,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "15610:15:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"src": "15591:34:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "&&",
"rightExpression": {
"argumentTypes": null,
"id": 9603,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "15629:23:8",
"subExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9599,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "15630:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9601,
"indexExpression": {
"argumentTypes": null,
"id": 9600,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9564,
"src": "15639:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "15630:16:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"id": 9602,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "isSet",
"nodeType": "MemberAccess",
"referencedDeclaration": 9022,
"src": "15630:22:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "15591:61:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f494e56414c49445f52455345525645",
"id": 9605,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "15654:21:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
"typeString": "literal_string \"ERR_INVALID_RESERVE\""
},
"value": "ERR_INVALID_RESERVE"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
"typeString": "literal_string \"ERR_INVALID_RESERVE\""
}
],
"id": 9589,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "15583:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9606,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "15583:93:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9607,
"nodeType": "ExpressionStatement",
"src": "15583:93:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"id": 9613,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9609,
"name": "_weight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9566,
"src": "15695:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"nodeType": "BinaryOperation",
"operator": "<=",
"rightExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"id": 9612,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9610,
"name": "PPM_RESOLUTION",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9007,
"src": "15706:14:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"nodeType": "BinaryOperation",
"operator": "-",
"rightExpression": {
"argumentTypes": null,
"id": 9611,
"name": "reserveRatio",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9043,
"src": "15723:12:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"src": "15706:29:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"src": "15695:40:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f494e56414c49445f524553455256455f574549474854",
"id": 9614,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "15737:28:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_e4e4c57eb13b428a7fc031dc1f6f2c3e13b61f7d7b93994b2d17f8dc75658178",
"typeString": "literal_string \"ERR_INVALID_RESERVE_WEIGHT\""
},
"value": "ERR_INVALID_RESERVE_WEIGHT"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_e4e4c57eb13b428a7fc031dc1f6f2c3e13b61f7d7b93994b2d17f8dc75658178",
"typeString": "literal_string \"ERR_INVALID_RESERVE_WEIGHT\""
}
],
"id": 9608,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "15687:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9615,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "15687:79:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9616,
"nodeType": "ExpressionStatement",
"src": "15687:79:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
},
"id": 9625,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9618,
"name": "reserveTokenCount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9561,
"src": "15785:17:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_uint16_$",
"typeString": "function () view returns (uint16)"
}
},
"id": 9619,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "15785:19:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9623,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "-",
"prefix": true,
"src": "15814:2:8",
"subExpression": {
"argumentTypes": null,
"hexValue": "31",
"id": 9622,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "15815:1:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"typeDescriptions": {
"typeIdentifier": "t_rational_minus_1_by_1",
"typeString": "int_const -1"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_rational_minus_1_by_1",
"typeString": "int_const -1"
}
],
"id": 9621,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "15807:6:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_uint16_$",
"typeString": "type(uint16)"
},
"typeName": {
"id": 9620,
"name": "uint16",
"nodeType": "ElementaryTypeName",
"src": "15807:6:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9624,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "15807:10:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
},
"src": "15785:32:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f494e56414c49445f524553455256455f434f554e54",
"id": 9626,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "15819:27:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_ed94f14d8dcbb423a259b4072978fc0c494c6af1fea066a19023afb1a76ac87f",
"typeString": "literal_string \"ERR_INVALID_RESERVE_COUNT\""
},
"value": "ERR_INVALID_RESERVE_COUNT"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_ed94f14d8dcbb423a259b4072978fc0c494c6af1fea066a19023afb1a76ac87f",
"typeString": "literal_string \"ERR_INVALID_RESERVE_COUNT\""
}
],
"id": 9617,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "15777:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9627,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "15777:70:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9628,
"nodeType": "ExpressionStatement",
"src": "15777:70:8"
},
{
"assignments": [
9630
],
"declarations": [
{
"constant": false,
"id": 9630,
"mutability": "mutable",
"name": "newReserve",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9663,
"src": "15860:26:8",
"stateVariable": false,
"storageLocation": "storage",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
"typeString": "struct ConverterBase.Reserve"
},
"typeName": {
"contractScope": null,
"id": 9629,
"name": "Reserve",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 9023,
"src": "15860:7:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
"typeString": "struct ConverterBase.Reserve"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 9634,
"initialValue": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9631,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "15889:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9633,
"indexExpression": {
"argumentTypes": null,
"id": 9632,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9564,
"src": "15898:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "15889:16:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "15860:45:8"
},
{
"expression": {
"argumentTypes": null,
"id": 9639,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 9635,
"name": "newReserve",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9630,
"src": "15916:10:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
"typeString": "struct ConverterBase.Reserve storage pointer"
}
},
"id": 9637,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 9014,
"src": "15916:18:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"hexValue": "30",
"id": 9638,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "15937:1:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "15916:22:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 9640,
"nodeType": "ExpressionStatement",
"src": "15916:22:8"
},
{
"expression": {
"argumentTypes": null,
"id": 9645,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 9641,
"name": "newReserve",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9630,
"src": "15949:10:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
"typeString": "struct ConverterBase.Reserve storage pointer"
}
},
"id": 9643,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberName": "weight",
"nodeType": "MemberAccess",
"referencedDeclaration": 9016,
"src": "15949:17:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 9644,
"name": "_weight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9566,
"src": "15969:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"src": "15949:27:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"id": 9646,
"nodeType": "ExpressionStatement",
"src": "15949:27:8"
},
{
"expression": {
"argumentTypes": null,
"id": 9651,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 9647,
"name": "newReserve",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9630,
"src": "15987:10:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
"typeString": "struct ConverterBase.Reserve storage pointer"
}
},
"id": 9649,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberName": "isSet",
"nodeType": "MemberAccess",
"referencedDeclaration": 9022,
"src": "15987:16:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"hexValue": "74727565",
"id": 9650,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "16006:4:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "true"
},
"src": "15987:23:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 9652,
"nodeType": "ExpressionStatement",
"src": "15987:23:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9656,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9564,
"src": "16040:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"expression": {
"argumentTypes": null,
"id": 9653,
"name": "reserveTokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9036,
"src": "16021:13:8",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
"typeString": "contract IERC20Token[] storage ref"
}
},
"id": 9655,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "push",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "16021:18:8",
"typeDescriptions": {
"typeIdentifier": "t_function_arraypush_nonpayable$_t_contract$_IERC20Token_$21127_$returns$__$",
"typeString": "function (contract IERC20Token)"
}
},
"id": 9657,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "16021:26:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9658,
"nodeType": "ExpressionStatement",
"src": "16021:26:8"
},
{
"expression": {
"argumentTypes": null,
"id": 9661,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 9659,
"name": "reserveRatio",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9043,
"src": "16058:12:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"argumentTypes": null,
"id": 9660,
"name": "_weight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9566,
"src": "16074:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"src": "16058:23:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"id": 9662,
"nodeType": "ExpressionStatement",
"src": "16058:23:8"
}
]
},
"documentation": {
"id": 9562,
"nodeType": "StructuredDocumentation",
"src": "15002:278:8",
"text": " @dev defines a new reserve token for the converter\n can only be called by the owner while the converter is inactive\n @param _token address of the reserve token\n @param _weight reserve weight, represented in ppm, 1-1000000"
},
"functionSelector": "6a49d2c4",
"id": 9664,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9570,
"modifierName": {
"argumentTypes": null,
"id": 9569,
"name": "ownerOnly",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21754,
"src": "15402:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "15402:9:8"
},
{
"arguments": null,
"id": 9572,
"modifierName": {
"argumentTypes": null,
"id": 9571,
"name": "inactive",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9151,
"src": "15421:8:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "15421:8:8"
},
{
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9576,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9564,
"src": "15460:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 9575,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "15452:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9574,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "15452:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9577,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "15452:15:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"id": 9578,
"modifierName": {
"argumentTypes": null,
"id": 9573,
"name": "validAddress",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22618,
"src": "15439:12:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_address_$",
"typeString": "modifier (address)"
}
},
"nodeType": "ModifierInvocation",
"src": "15439:29:8"
},
{
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9582,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9564,
"src": "15494:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 9581,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "15486:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9580,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "15486:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9583,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "15486:15:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"id": 9584,
"modifierName": {
"argumentTypes": null,
"id": 9579,
"name": "notThis",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22644,
"src": "15478:7:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_address_$",
"typeString": "modifier (address)"
}
},
"nodeType": "ModifierInvocation",
"src": "15478:24:8"
},
{
"arguments": [
{
"argumentTypes": null,
"id": 9586,
"name": "_weight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9566,
"src": "15531:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
}
],
"id": 9587,
"modifierName": {
"argumentTypes": null,
"id": 9585,
"name": "validReserveWeight",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9219,
"src": "15512:18:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_uint32_$",
"typeString": "modifier (uint32)"
}
},
"nodeType": "ModifierInvocation",
"src": "15512:27:8"
}
],
"name": "addReserve",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9568,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "15384:8:8"
},
"parameters": {
"id": 9567,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9564,
"mutability": "mutable",
"name": "_token",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9664,
"src": "15306:18:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9563,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "15306:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9566,
"mutability": "mutable",
"name": "_weight",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9664,
"src": "15326:14:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9565,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "15326:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "15305:36:8"
},
"returnParameters": {
"id": 9588,
"nodeType": "ParameterList",
"parameters": [],
"src": "15545:0:8"
},
"scope": 10039,
"src": "15286:803:8",
"stateMutability": "nonpayable",
"virtual": true,
"visibility": "public"
},
{
"body": {
"id": 9680,
"nodeType": "Block",
"src": "16448:56:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9675,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "16466:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9677,
"indexExpression": {
"argumentTypes": null,
"id": 9676,
"name": "_reserveToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9667,
"src": "16475:13:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "16466:23:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"id": 9678,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "weight",
"nodeType": "MemberAccess",
"referencedDeclaration": 9016,
"src": "16466:30:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"functionReturnParameters": 9674,
"id": 9679,
"nodeType": "Return",
"src": "16459:37:8"
}
]
},
"documentation": {
"id": 9665,
"nodeType": "StructuredDocumentation",
"src": "16097:197:8",
"text": " @dev returns the reserve's weight\n added in version 28\n @param _reserveToken reserve token contract address\n @return reserve weight"
},
"functionSelector": "1cfab290",
"id": 9681,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": [
{
"argumentTypes": null,
"id": 9670,
"name": "_reserveToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9667,
"src": "16402:13:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"id": 9671,
"modifierName": {
"argumentTypes": null,
"id": 9669,
"name": "validReserve",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9172,
"src": "16389:12:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21127_$",
"typeString": "modifier (contract IERC20Token)"
}
},
"nodeType": "ModifierInvocation",
"src": "16389:27:8"
}
],
"name": "reserveWeight",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9668,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9667,
"mutability": "mutable",
"name": "_reserveToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9681,
"src": "16323:25:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9666,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "16323:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "16322:27:8"
},
"returnParameters": {
"id": 9674,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9673,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9681,
"src": "16435:6:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9672,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "16435:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "16434:8:8"
},
"scope": 10039,
"src": "16300:204:8",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13250
],
"body": {
"id": 9698,
"nodeType": "Block",
"src": "16941:57:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9693,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "16959:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9695,
"indexExpression": {
"argumentTypes": null,
"id": 9694,
"name": "_reserveToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9684,
"src": "16968:13:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "16959:23:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"id": 9696,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 9014,
"src": "16959:31:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 9692,
"id": 9697,
"nodeType": "Return",
"src": "16952:38:8"
}
]
},
"documentation": {
"id": 9682,
"nodeType": "StructuredDocumentation",
"src": "16512:255:8",
"text": " @dev returns the reserve's balance\n note that prior to version 17, you should use 'getConnectorBalance' instead\n @param _reserveToken reserve token contract address\n @return reserve balance"
},
"functionSelector": "dc8de379",
"id": 9699,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": [
{
"argumentTypes": null,
"id": 9688,
"name": "_reserveToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9684,
"src": "16894:13:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"id": 9689,
"modifierName": {
"argumentTypes": null,
"id": 9687,
"name": "validReserve",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9172,
"src": "16881:12:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21127_$",
"typeString": "modifier (contract IERC20Token)"
}
},
"nodeType": "ModifierInvocation",
"src": "16881:27:8"
}
],
"name": "reserveBalance",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9686,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "16849:8:8"
},
"parameters": {
"id": 9685,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9684,
"mutability": "mutable",
"name": "_reserveToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9699,
"src": "16797:25:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9683,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "16797:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "16796:27:8"
},
"returnParameters": {
"id": 9692,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9691,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9699,
"src": "16927:7:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9690,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "16927:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "16926:9:8"
},
"scope": 10039,
"src": "16773:225:8",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"body": {
"id": 9710,
"nodeType": "Block",
"src": "17228:61:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9705,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "17246:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9707,
"indexExpression": {
"argumentTypes": null,
"id": 9706,
"name": "ETH_RESERVE_ADDRESS",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9012,
"src": "17255:19:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "17246:29:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"id": 9708,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "isSet",
"nodeType": "MemberAccess",
"referencedDeclaration": 9022,
"src": "17246:35:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"functionReturnParameters": 9704,
"id": 9709,
"nodeType": "Return",
"src": "17239:42:8"
}
]
},
"documentation": {
"id": 9700,
"nodeType": "StructuredDocumentation",
"src": "17006:164:8",
"text": " @dev checks whether or not the converter has an ETH reserve\n @return true if the converter has an ETH reserve, false otherwise"
},
"functionSelector": "12c2aca4",
"id": 9711,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "hasETHReserve",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9701,
"nodeType": "ParameterList",
"parameters": [],
"src": "17198:2:8"
},
"returnParameters": {
"id": 9704,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9703,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9711,
"src": "17222:4:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 9702,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "17222:4:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "17221:6:8"
},
"scope": 10039,
"src": "17176:113:8",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13228
],
"body": {
"id": 9772,
"nodeType": "Block",
"src": "18137:517:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"id": 9736,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9734,
"name": "_sourceToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9714,
"src": "18183:12:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"id": 9735,
"name": "_targetToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9716,
"src": "18199:12:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"src": "18183:28:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f53414d455f534f555243455f544152474554",
"id": 9737,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "18213:24:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_238302f57e4481fe6a4c903e930919efa155f2aabe0b5da37da1448cea5fd634",
"typeString": "literal_string \"ERR_SAME_SOURCE_TARGET\""
},
"value": "ERR_SAME_SOURCE_TARGET"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_238302f57e4481fe6a4c903e930919efa155f2aabe0b5da37da1448cea5fd634",
"typeString": "literal_string \"ERR_SAME_SOURCE_TARGET\""
}
],
"id": 9733,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "18175:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9738,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "18175:63:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9739,
"nodeType": "ExpressionStatement",
"src": "18175:63:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 9760,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 9749,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9743,
"name": "conversionWhitelist",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9033,
"src": "18366:19:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
}
],
"id": 9742,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "18358:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9741,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "18358:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9744,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "18358:28:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "30",
"id": 9747,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "18398:1:8",
"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": 9746,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "18390:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9745,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "18390:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9748,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "18390:10:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "18358:42:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "||",
"rightExpression": {
"argumentTypes": null,
"components": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 9758,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9752,
"name": "_trader",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9720,
"src": "18456:7:8",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"expression": {
"argumentTypes": null,
"id": 9750,
"name": "conversionWhitelist",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9033,
"src": "18422:19:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
}
},
"id": 9751,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "isWhitelisted",
"nodeType": "MemberAccess",
"referencedDeclaration": 22916,
"src": "18422:33:8",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
"typeString": "function (address) view external returns (bool)"
}
},
"id": 9753,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "18422:42:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "&&",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9756,
"name": "_beneficiary",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9722,
"src": "18502:12:8",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
],
"expression": {
"argumentTypes": null,
"id": 9754,
"name": "conversionWhitelist",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9033,
"src": "18468:19:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IWhitelist_$22917",
"typeString": "contract IWhitelist"
}
},
"id": 9755,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "isWhitelisted",
"nodeType": "MemberAccess",
"referencedDeclaration": 22916,
"src": "18468:33:8",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
"typeString": "function (address) view external returns (bool)"
}
},
"id": 9757,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "18468:47:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "18422:93:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
}
],
"id": 9759,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "18421:95:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "18358:158:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "4552525f4e4f545f57484954454c4953544544",
"id": 9761,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "18535:21:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_d03711a645ac13b3887baa10c28f347997e96617340d7ffae036e653d4c59185",
"typeString": "literal_string \"ERR_NOT_WHITELISTED\""
},
"value": "ERR_NOT_WHITELISTED"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_d03711a645ac13b3887baa10c28f347997e96617340d7ffae036e653d4c59185",
"typeString": "literal_string \"ERR_NOT_WHITELISTED\""
}
],
"id": 9740,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
-18,
-18
],
"referencedDeclaration": -18,
"src": "18350:7:8",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 9762,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "18350:207:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9763,
"nodeType": "ExpressionStatement",
"src": "18350:207:8"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9765,
"name": "_sourceToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9714,
"src": "18587:12:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
{
"argumentTypes": null,
"id": 9766,
"name": "_targetToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9716,
"src": "18601:12:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
{
"argumentTypes": null,
"id": 9767,
"name": "_amount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9718,
"src": "18615:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 9768,
"name": "_trader",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9720,
"src": "18624:7:8",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 9769,
"name": "_beneficiary",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9722,
"src": "18633:12:8",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
],
"id": 9764,
"name": "doConvert",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9789,
"src": "18577:9:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21127_$_t_contract$_IERC20Token_$21127_$_t_uint256_$_t_address_$_t_address_payable_$returns$_t_uint256_$",
"typeString": "function (contract IERC20Token,contract IERC20Token,uint256,address,address payable) returns (uint256)"
}
},
"id": 9770,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "18577:69:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 9732,
"id": 9771,
"nodeType": "Return",
"src": "18570:76:8"
}
]
},
"documentation": {
"id": 9712,
"nodeType": "StructuredDocumentation",
"src": "17297:569:8",
"text": " @dev converts a specific amount of source tokens to target tokens\n can only be called by the bancor network contract\n @param _sourceToken source ERC20 token\n @param _targetToken target ERC20 token\n @param _amount amount of tokens to convert (in units of the source token)\n @param _trader address of the caller who executed the conversion\n @param _beneficiary wallet to receive the conversion result\n @return amount of tokens received (in units of the target token)"
},
"functionSelector": "e8dc12ff",
"id": 9773,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9726,
"modifierName": {
"argumentTypes": null,
"id": 9725,
"name": "protected",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 22231,
"src": "18065:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "18065:9:8"
},
{
"arguments": [
{
"argumentTypes": null,
"id": 9728,
"name": "BANCOR_NETWORK",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21530,
"src": "18089:14:8",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
}
],
"id": 9729,
"modifierName": {
"argumentTypes": null,
"id": 9727,
"name": "only",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21577,
"src": "18084:4:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_bytes32_$",
"typeString": "modifier (bytes32)"
}
},
"nodeType": "ModifierInvocation",
"src": "18084:20:8"
}
],
"name": "convert",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9724,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "18030:8:8"
},
"parameters": {
"id": 9723,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9714,
"mutability": "mutable",
"name": "_sourceToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9773,
"src": "17889:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9713,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "17889:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9716,
"mutability": "mutable",
"name": "_targetToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9773,
"src": "17915:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9715,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "17915:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9718,
"mutability": "mutable",
"name": "_amount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9773,
"src": "17941:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9717,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "17941:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9720,
"mutability": "mutable",
"name": "_trader",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9773,
"src": "17958:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 9719,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "17958:7:8",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9722,
"mutability": "mutable",
"name": "_beneficiary",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9773,
"src": "17975:28:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
"typeName": {
"id": 9721,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "17975:15:8",
"stateMutability": "payable",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "17888:116:8"
},
"returnParameters": {
"id": 9732,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9731,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9773,
"src": "18123:7:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9730,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "18123:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "18122:9:8"
},
"scope": 10039,
"src": "17872:782:8",
"stateMutability": "payable",
"virtual": false,
"visibility": "public"
},
{
"body": null,
"documentation": {
"id": 9774,
"nodeType": "StructuredDocumentation",
"src": "18662:615:8",
"text": " @dev converts a specific amount of source tokens to target tokens\n called by ConverterBase and allows the inherited contracts to implement custom conversion logic\n @param _sourceToken source ERC20 token\n @param _targetToken target ERC20 token\n @param _amount amount of tokens to convert (in units of the source token)\n @param _trader address of the caller who executed the conversion\n @param _beneficiary wallet to receive the conversion result\n @return amount of tokens received (in units of the target token)"
},
"id": 9789,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "doConvert",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9785,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9776,
"mutability": "mutable",
"name": "_sourceToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9789,
"src": "19312:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9775,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "19312:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9778,
"mutability": "mutable",
"name": "_targetToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9789,
"src": "19347:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9777,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "19347:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9780,
"mutability": "mutable",
"name": "_amount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9789,
"src": "19382:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9779,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "19382:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9782,
"mutability": "mutable",
"name": "_trader",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9789,
"src": "19408:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 9781,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "19408:7:8",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9784,
"mutability": "mutable",
"name": "_beneficiary",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9789,
"src": "19434:28:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
"typeName": {
"id": 9783,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "19434:15:8",
"stateMutability": "payable",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "19301:162:8"
},
"returnParameters": {
"id": 9788,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9787,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9789,
"src": "19517:7:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9786,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "19517:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "19516:9:8"
},
"scope": 10039,
"src": "19283:243:8",
"stateMutability": "nonpayable",
"virtual": true,
"visibility": "internal"
},
{
"body": {
"id": 9805,
"nodeType": "Block",
"src": "19790:78:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9802,
"name": "PPM_RESOLUTION",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9007,
"src": "19845:14:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
],
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9799,
"name": "conversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9051,
"src": "19826:13:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
],
"expression": {
"argumentTypes": null,
"id": 9797,
"name": "_targetAmount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9792,
"src": "19808:13:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 9798,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "mul",
"nodeType": "MemberAccess",
"referencedDeclaration": 22327,
"src": "19808:17:8",
"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": 9800,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "19808:32:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 9801,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "div",
"nodeType": "MemberAccess",
"referencedDeclaration": 22353,
"src": "19808:36:8",
"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": 9803,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "19808:52:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 9796,
"id": 9804,
"nodeType": "Return",
"src": "19801:59:8"
}
]
},
"documentation": {
"id": 9790,
"nodeType": "StructuredDocumentation",
"src": "19534:173:8",
"text": " @dev returns the conversion fee for a given target amount\n @param _targetAmount target amount\n @return conversion fee"
},
"id": 9806,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "calculateFee",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9793,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9792,
"mutability": "mutable",
"name": "_targetAmount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9806,
"src": "19735:21:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9791,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "19735:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "19734:23:8"
},
"returnParameters": {
"id": 9796,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9795,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9806,
"src": "19781:7:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9794,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "19781:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "19780:9:8"
},
"scope": 10039,
"src": "19713:155:8",
"stateMutability": "view",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9843,
"nodeType": "Block",
"src": "20153:230:8",
"statements": [
{
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"id": 9817,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9815,
"name": "_reserveToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9809,
"src": "20168:13:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"id": 9816,
"name": "ETH_RESERVE_ADDRESS",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9012,
"src": "20185:19:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"src": "20168:36:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": {
"expression": {
"argumentTypes": null,
"id": 9840,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9829,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "20303:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9831,
"indexExpression": {
"argumentTypes": null,
"id": 9830,
"name": "_reserveToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9809,
"src": "20312:13:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "20303:23:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"id": 9832,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 9014,
"src": "20303:31:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9837,
"name": "this",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -28,
"src": "20369:4:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ConverterBase_$10039",
"typeString": "contract ConverterBase"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_ConverterBase_$10039",
"typeString": "contract ConverterBase"
}
],
"id": 9836,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "20361:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9835,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "20361:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9838,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "20361:13:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
],
"expression": {
"argumentTypes": null,
"id": 9833,
"name": "_reserveToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9809,
"src": "20337:13:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"id": 9834,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "balanceOf",
"nodeType": "MemberAccess",
"referencedDeclaration": 21088,
"src": "20337:23:8",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
"typeString": "function (address) view external returns (uint256)"
}
},
"id": 9839,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "20337:38:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "20303:72:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 9841,
"nodeType": "ExpressionStatement",
"src": "20303:72:8"
},
"id": 9842,
"nodeType": "IfStatement",
"src": "20164:211:8",
"trueBody": {
"expression": {
"argumentTypes": null,
"id": 9827,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9818,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "20219:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9820,
"indexExpression": {
"argumentTypes": null,
"id": 9819,
"name": "_reserveToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9809,
"src": "20228:13:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "20219:23:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"id": 9821,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 9014,
"src": "20219:31:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9824,
"name": "this",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -28,
"src": "20261:4:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ConverterBase_$10039",
"typeString": "contract ConverterBase"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_ConverterBase_$10039",
"typeString": "contract ConverterBase"
}
],
"id": 9823,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "20253:7:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 9822,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "20253:7:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9825,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "20253:13:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"id": 9826,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "20253:21:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "20219:55:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 9828,
"nodeType": "ExpressionStatement",
"src": "20219:55:8"
}
}
]
},
"documentation": {
"id": 9807,
"nodeType": "StructuredDocumentation",
"src": "19876:179:8",
"text": " @dev syncs the stored reserve balance for a given reserve with the real reserve balance\n @param _reserveToken address of the reserve token"
},
"id": 9844,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": [
{
"argumentTypes": null,
"id": 9812,
"name": "_reserveToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9809,
"src": "20138:13:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"id": 9813,
"modifierName": {
"argumentTypes": null,
"id": 9811,
"name": "validReserve",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9172,
"src": "20125:12:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21127_$",
"typeString": "modifier (contract IERC20Token)"
}
},
"nodeType": "ModifierInvocation",
"src": "20125:27:8"
}
],
"name": "syncReserveBalance",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9810,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9809,
"mutability": "mutable",
"name": "_reserveToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9844,
"src": "20089:25:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9808,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "20089:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "20088:27:8"
},
"returnParameters": {
"id": 9814,
"nodeType": "ParameterList",
"parameters": [],
"src": "20153:0:8"
},
"scope": 10039,
"src": "20061:322:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9870,
"nodeType": "Block",
"src": "20496:165:8",
"statements": [
{
"assignments": [
9849
],
"declarations": [
{
"constant": false,
"id": 9849,
"mutability": "mutable",
"name": "reserveCount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9870,
"src": "20507:20:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9848,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "20507:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 9852,
"initialValue": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 9850,
"name": "reserveTokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9036,
"src": "20530:13:8",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
"typeString": "contract IERC20Token[] storage ref"
}
},
"id": 9851,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "length",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "20530:20:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "20507:43:8"
},
{
"body": {
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9864,
"name": "reserveTokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9036,
"src": "20636:13:8",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
"typeString": "contract IERC20Token[] storage ref"
}
},
"id": 9866,
"indexExpression": {
"argumentTypes": null,
"id": 9865,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9854,
"src": "20650:1:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "20636:16:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 9863,
"name": "syncReserveBalance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9844,
"src": "20617:18:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21127_$returns$__$",
"typeString": "function (contract IERC20Token)"
}
},
"id": 9867,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "20617:36:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9868,
"nodeType": "ExpressionStatement",
"src": "20617:36:8"
},
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 9859,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9857,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9854,
"src": "20581:1:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"argumentTypes": null,
"id": 9858,
"name": "reserveCount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9849,
"src": "20585:12:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "20581:16:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 9869,
"initializationExpression": {
"assignments": [
9854
],
"declarations": [
{
"constant": false,
"id": 9854,
"mutability": "mutable",
"name": "i",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9869,
"src": "20566:9:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9853,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "20566:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 9856,
"initialValue": {
"argumentTypes": null,
"hexValue": "30",
"id": 9855,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "20578:1:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"nodeType": "VariableDeclarationStatement",
"src": "20566:13:8"
},
"loopExpression": {
"expression": {
"argumentTypes": null,
"id": 9861,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "++",
"prefix": false,
"src": "20599:3:8",
"subExpression": {
"argumentTypes": null,
"id": 9860,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9854,
"src": "20599:1:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 9862,
"nodeType": "ExpressionStatement",
"src": "20599:3:8"
},
"nodeType": "ForStatement",
"src": "20561:92:8"
}
]
},
"documentation": {
"id": 9845,
"nodeType": "StructuredDocumentation",
"src": "20391:59:8",
"text": " @dev syncs all stored reserve balances"
},
"id": 9871,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "syncReserveBalances",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9846,
"nodeType": "ParameterList",
"parameters": [],
"src": "20484:2:8"
},
"returnParameters": {
"id": 9847,
"nodeType": "ParameterList",
"parameters": [],
"src": "20496:0:8"
},
"scope": 10039,
"src": "20456:205:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 9907,
"nodeType": "Block",
"src": "21324:518:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 9892,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 9888,
"name": "_feeAmount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9884,
"src": "21705:10:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
"typeString": "int_const 5789...(69 digits omitted)...9968"
},
"id": 9891,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"hexValue": "32",
"id": 9889,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "21718:1:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"nodeType": "BinaryOperation",
"operator": "**",
"rightExpression": {
"argumentTypes": null,
"hexValue": "323535",
"id": 9890,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "21723:3:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_255_by_1",
"typeString": "int_const 255"
},
"value": "255"
},
"src": "21718:8:8",
"typeDescriptions": {
"typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
"typeString": "int_const 5789...(69 digits omitted)...9968"
}
},
"src": "21705:21:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
}
],
"id": 9887,
"name": "assert",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -3,
"src": "21698:6:8",
"typeDescriptions": {
"typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$",
"typeString": "function (bool) pure"
}
},
"id": 9893,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "21698:29:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9894,
"nodeType": "ExpressionStatement",
"src": "21698:29:8"
},
{
"eventCall": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9896,
"name": "_sourceToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9874,
"src": "21754:12:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
{
"argumentTypes": null,
"id": 9897,
"name": "_targetToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9876,
"src": "21768:12:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
{
"argumentTypes": null,
"id": 9898,
"name": "_trader",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9878,
"src": "21782:7:8",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 9899,
"name": "_amount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9880,
"src": "21791:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 9900,
"name": "_returnAmount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9882,
"src": "21800:13:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9903,
"name": "_feeAmount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9884,
"src": "21822:10:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 9902,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "21815:6:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_int256_$",
"typeString": "type(int256)"
},
"typeName": {
"id": 9901,
"name": "int256",
"nodeType": "ElementaryTypeName",
"src": "21815:6:8",
"typeDescriptions": {
"typeIdentifier": null,
"typeString": null
}
}
},
"id": 9904,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "21815:18:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_int256",
"typeString": "int256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_int256",
"typeString": "int256"
}
],
"id": 9895,
"name": "Conversion",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9078,
"src": "21743:10:8",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_contract$_IERC20Token_$21127_$_t_contract$_IERC20Token_$21127_$_t_address_$_t_uint256_$_t_uint256_$_t_int256_$returns$__$",
"typeString": "function (contract IERC20Token,contract IERC20Token,address,uint256,uint256,int256)"
}
},
"id": 9905,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "21743:91:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9906,
"nodeType": "EmitStatement",
"src": "21738:96:8"
}
]
},
"documentation": {
"id": 9872,
"nodeType": "StructuredDocumentation",
"src": "20669:409:8",
"text": " @dev helper, dispatches the Conversion event\n @param _sourceToken source ERC20 token\n @param _targetToken target ERC20 token\n @param _trader address of the caller who executed the conversion\n @param _amount amount purchased/sold (in the source token)\n @param _returnAmount amount returned (in the target token)"
},
"id": 9908,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "dispatchConversionEvent",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 9885,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9874,
"mutability": "mutable",
"name": "_sourceToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9908,
"src": "21127:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9873,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "21127:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9876,
"mutability": "mutable",
"name": "_targetToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9908,
"src": "21162:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9875,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "21162:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9878,
"mutability": "mutable",
"name": "_trader",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9908,
"src": "21197:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 9877,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "21197:7:8",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9880,
"mutability": "mutable",
"name": "_amount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9908,
"src": "21223:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9879,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "21223:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9882,
"mutability": "mutable",
"name": "_returnAmount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9908,
"src": "21249:21:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9881,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "21249:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9884,
"mutability": "mutable",
"name": "_feeAmount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9908,
"src": "21281:18:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9883,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "21281:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "21116:184:8"
},
"returnParameters": {
"id": 9886,
"nodeType": "ParameterList",
"parameters": [],
"src": "21324:0:8"
},
"scope": 10039,
"src": "21084:758:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "internal"
},
{
"baseFunctions": [
13297
],
"body": {
"id": 9917,
"nodeType": "Block",
"src": "22030:32:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 9915,
"name": "anchor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9030,
"src": "22048:6:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"functionReturnParameters": 9914,
"id": 9916,
"nodeType": "Return",
"src": "22041:13:8"
}
]
},
"documentation": {
"id": 9909,
"nodeType": "StructuredDocumentation",
"src": "21850:109:8",
"text": " @dev deprecated since version 28, backward compatibility - use only for earlier versions"
},
"functionSelector": "fc0c546a",
"id": 9918,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "token",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9911,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "21994:8:8"
},
"parameters": {
"id": 9910,
"nodeType": "ParameterList",
"parameters": [],
"src": "21979:2:8"
},
"returnParameters": {
"id": 9914,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9913,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9918,
"src": "22012:16:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
},
"typeName": {
"contractScope": null,
"id": 9912,
"name": "IConverterAnchor",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 13349,
"src": "22012:16:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IConverterAnchor_$13349",
"typeString": "contract IConverterAnchor"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "22011:18:8"
},
"scope": 10039,
"src": "21965:97:8",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13302
],
"body": {
"id": 9931,
"nodeType": "Block",
"src": "22213:53:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 9928,
"name": "_newOwner",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9921,
"src": "22248:9:8",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 9927,
"name": "transferAnchorOwnership",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9381,
"src": "22224:23:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
"typeString": "function (address)"
}
},
"id": 9929,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "22224:34:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9930,
"nodeType": "ExpressionStatement",
"src": "22224:34:8"
}
]
},
"documentation": {
"id": 9919,
"nodeType": "StructuredDocumentation",
"src": "22070:60:8",
"text": " @dev deprecated, backward compatibility"
},
"functionSelector": "21e6b53d",
"id": 9932,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9925,
"modifierName": {
"argumentTypes": null,
"id": 9924,
"name": "ownerOnly",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21754,
"src": "22203:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "22203:9:8"
}
],
"name": "transferTokenOwnership",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9923,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "22194:8:8"
},
"parameters": {
"id": 9922,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9921,
"mutability": "mutable",
"name": "_newOwner",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9932,
"src": "22168:17:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 9920,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "22168:7:8",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "22167:19:8"
},
"returnParameters": {
"id": 9926,
"nodeType": "ParameterList",
"parameters": [],
"src": "22213:0:8"
},
"scope": 10039,
"src": "22136:130:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13305
],
"body": {
"id": 9942,
"nodeType": "Block",
"src": "22398:42:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9939,
"name": "acceptAnchorOwnership",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9405,
"src": "22409:21:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
"typeString": "function ()"
}
},
"id": 9940,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "22409:23:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 9941,
"nodeType": "ExpressionStatement",
"src": "22409:23:8"
}
]
},
"documentation": {
"id": 9933,
"nodeType": "StructuredDocumentation",
"src": "22274:60:8",
"text": " @dev deprecated, backward compatibility"
},
"functionSelector": "38a5e016",
"id": 9943,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 9937,
"modifierName": {
"argumentTypes": null,
"id": 9936,
"name": "ownerOnly",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 21754,
"src": "22388:9:8",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "22388:9:8"
}
],
"name": "acceptTokenOwnership",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9935,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "22379:8:8"
},
"parameters": {
"id": 9934,
"nodeType": "ParameterList",
"parameters": [],
"src": "22369:2:8"
},
"returnParameters": {
"id": 9938,
"nodeType": "ParameterList",
"parameters": [],
"src": "22398:0:8"
},
"scope": 10039,
"src": "22340:100:8",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13320
],
"body": {
"id": 9976,
"nodeType": "Block",
"src": "22621:141:8",
"statements": [
{
"assignments": [
9961
],
"declarations": [
{
"constant": false,
"id": 9961,
"mutability": "mutable",
"name": "reserve",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9976,
"src": "22632:22:8",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_memory_ptr",
"typeString": "struct ConverterBase.Reserve"
},
"typeName": {
"contractScope": null,
"id": 9960,
"name": "Reserve",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 9023,
"src": "22632:7:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
"typeString": "struct ConverterBase.Reserve"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 9965,
"initialValue": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 9962,
"name": "reserves",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9040,
"src": "22657:8:8",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
"typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
}
},
"id": 9964,
"indexExpression": {
"argumentTypes": null,
"id": 9963,
"name": "_address",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9946,
"src": "22666:8:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "22657:18:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_storage",
"typeString": "struct ConverterBase.Reserve storage ref"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "22632:43:8"
},
{
"expression": {
"argumentTypes": null,
"components": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 9966,
"name": "reserve",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9961,
"src": "22693:7:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_memory_ptr",
"typeString": "struct ConverterBase.Reserve memory"
}
},
"id": 9967,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "balance",
"nodeType": "MemberAccess",
"referencedDeclaration": 9014,
"src": "22693:15:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 9968,
"name": "reserve",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9961,
"src": "22710:7:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_memory_ptr",
"typeString": "struct ConverterBase.Reserve memory"
}
},
"id": 9969,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "weight",
"nodeType": "MemberAccess",
"referencedDeclaration": 9016,
"src": "22710:14:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
{
"argumentTypes": null,
"hexValue": "66616c7365",
"id": 9970,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "22726:5:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "false"
},
{
"argumentTypes": null,
"hexValue": "66616c7365",
"id": 9971,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "22733:5:8",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "false"
},
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 9972,
"name": "reserve",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9961,
"src": "22740:7:8",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Reserve_$9023_memory_ptr",
"typeString": "struct ConverterBase.Reserve memory"
}
},
"id": 9973,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "isSet",
"nodeType": "MemberAccess",
"referencedDeclaration": 9022,
"src": "22740:13:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
}
],
"id": 9974,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "22692:62:8",
"typeDescriptions": {
"typeIdentifier": "t_tuple$_t_uint256_$_t_uint32_$_t_bool_$_t_bool_$_t_bool_$",
"typeString": "tuple(uint256,uint32,bool,bool,bool)"
}
},
"functionReturnParameters": 9959,
"id": 9975,
"nodeType": "Return",
"src": "22686:68:8"
}
]
},
"documentation": {
"id": 9944,
"nodeType": "StructuredDocumentation",
"src": "22448:60:8",
"text": " @dev deprecated, backward compatibility"
},
"functionSelector": "0e53aae9",
"id": 9977,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "connectors",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9948,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "22568:8:8"
},
"parameters": {
"id": 9947,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9946,
"mutability": "mutable",
"name": "_address",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9977,
"src": "22534:20:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9945,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "22534:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "22533:22:8"
},
"returnParameters": {
"id": 9959,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9950,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9977,
"src": "22586:7:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9949,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "22586:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9952,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9977,
"src": "22595:6:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 9951,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "22595:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9954,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9977,
"src": "22603:4:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 9953,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "22603:4:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9956,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9977,
"src": "22609:4:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 9955,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "22609:4:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 9958,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9977,
"src": "22615:4:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 9957,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "22615:4:8",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "22585:35:8"
},
"scope": 10039,
"src": "22514:248:8",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13334
],
"body": {
"id": 9991,
"nodeType": "Block",
"src": "22920:61:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 9986,
"name": "ConverterBase",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 10039,
"src": "22938:13:8",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_ConverterBase_$10039_$",
"typeString": "type(contract ConverterBase)"
}
},
"id": 9987,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "reserveTokens",
"nodeType": "MemberAccess",
"referencedDeclaration": 9036,
"src": "22938:27:8",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
"typeString": "contract IERC20Token[] storage ref"
}
},
"id": 9989,
"indexExpression": {
"argumentTypes": null,
"id": 9988,
"name": "_index",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9980,
"src": "22966:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "22938:35:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"functionReturnParameters": 9985,
"id": 9990,
"nodeType": "Return",
"src": "22931:42:8"
}
]
},
"documentation": {
"id": 9978,
"nodeType": "StructuredDocumentation",
"src": "22770:60:8",
"text": " @dev deprecated, backward compatibility"
},
"functionSelector": "19b64015",
"id": 9992,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "connectorTokens",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9982,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "22889:8:8"
},
"parameters": {
"id": 9981,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9980,
"mutability": "mutable",
"name": "_index",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9992,
"src": "22861:14:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 9979,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "22861:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "22860:16:8"
},
"returnParameters": {
"id": 9985,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9984,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 9992,
"src": "22907:11:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 9983,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "22907:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "22906:13:8"
},
"scope": 10039,
"src": "22836:145:8",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13339
],
"body": {
"id": 10002,
"nodeType": "Block",
"src": "23124:45:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 9999,
"name": "reserveTokenCount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9561,
"src": "23142:17:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_uint16_$",
"typeString": "function () view returns (uint16)"
}
},
"id": 10000,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "23142:19:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
},
"functionReturnParameters": 9998,
"id": 10001,
"nodeType": "Return",
"src": "23135:26:8"
}
]
},
"documentation": {
"id": 9993,
"nodeType": "StructuredDocumentation",
"src": "22989:60:8",
"text": " @dev deprecated, backward compatibility"
},
"functionSelector": "71f52bf3",
"id": 10003,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "connectorTokenCount",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 9995,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "23098:8:8"
},
"parameters": {
"id": 9994,
"nodeType": "ParameterList",
"parameters": [],
"src": "23083:2:8"
},
"returnParameters": {
"id": 9998,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 9997,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10003,
"src": "23116:6:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
},
"typeName": {
"id": 9996,
"name": "uint16",
"nodeType": "ElementaryTypeName",
"src": "23116:6:8",
"typeDescriptions": {
"typeIdentifier": "t_uint16",
"typeString": "uint16"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "23115:8:8"
},
"scope": 10039,
"src": "23055:114:8",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
13327
],
"body": {
"id": 10016,
"nodeType": "Block",
"src": "23340:57:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 10013,
"name": "_connectorToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 10006,
"src": "23373:15:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
],
"id": 10012,
"name": "reserveBalance",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9699,
"src": "23358:14:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21127_$returns$_t_uint256_$",
"typeString": "function (contract IERC20Token) view returns (uint256)"
}
},
"id": 10014,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "23358:31:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 10011,
"id": 10015,
"nodeType": "Return",
"src": "23351:38:8"
}
]
},
"documentation": {
"id": 10004,
"nodeType": "StructuredDocumentation",
"src": "23177:60:8",
"text": " @dev deprecated, backward compatibility"
},
"functionSelector": "d8959512",
"id": 10017,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "getConnectorBalance",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 10008,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "23313:8:8"
},
"parameters": {
"id": 10007,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 10006,
"mutability": "mutable",
"name": "_connectorToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10017,
"src": "23272:27:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 10005,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "23272:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "23271:29:8"
},
"returnParameters": {
"id": 10011,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 10010,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10017,
"src": "23331:7:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 10009,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "23331:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "23330:9:8"
},
"scope": 10039,
"src": "23243:154:8",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"body": {
"id": 10037,
"nodeType": "Block",
"src": "23598:81:8",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 10032,
"name": "_sourceToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 10020,
"src": "23635:12:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
{
"argumentTypes": null,
"id": 10033,
"name": "_targetToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 10022,
"src": "23649:12:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
{
"argumentTypes": null,
"id": 10034,
"name": "_amount",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 10024,
"src": "23663:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
{
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 10031,
"name": "targetAmountAndFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 9256,
"src": "23616:18:8",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21127_$_t_contract$_IERC20Token_$21127_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
"typeString": "function (contract IERC20Token,contract IERC20Token,uint256) view returns (uint256,uint256)"
}
},
"id": 10035,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "23616:55:8",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
"typeString": "tuple(uint256,uint256)"
}
},
"functionReturnParameters": 10030,
"id": 10036,
"nodeType": "Return",
"src": "23609:62:8"
}
]
},
"documentation": {
"id": 10018,
"nodeType": "StructuredDocumentation",
"src": "23405:60:8",
"text": " @dev deprecated, backward compatibility"
},
"functionSelector": "1e1401f8",
"id": 10038,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "getReturn",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 10025,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 10020,
"mutability": "mutable",
"name": "_sourceToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10038,
"src": "23490:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 10019,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "23490:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 10022,
"mutability": "mutable",
"name": "_targetToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10038,
"src": "23516:24:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
},
"typeName": {
"contractScope": null,
"id": 10021,
"name": "IERC20Token",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21127,
"src": "23516:11:8",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Token_$21127",
"typeString": "contract IERC20Token"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 10024,
"mutability": "mutable",
"name": "_amount",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10038,
"src": "23542:15:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 10023,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "23542:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "23489:69:8"
},
"returnParameters": {
"id": 10030,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 10027,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10038,
"src": "23580:7:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 10026,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "23580:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 10029,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 10038,
"src": "23589:7:8",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 10028,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "23589:7:8",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "23579:18:8"
},
"scope": 10039,
"src": "23471:208:8",
"stateMutability": "view",
"virtual": false,
"visibility": "public"
}
],
"scope": 10040,
"src": "1648:22034:8"
}
],
"src": "52:23632:8"
},
"compiler": {
"name": "solc",
"version": "0.6.12+commit.27d51765.Emscripten.clang"
},
"networks": {},
"schemaVersion": "3.2.3",
"updatedAt": "2020-10-20T08:24:47.712Z",
"devdoc": {
"details": "ConverterBase The converter contains the main logic for conversions between different ERC20 tokens. It is also the upgradable part of the mechanism (note that upgrades are opt-in). The anchor must be set on construction and cannot be changed afterwards. Wrappers are provided for some of the anchor's functions, for easier access. Once the converter accepts ownership of the anchor, it becomes the anchor's sole controller and can execute any of its functions. To upgrade the converter, anchor ownership must be transferred to a new converter, along with any relevant data. Note that the converter can transfer anchor ownership to a new converter that doesn't allow upgrades anymore, for finalizing the relationship between the converter and the anchor. Converter types (defined as uint16 type) - 0 = liquid token converter 1 = liquidity pool v1 converter 2 = liquidity pool v2 converter Note that converters don't currently support tokens with transfer fees.",
"events": {
"Activation(uint16,address,bool)": {
"details": "triggered when the converter is activated",
"params": {
"_activated": "true if the converter was activated, false if it was deactivated",
"_anchor": "converter anchor",
"_type": "converter type"
}
},
"Conversion(address,address,address,uint256,uint256,int256)": {
"details": "triggered when a conversion between two tokens occurs",
"params": {
"_amount": "amount converted, in the source token",
"_conversionFee": "conversion fee",
"_fromToken": "source ERC20 token",
"_return": "amount returned, minus conversion fee",
"_toToken": "target ERC20 token",
"_trader": "wallet that initiated the trade"
}
},
"ConversionFeeUpdate(uint32,uint32)": {
"details": "triggered when the conversion fee is updated",
"params": {
"_newFee": "new fee percentage, represented in ppm",
"_prevFee": "previous fee percentage, represented in ppm"
}
},
"TokenRateUpdate(address,address,uint256,uint256)": {
"details": "triggered when the rate between two tokens in the converter changes note that the event might be dispatched for rate updates between any two tokens in the converter note that prior to version 28, you should use the 'PriceDataUpdate' event instead",
"params": {
"_rateD": "rate of 1 unit of `_token1` in `_token2` (denominator)",
"_rateN": "rate of 1 unit of `_token1` in `_token2` (numerator)",
"_token1": "address of the first token",
"_token2": "address of the second token"
}
}
},
"kind": "dev",
"methods": {
"acceptAnchorOwnership()": {
"details": "accepts ownership of the anchor after an ownership transfer most converters are also activated as soon as they accept the anchor ownership can only be called by the contract owner note that prior to version 28, you should use 'acceptTokenOwnership' instead"
},
"acceptOwnership()": {
"details": "used by a new owner to accept an ownership transfer"
},
"acceptTokenOwnership()": {
"details": "deprecated, backward compatibility"
},
"addReserve(address,uint32)": {
"details": "defines a new reserve token for the converter can only be called by the owner while the converter is inactive",
"params": {
"_token": "address of the reserve token",
"_weight": "reserve weight, represented in ppm, 1-1000000"
}
},
"connectorTokenCount()": {
"details": "deprecated, backward compatibility"
},
"connectorTokens(uint256)": {
"details": "deprecated, backward compatibility"
},
"connectors(address)": {
"details": "deprecated, backward compatibility"
},
"constructor": {
"details": "used by sub-contracts to initialize a new converter",
"params": {
"_anchor": "anchor governed by the converter",
"_maxConversionFee": "maximum conversion fee, represented in ppm",
"_registry": "address of a contract registry contract"
}
},
"convert(address,address,uint256,address,address)": {
"details": "converts a specific amount of source tokens to target tokens can only be called by the bancor network contract",
"params": {
"_amount": "amount of tokens to convert (in units of the source token)",
"_beneficiary": "wallet to receive the conversion result",
"_sourceToken": "source ERC20 token",
"_targetToken": "target ERC20 token",
"_trader": "address of the caller who executed the conversion"
},
"returns": {
"_0": "amount of tokens received (in units of the target token)"
}
},
"getConnectorBalance(address)": {
"details": "deprecated, backward compatibility"
},
"getReturn(address,address,uint256)": {
"details": "deprecated, backward compatibility"
},
"hasETHReserve()": {
"details": "checks whether or not the converter has an ETH reserve",
"returns": {
"_0": "true if the converter has an ETH reserve, false otherwise"
}
},
"isActive()": {
"details": "returns true if the converter is active, false otherwise",
"returns": {
"_0": "true if the converter is active, false otherwise"
}
},
"isV28OrHigher()": {
"details": "checks whether or not the converter version is 28 or higher",
"returns": {
"_0": "true, since the converter version is 28 or higher"
}
},
"reserveBalance(address)": {
"details": "returns the reserve's balance note that prior to version 17, you should use 'getConnectorBalance' instead",
"params": {
"_reserveToken": "reserve token contract address"
},
"returns": {
"_0": "reserve balance"
}
},
"reserveTokenCount()": {
"details": "returns the number of reserve tokens defined note that prior to version 17, you should use 'connectorTokenCount' instead",
"returns": {
"_0": "number of reserve tokens"
}
},
"reserveWeight(address)": {
"details": "returns the reserve's weight added in version 28",
"params": {
"_reserveToken": "reserve token contract address"
},
"returns": {
"_0": "reserve weight"
}
},
"restoreRegistry()": {
"details": "restores the previous contract-registry"
},
"restrictRegistryUpdate(bool)": {
"details": "restricts the permission to update the contract-registry",
"params": {
"_onlyOwnerCanUpdateRegistry": "indicates whether or not permission is restricted to owner only"
}
},
"setConversionFee(uint32)": {
"details": "updates the current conversion fee can only be called by the contract owner",
"params": {
"_conversionFee": "new conversion fee, represented in ppm"
}
},
"setConversionWhitelist(address)": {
"details": "allows the owner to update & enable the conversion whitelist contract address when set, only addresses that are whitelisted are actually allowed to use the converter note that the whitelist check is actually done by the BancorNetwork contract",
"params": {
"_whitelist": "address of a whitelist contract"
}
},
"token()": {
"details": "deprecated since version 28, backward compatibility - use only for earlier versions"
},
"transferAnchorOwnership(address)": {
"details": "transfers the anchor ownership the new owner needs to accept the transfer can only be called by the converter upgrder while the upgrader is the owner note that prior to version 28, you should use 'transferAnchorOwnership' instead",
"params": {
"_newOwner": "new token owner"
}
},
"transferOwnership(address)": {
"details": "allows transferring the contract ownership the new owner still needs to accept the transfer can only be called by the contract owner",
"params": {
"_newOwner": "new contract owner"
}
},
"transferTokenOwnership(address)": {
"details": "deprecated, backward compatibility"
},
"updateRegistry()": {
"details": "updates to the new contract-registry"
},
"upgrade()": {
"details": "upgrades the converter to the latest version can only be called by the owner note that the owner needs to call acceptOwnership on the new converter after the upgrade"
},
"withdrawETH(address)": {
"details": "withdraws ether can only be called by the owner if the converter is inactive or by upgrader contract can only be called after the upgrader contract has accepted the ownership of this contract can only be called if the converter has an ETH reserve",
"params": {
"_to": "address to send the ETH to"
}
},
"withdrawFromAnchor(address,address,uint256)": {
"details": "withdraws tokens held by the anchor and sends them to an account can only be called by the owner",
"params": {
"_amount": "amount to withdraw",
"_to": "account to receive the new amount",
"_token": "ERC20 token contract address"
}
},
"withdrawTokens(address,address,uint256)": {
"details": "withdraws tokens held by the converter and sends them to an account can only be called by the owner note that reserve tokens can only be withdrawn by the owner while the converter is inactive unless the owner is the converter upgrader contract",
"params": {
"_amount": "amount to withdraw",
"_to": "account to receive the new amount",
"_token": "ERC20 token contract address"
}
}
},
"stateVariables": {
"version": {
"details": "version number"
}
},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}