Interest Rate Strategy
The InterestRateStrategy
contract manages loan interest rates with theses being dependent on the utilisation of liquidity within the lending pool reserve
Methods
calculateInterestRate()
function calculateInterestRate(uint256 reserveId, uint256 availableLiquidity, uint256 totalStableDebt, uint256 totalVariableDebt, uint256 averageStableBorrowRate, uint256 reserveFactor)
Calculates the interest rate depending on the reserve's state and configurations.
reserveId
uint256
id of the targeted reserve
availableLiquidity
uint256
amount of liquidity available in the reserve
totalStableDebt
uint256
total amount of stable debt
totalVariableDebt
uint256
total amount of variable debt
averageStableBorrowRate
uint256
average stable borrow rate
reserveFactor
uint256
reserve factor for the reserve, i.e. percentage of yield going to the protocol
Returns
liquidityRate
uint256
liquidity rate of the reserve
stableBorrowRate
uint256
stable borrow interest rate
variableBorrowRate
uint256
variable borrow interest rate
calculateInterestRates()
function calculateInterestRate(uint256 reserveId, address asset, address fToken, uint256 liquidityAdded, uint256 liquidityTaken, uint256 totalStableDebt, uint256 totalVariableDebt, uint256 averageStableBorrowRate, uint256 reserveFactor)
reserveId
uint256
id of the targeted reserve
asset
address
address of the currency
fToken
address
address of the fToken proxy
liquidityAdded
uint256
amount of liquidity added
liquidityTaken
uint256
amount of liquidity taken
totalStableDebt
uint256
total amount of stable debt
totalVariableDebt
uint256
total amount of variable debt
averageStableBorrowRate
uint256
average stable borrow rate
reserveFactor
uint256
reserve factor for the reserve, i.e. percentage of yield going to the protocol
Calculates the interest rate depending on the reserve's state and configurations.
Returns
liquidityRate
uint256
liquidity rate of the reserve
stableBorrowRate
uint256
stable borrow interest rate
variableBorrowRate
uint256
variable borrow interest rate
View Methods
variableRateSlope1()
function variableRateSlope1()
Returns slope1
of the variable interest rate.
variableRateSlope2()
function variableRateSlope2()
Returns slope2
of the variable interest rate.
stableRateSlope1()
function stableRateSlope1()
Returns slope1
of the stable interest rate.
stableRateSlope2()
function stableRateSlope2()
Returns slope2
of the stable interest rate.
baseVariableBorrowRate()
function baseVariableBorrowRate()
Returns the base variable borrow rate
.
maxVariableBorrowRate()
function maxVariableBorrowRate()
Returns the max variable borrow rate
.
ABI
Interest Rate Strategy ABI
{
"abi": [
{
"inputs": [
{
"internalType": "contract IAddressProvider",
"name": "addressprovider_",
"type": "address"
},
{
"internalType": "uint256",
"name": "optimalUtilizationRate_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "baseVariableBorrowRate_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "variableRateSlope1_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "variableRateSlope2_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "stableRateSlope1_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "stableRateSlope2_",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "EXCESS_UTILIZATION_RATE",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "OPTIMAL_UTILIZATION_RATE",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "addressProvider",
"outputs": [
{
"internalType": "contract IAddressProvider",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "baseVariableBorrowRate",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "reserveId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "availableLiquidity",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "totalStableDebt",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "totalVariableDebt",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "averageStableBorrowRate",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "reserveFactor",
"type": "uint256"
}
],
"name": "calculateInterestRate",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "reserveId",
"type": "uint256"
},
{
"internalType": "address",
"name": "asset",
"type": "address"
},
{
"internalType": "address",
"name": "fToken",
"type": "address"
},
{
"internalType": "uint256",
"name": "liquidityAdded",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "liquidityTaken",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "totalStableDebt",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "totalVariableDebt",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "averageStableBorrowRate",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "reserveFactor",
"type": "uint256"
}
],
"name": "calculateInterestRates",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "maxVariableBorrowRate",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "stableRateSlope1",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "stableRateSlope2",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "variableRateSlope1",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "variableRateSlope2",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": {
"object": "0x61018060405234801561001157600080fd5b50604051610dd0380380610dd0833981016040819052610030916100b5565b85608081815250506100608661004e61009060201b6107bc1760201c565b6100a060201b6107cc1790919060201c565b60a0526001600160a01b0390961660c05260e093909352610100919091526101205261014052506101605261013f565b6b033b2e3c9fd0803ce800000090565b60006100ac828461011e565b90505b92915050565b600080600080600080600060e0888a0312156100d057600080fd5b87516001600160a01b03811681146100e757600080fd5b602089015160408a015160608b015160808c015160a08d015160c0909d0151949e939d50919b909a50909850965090945092505050565b818103818111156100af57634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e05161010051610120516101405161016051610bb76102196000396000818161022d015261059101526000818160b0015281816105c101526106ab0152600081816101530152818161025801526105f20152600081816101790152818161029d0152818161063d01526107150152600081816102070152818161027c0152818161061c015261073b01526000818161010f015261040501526000818160e8015261052b0152600081816101e3015281816104ff0152818161054f0152818161067701526106ef0152610bb76000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80637b832f58116100715780637b832f58146101775780637d8a872d1461019d5780639b9c5b49146101cb578063a15f30ac146101de578063b258954414610205578063ccab01a31461022b57600080fd5b80630bdf953f146100ae57806317319873146100e35780632954018c1461010a578063643d41f21461014957806365614f8114610151575b600080fd5b7f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b6100d07f000000000000000000000000000000000000000000000000000000000000000081565b6101317f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100da565b6100d0610251565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b6101b06101ab3660046109be565b6102cc565b604080519384526020840192909252908201526060016100da565b6101b06101d9366004610a36565b61037b565b6100d07f000000000000000000000000000000000000000000000000000000000000000081565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b60006102c77f00000000000000000000000000000000000000000000000000000000000000006102c17f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006107e1565b906107e1565b905090565b6040516370a0823160e01b81526001600160a01b0388811660048301526000918291829182918d16906370a0823190602401602060405180830381865afa15801561031b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033f9190610a79565b90506103558961034f838d6107e1565b906107cc565b90506103658d828a8a8a8a61037b565b9350935093505099509950999650505050505050565b60008060006103b26040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6103bc88886107e1565b808252600060408301819052602083018190526060830152156103f75780516103f2906103ea908b906107e1565b8251906107ed565b6103fa565b60005b8160800181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663617e06056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610461573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104859190610a92565b6001600160a01b031663f12c8b358b6040518263ffffffff1660e01b81526004016104b291815260200190565b602060405180830381865afa1580156104cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f39190610a79565b604082015260808101517f0000000000000000000000000000000000000000000000000000000000000000101561066c5760006105877f00000000000000000000000000000000000000000000000000000000000000006105817f000000000000000000000000000000000000000000000000000000000000000085608001516107cc90919063ffffffff16565b906107ed565b90506105e56105b67f00000000000000000000000000000000000000000000000000000000000000008361082f565b60408401516102c1907f00000000000000000000000000000000000000000000000000000000000000006107e1565b60408301526106616106177f00000000000000000000000000000000000000000000000000000000000000008361082f565b6102c17f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006107e1565b602083015250610766565b6106db6106d06106a97f000000000000000000000000000000000000000000000000000000000000000084608001516107ed90919063ffffffff16565b7f00000000000000000000000000000000000000000000000000000000000000009061082f565b6040830151906107e1565b6040820152608081015161076090610739907f000000000000000000000000000000000000000000000000000000000000000090610581907f000000000000000000000000000000000000000000000000000000000000000061082f565b7f0000000000000000000000000000000000000000000000000000000000000000906107e1565b60208201525b610799610775612710876107cc565b610793836080015161078d8c8c87602001518d610865565b9061082f565b906108cd565b606082018190526040820151602090920151909b919a5098509650505050505050565b6b033b2e3c9fd0803ce800000090565b60006107d88284610acc565b90505b92915050565b60006107d88284610adf565b6000806107fb600284610af2565b90506108278361082161081a876b033b2e3c9fd0803ce800000061097e565b84906107e1565b9061098a565b949350505050565b60006107d86b033b2e3c9fd0803ce800000061082161084e868661097e565b6102c160026b033b2e3c9fd0803ce8000000610af2565b60008061087286866107e1565b905080600003610886576000915050610827565b60006108958561078d88610996565b905060006108a68561078d8a610996565b905060006108c06108b685610996565b61058185856107e1565b9998505050505050505050565b60008215806108da575081155b156108e7575060006107db565b816108f56002612710610af2565b61090190600019610acc565b61090b9190610af2565b8311156040518060400160405280600381526020016203230360ec1b815250906109515760405162461bcd60e51b81526004016109489190610b14565b60405180910390fd5b50612710610960600282610af2565b61096a8486610b62565b6109749190610adf565b6107d89190610af2565b60006107d88284610b62565b60006107d88284610af2565b60006107db82633b9aca0061097e565b6001600160a01b03811681146109bb57600080fd5b50565b60008060008060008060008060006101208a8c0312156109dd57600080fd5b8935985060208a01356109ef816109a6565b975060408a01356109ff816109a6565b989b979a5097986060810135985060808101359760a0820135975060c0820135965060e08201359550610100909101359350915050565b60008060008060008060c08789031215610a4f57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208284031215610a8b57600080fd5b5051919050565b600060208284031215610aa457600080fd5b8151610aaf816109a6565b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156107db576107db610ab6565b808201808211156107db576107db610ab6565b600082610b0f57634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b81811015610b4157858101830151858201604001528201610b25565b506000604082860101526040601f19601f8301168501019250505092915050565b6000816000190483118215151615610b7c57610b7c610ab6565b50029056fea2646970667358221220b9696d36d84199f46617ec26b205bc5caf91a18f7fb7c5e906d3a5ed738abe9964736f6c63430008100033",
"sourceMap": "958:9371:144:-:0;;;2520:751;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2853:23;2826:50;;;;;;2913:45;2934:23;2913:16;:14;;;;;:16;;:::i;:::-;:20;;;;;;:45;;;;:::i;:::-;2887:71;;-1:-1:-1;;;;;2969:34:144;;;;;3014:49;;;;;3074:41;;;;;3126;;3178:37;;-1:-1:-1;3226:37:144;;958:9371;;641:76:134;524:4;;641:76::o;3122:96:71:-;3180:7;3206:5;3210:1;3206;:5;:::i;:::-;3199:12;;3122:96;;;;;:::o;14:686:176:-;164:6;172;180;188;196;204;212;265:3;253:9;244:7;240:23;236:33;233:53;;;282:1;279;272:12;233:53;308:16;;-1:-1:-1;;;;;353:31:176;;343:42;;333:70;;399:1;396;389:12;333:70;467:2;452:18;;446:25;511:2;496:18;;490:25;555:2;540:18;;534:25;599:3;584:19;;578:26;644:3;629:19;;623:26;689:3;674:19;;;668:26;422:5;;446:25;;-1:-1:-1;490:25:176;;534;;-1:-1:-1;578:26:176;;-1:-1:-1;623:26:176;-1:-1:-1;668:26:176;;-1:-1:-1;14:686:176;-1:-1:-1;;;14:686:176:o;705:225::-;772:9;;;793:11;;;790:134;;;846:10;841:3;837:20;834:1;827:31;881:4;878:1;871:15;909:4;906:1;899:15;705:225;958:9371:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
"linkReferences": {}
},
"deployedBytecode": {
"object": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80637b832f58116100715780637b832f58146101775780637d8a872d1461019d5780639b9c5b49146101cb578063a15f30ac146101de578063b258954414610205578063ccab01a31461022b57600080fd5b80630bdf953f146100ae57806317319873146100e35780632954018c1461010a578063643d41f21461014957806365614f8114610151575b600080fd5b7f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b6100d07f000000000000000000000000000000000000000000000000000000000000000081565b6101317f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100da565b6100d0610251565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b6101b06101ab3660046109be565b6102cc565b604080519384526020840192909252908201526060016100da565b6101b06101d9366004610a36565b61037b565b6100d07f000000000000000000000000000000000000000000000000000000000000000081565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b60006102c77f00000000000000000000000000000000000000000000000000000000000000006102c17f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006107e1565b906107e1565b905090565b6040516370a0823160e01b81526001600160a01b0388811660048301526000918291829182918d16906370a0823190602401602060405180830381865afa15801561031b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033f9190610a79565b90506103558961034f838d6107e1565b906107cc565b90506103658d828a8a8a8a61037b565b9350935093505099509950999650505050505050565b60008060006103b26040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6103bc88886107e1565b808252600060408301819052602083018190526060830152156103f75780516103f2906103ea908b906107e1565b8251906107ed565b6103fa565b60005b8160800181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663617e06056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610461573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104859190610a92565b6001600160a01b031663f12c8b358b6040518263ffffffff1660e01b81526004016104b291815260200190565b602060405180830381865afa1580156104cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f39190610a79565b604082015260808101517f0000000000000000000000000000000000000000000000000000000000000000101561066c5760006105877f00000000000000000000000000000000000000000000000000000000000000006105817f000000000000000000000000000000000000000000000000000000000000000085608001516107cc90919063ffffffff16565b906107ed565b90506105e56105b67f00000000000000000000000000000000000000000000000000000000000000008361082f565b60408401516102c1907f00000000000000000000000000000000000000000000000000000000000000006107e1565b60408301526106616106177f00000000000000000000000000000000000000000000000000000000000000008361082f565b6102c17f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006107e1565b602083015250610766565b6106db6106d06106a97f000000000000000000000000000000000000000000000000000000000000000084608001516107ed90919063ffffffff16565b7f00000000000000000000000000000000000000000000000000000000000000009061082f565b6040830151906107e1565b6040820152608081015161076090610739907f000000000000000000000000000000000000000000000000000000000000000090610581907f000000000000000000000000000000000000000000000000000000000000000061082f565b7f0000000000000000000000000000000000000000000000000000000000000000906107e1565b60208201525b610799610775612710876107cc565b610793836080015161078d8c8c87602001518d610865565b9061082f565b906108cd565b606082018190526040820151602090920151909b919a5098509650505050505050565b6b033b2e3c9fd0803ce800000090565b60006107d88284610acc565b90505b92915050565b60006107d88284610adf565b6000806107fb600284610af2565b90506108278361082161081a876b033b2e3c9fd0803ce800000061097e565b84906107e1565b9061098a565b949350505050565b60006107d86b033b2e3c9fd0803ce800000061082161084e868661097e565b6102c160026b033b2e3c9fd0803ce8000000610af2565b60008061087286866107e1565b905080600003610886576000915050610827565b60006108958561078d88610996565b905060006108a68561078d8a610996565b905060006108c06108b685610996565b61058185856107e1565b9998505050505050505050565b60008215806108da575081155b156108e7575060006107db565b816108f56002612710610af2565b61090190600019610acc565b61090b9190610af2565b8311156040518060400160405280600381526020016203230360ec1b815250906109515760405162461bcd60e51b81526004016109489190610b14565b60405180910390fd5b50612710610960600282610af2565b61096a8486610b62565b6109749190610adf565b6107d89190610af2565b60006107d88284610b62565b60006107d88284610af2565b60006107db82633b9aca0061097e565b6001600160a01b03811681146109bb57600080fd5b50565b60008060008060008060008060006101208a8c0312156109dd57600080fd5b8935985060208a01356109ef816109a6565b975060408a01356109ff816109a6565b989b979a5097986060810135985060808101359760a0820135975060c0820135965060e08201359550610100909101359350915050565b60008060008060008060c08789031215610a4f57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208284031215610a8b57600080fd5b5051919050565b600060208284031215610aa457600080fd5b8151610aaf816109a6565b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156107db576107db610ab6565b808201808211156107db576107db610ab6565b600082610b0f57634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b81811015610b4157858101830151858201604001528201610b25565b506000604082860101526040601f19601f8301168501019250505092915050565b6000816000190483118215151615610b7c57610b7c610ab6565b50029056fea2646970667358221220b9696d36d84199f46617ec26b205bc5caf91a18f7fb7c5e906d3a5ed738abe9964736f6c63430008100033",
"sourceMap": "958:9371:144:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3509:103;3587:17;3509:103;;;160:25:176;;;148:2;133:18;3509:103:144;;;;;;;;1590:48;;;;;1647:49;;;;;;;;-1:-1:-1;;;;;386:32:176;;;368:51;;356:2;341:18;1647:49:144;196:229:176;3863:173:144;;;:::i;3394:107::-;3474:19;3394:107;;3279;3359:19;3279:107;;4772:925;;;;;;:::i;:::-;;:::i;:::-;;;;1643:25:176;;;1699:2;1684:18;;1677:34;;;;1727:18;;;1720:34;1631:2;1616:18;4772:925:144;1441:319:176;6603:2429:144;;;;;;:::i;:::-;;:::i;1296:49::-;;;;;3731:124;3824:23;3731:124;;3620:103;3698:17;3620:103;;3863:173;3928:7;3955:73;4008:19;3955:48;:23;3983:19;3955:27;:48::i;:::-;:52;;:73::i;:::-;3948:80;;3863:173;:::o;4772:925::-;5288:42;;-1:-1:-1;;;5288:42:144;;-1:-1:-1;;;;;386:32:176;;;5288:42:144;;;368:51:176;5180:7:144;;;;;;;;5288:34;;;;;341:18:176;;5288:42:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5259:71;-1:-1:-1;5394:58:144;5437:14;5394:38;5259:71;5417:14;5394:22;:38::i;:::-;:42;;:58::i;:::-;5373:79;;5472:217;5508:9;5532:18;5565:15;5595:17;5627:23;5665:13;5472:21;:217::i;:::-;5465:224;;;;;;;4772:925;;;;;;;;;;;;;:::o;6603:2429::-;6930:7;6952;6974;7009:38;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7009:38:144;7077;:15;7097:17;7077:19;:38::i;:::-;7060:55;;;:14;7126:28;;;:32;;;7169:30;;;:34;;;7214:25;;;:29;7279:19;:115;;7378:14;;7333:61;;7355:38;;:18;;:22;:38::i;:::-;7333:14;;;:21;:61::i;:::-;7279:115;;;7315:1;7279:115;7256:4;:20;;:138;;;;;7458:15;-1:-1:-1;;;;;7458:37:144;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7438:94:144;;7533:9;7438:105;;;;;;;;;;;;;160:25:176;;148:2;133:18;;14:177;7438:105:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7407:28;;;:136;7560:20;;;;7583:24;-1:-1:-1;7556:979:144;;;7624:34;7661:82;7719:23;7661:50;7686:24;7661:4;:20;;;:24;;:50;;;;:::i;:::-;:57;;:82::i;:::-;7624:119;-1:-1:-1;7791:141:144;7865:52;:17;7624:119;7865:24;:52::i;:::-;7791:28;;;;:51;;7824:17;7791:32;:51::i;:141::-;7760:28;;;:172;7982:140;8053:54;:19;8080:26;8053;:54::i;:::-;7982:48;:23;8010:19;7982:27;:48::i;:140::-;7949:30;;;:173;-1:-1:-1;7556:979:144;;;8186:145;8237:79;8262:53;8290:24;8262:4;:20;;;:27;;:53;;;;:::i;:::-;8237:17;;:24;:79::i;:::-;8186:28;;;;;:32;:145::i;:::-;8155:28;;;:176;8427:20;;;;8381:142;;8427:81;;8483:24;;8427:48;;8455:19;8427:27;:48::i;:81::-;8381:23;;:27;:142::i;:::-;8348:30;;;:175;7556:979;8575:290;8813:51;470:3:133;8850:13:144;8813:36;:51::i;:::-;8575:216;8770:4;:20;;;8575:177;8611:15;8641:17;8673:4;:30;;;8718:23;8575:21;:177::i;:::-;:194;;:216::i;:::-;:237;;:290::i;:::-;8547:25;;;:318;;;8940:28;;;;8983:30;;;;;8547:318;;8940:28;;-1:-1:-1;8983:30:144;-1:-1:-1;6603:2429:144;-1:-1:-1;;;;;;;6603:2429:144:o;641:76:134:-;524:4;;641:76::o;3122:96:71:-;3180:7;3206:5;3210:1;3206;:5;:::i;:::-;3199:12;;3122:96;;;;;:::o;2755:::-;2813:7;2839:5;2843:1;2839;:5;:::i;1425:158:134:-;1486:7;;1522:5;1526:1;1522;:5;:::i;:::-;1506:21;-1:-1:-1;1547:28:134;1573:1;1547:21;1557:10;:1;524:4;1557:5;:10::i;:::-;1547:5;;:9;:21::i;:::-;:25;;:28::i;:::-;1540:35;1425:158;-1:-1:-1;;;;1425:158:134:o;1291:126::-;1352:7;1379:30;524:4;1379:21;1391:8;:1;1397;1391:5;:8::i;:::-;571:7;577:1;524:4;571:7;:::i;9597:729:144:-;9821:7;;9861:38;:15;9881:17;9861:19;:38::i;:::-;9841:58;;9916:9;9929:1;9916:14;9912:28;;9939:1;9932:8;;;;;9912:28;9953;9984:62;10020:25;9984:28;:17;:26;:28::i;:62::-;9953:93;;10059:26;10088:65;10122:30;10088:26;:15;:24;:26::i;:65::-;10059:94;;10166:25;10208:73;10260:20;:9;:18;:20::i;:::-;10208:44;:20;10233:18;10208:24;:44::i;:73::-;10166:115;9597:729;-1:-1:-1;;;;;;;;;9597:729:144:o;1026:333:133:-;1104:7;1123:10;;;:29;;-1:-1:-1;1137:15:133;;1123:29;1119:58;;;-1:-1:-1;1169:1:133;1162:8;;1119:58;1237:10;540:21;560:1;470:3;540:21;:::i;:::-;1201:32;;-1:-1:-1;;1201:32:133;:::i;:::-;1200:47;;;;:::i;:::-;1191:5;:56;;1249:35;;;;;;;;;;;;;-1:-1:-1;;;1249:35:133;;;1183:102;;;;;-1:-1:-1;;;1183:102:133;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;470:3:133;540:21;560:1;470:3;540:21;:::i;:::-;1300:18;1308:10;1300:5;:18;:::i;:::-;:33;;;;:::i;:::-;1299:55;;;;:::i;3465:96:71:-;3523:7;3549:5;3553:1;3549;:5;:::i;3850:96::-;3908:7;3934:5;3938:1;3934;:5;:::i;1771:107:134:-;1823:7;1850:20;:1;629:3;1850:5;:20::i;430:131:176:-;-1:-1:-1;;;;;505:31:176;;495:42;;485:70;;551:1;548;541:12;485:70;430:131;:::o;566:870::-;697:6;705;713;721;729;737;745;753;761;814:3;802:9;793:7;789:23;785:33;782:53;;;831:1;828;821:12;782:53;867:9;854:23;844:33;;927:2;916:9;912:18;899:32;940:31;965:5;940:31;:::i;:::-;990:5;-1:-1:-1;1047:2:176;1032:18;;1019:32;1060:33;1019:32;1060:33;:::i;:::-;566:870;;;;-1:-1:-1;1112:7:176;;1166:2;1151:18;;1138:32;;-1:-1:-1;1217:3:176;1202:19;;1189:33;;1269:3;1254:19;;1241:33;;-1:-1:-1;1321:3:176;1306:19;;1293:33;;-1:-1:-1;1373:3:176;1358:19;;1345:33;;-1:-1:-1;1425:3:176;1410:19;;;1397:33;;-1:-1:-1;566:870:176;-1:-1:-1;;566:870:176:o;1765:523::-;1869:6;1877;1885;1893;1901;1909;1962:3;1950:9;1941:7;1937:23;1933:33;1930:53;;;1979:1;1976;1969:12;1930:53;-1:-1:-1;;2002:23:176;;;2072:2;2057:18;;2044:32;;-1:-1:-1;2123:2:176;2108:18;;2095:32;;2174:2;2159:18;;2146:32;;-1:-1:-1;2225:3:176;2210:19;;2197:33;;-1:-1:-1;2277:3:176;2262:19;2249:33;;-1:-1:-1;1765:523:176;-1:-1:-1;1765:523:176:o;2501:184::-;2571:6;2624:2;2612:9;2603:7;2599:23;2595:32;2592:52;;;2640:1;2637;2630:12;2592:52;-1:-1:-1;2663:16:176;;2501:184;-1:-1:-1;2501:184:176:o;2690:251::-;2760:6;2813:2;2801:9;2792:7;2788:23;2784:32;2781:52;;;2829:1;2826;2819:12;2781:52;2861:9;2855:16;2880:31;2905:5;2880:31;:::i;:::-;2930:5;2690:251;-1:-1:-1;;;2690:251:176:o;2946:127::-;3007:10;3002:3;2998:20;2995:1;2988:31;3038:4;3035:1;3028:15;3062:4;3059:1;3052:15;3078:128;3145:9;;;3166:11;;;3163:37;;;3180:18;;:::i;3211:125::-;3276:9;;;3297:10;;;3294:36;;;3310:18;;:::i;3341:217::-;3381:1;3407;3397:132;;3451:10;3446:3;3442:20;3439:1;3432:31;3486:4;3483:1;3476:15;3514:4;3511:1;3504:15;3397:132;-1:-1:-1;3543:9:176;;3341:217::o;3563:548::-;3675:4;3704:2;3733;3722:9;3715:21;3765:6;3759:13;3808:6;3803:2;3792:9;3788:18;3781:34;3833:1;3843:140;3857:6;3854:1;3851:13;3843:140;;;3952:14;;;3948:23;;3942:30;3918:17;;;3937:2;3914:26;3907:66;3872:10;;3843:140;;;3847:3;4032:1;4027:2;4018:6;4007:9;4003:22;3999:31;3992:42;4102:2;4095;4091:7;4086:2;4078:6;4074:15;4070:29;4059:9;4055:45;4051:54;4043:62;;;;3563:548;;;;:::o;4116:168::-;4156:7;4222:1;4218;4214:6;4210:14;4207:1;4204:21;4199:1;4192:9;4185:17;4181:45;4178:71;;;4229:18;;:::i;:::-;-1:-1:-1;4269:9:176;;4116:168::o",
"linkReferences": {},
"immutableReferences": {
"67153": [
{
"start": 483,
"length": 32
},
{
"start": 1279,
"length": 32
},
{
"start": 1359,
"length": 32
},
{
"start": 1655,
"length": 32
},
{
"start": 1775,
"length": 32
}
],
"67156": [
{
"start": 232,
"length": 32
},
{
"start": 1323,
"length": 32
}
],
"67159": [
{
"start": 271,
"length": 32
},
{
"start": 1029,
"length": 32
}
],
"67161": [
{
"start": 519,
"length": 32
},
{
"start": 636,
"length": 32
},
{
"start": 1564,
"length": 32
},
{
"start": 1851,
"length": 32
}
],
"67163": [
{
"start": 377,
"length": 32
},
{
"start": 669,
"length": 32
},
{
"start": 1597,
"length": 32
},
{
"start": 1813,
"length": 32
}
],
"67165": [
{
"start": 339,
"length": 32
},
{
"start": 600,
"length": 32
},
{
"start": 1522,
"length": 32
}
],
"67167": [
{
"start": 176,
"length": 32
},
{
"start": 1473,
"length": 32
},
{
"start": 1707,
"length": 32
}
],
"67169": [
{
"start": 557,
"length": 32
},
{
"start": 1425,
"length": 32
}
]
}
},
"methodIdentifiers": {
"EXCESS_UTILIZATION_RATE()": "17319873",
"OPTIMAL_UTILIZATION_RATE()": "a15f30ac",
"addressProvider()": "2954018c",
"baseVariableBorrowRate()": "b2589544",
"calculateInterestRate(uint256,uint256,uint256,uint256,uint256,uint256)": "9b9c5b49",
"calculateInterestRates(uint256,address,address,uint256,uint256,uint256,uint256,uint256,uint256)": "7d8a872d",
"maxVariableBorrowRate()": "643d41f2",
"stableRateSlope1()": "0bdf953f",
"stableRateSlope2()": "ccab01a3",
"variableRateSlope1()": "7b832f58",
"variableRateSlope2()": "65614f81"
},
"rawMetadata": "{\"compiler\":{\"version\":\"0.8.16+commit.07a7930e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IAddressProvider\",\"name\":\"addressprovider_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"optimalUtilizationRate_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseVariableBorrowRate_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableRateSlope1_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableRateSlope2_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateSlope1_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateSlope2_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"EXCESS_UTILIZATION_RATE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMAL_UTILIZATION_RATE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressProvider\",\"outputs\":[{\"internalType\":\"contract IAddressProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseVariableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"availableLiquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"averageStableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"}],\"name\":\"calculateInterestRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"fToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidityAdded\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityTaken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"averageStableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"}],\"name\":\"calculateInterestRates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxVariableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stableRateSlope1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stableRateSlope2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"variableRateSlope1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"variableRateSlope2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"FluidNFT*\",\"details\":\"The model of interest rate is based on 2 slopes, one before the `OPTIMAL_UTILIZATION_RATE` point of utilization and another from that one to 100%\",\"kind\":\"dev\",\"methods\":{\"calculateInterestRate(uint256,uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Calculates the interest rates depending on the asset reserve's state and configurations.\",\"params\":{\"availableLiquidity\":\"The liquidity available in the corresponding fToken\",\"averageStableBorrowRate\":\"The weighted average of all the stable rate loans\",\"reserveFactor\":\"The reserve portion of the interest that goes to the treasury of the market\",\"totalStableDebt\":\"The total borrowed from the reserve at a stable rate\",\"totalVariableDebt\":\"The total borrowed from the reserve at a variable rate\"},\"returns\":{\"_0\":\"The liquidity rate, the stable borrow rate and the variable borrow rate*\"}},\"calculateInterestRates(uint256,address,address,uint256,uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Calculates the interest rates depending on the reserve's state and configurations\",\"params\":{\"asset\":\"The address of the reserve asset\",\"fToken\":\"The address of the reserve fToken\",\"liquidityAdded\":\"The liquidity added during the operation\",\"liquidityTaken\":\"The liquidity taken during the operation\",\"reserveFactor\":\"The reserve portion of the interest that goes to the treasury of the market\",\"totalStableDebt\":\"The total borrowed from the reserve a stable rate\",\"totalVariableDebt\":\"The total borrowed from the reserve at a variable rate\"},\"returns\":{\"_0\":\"The liquidity rate, the stable borrow rate and the variable borrow rate*\"}}},\"stateVariables\":{\"EXCESS_UTILIZATION_RATE\":{\"details\":\"This constant represents the excess utilization rate above the optimal. It's always equal to 1-optimal utilization rate. Added as a constant here for gas optimizations. Expressed in ray*\"},\"OPTIMAL_UTILIZATION_RATE\":{\"details\":\"this constant represents the utilization rate at which the pool aims to obtain most competitive borrow rates. Expressed in ray*\"}},\"title\":\"InterestRateStrategy contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Implfements the calculation of the interest rates depending on the reserve state\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/protocol/risk/InterestRateStrategy.sol\":\"InterestRateStrategy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@chainlink/=lib/chainlink/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol\":{\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2\",\"dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol\":{\"keccak256\":\"0x0f633a0223d9a1dcccfcf38a64c9de0874dfcbfac0c6941ccf074d63a2ce0e1e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://864a40efcffdf408044c332a5aa38ec5618ed7b4eecb8f65faf45671bd6cdc65\",\"dweb:/ipfs/QmQJquTMtc6fgm5JQzGdsGpA2fqBe3MHWEdt2qzaLySMdN\"]},\"src/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x6730abfcd8770e3279dad6137bf619ab98ee8b049e6dd85d2fbe87ba6224fde8\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://9b7d1588eab025b049f858ab2f329be7fec220198d956b9b61bf0b9bddc5761a\",\"dweb:/ipfs/QmTaFkYSUfWmbpsyE2TKC1QvP6eTDggZ72ZWodBhydqt5X\"]},\"src/interfaces/IInterestRateStrategy.sol\":{\"keccak256\":\"0x71f8b91324433fbdb16a38e5b7c214e7c30094167a7aaf77fcb045194a63af16\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://ce7a18b9c191a676ab68f5d59449c22bead494ccba0c2272e6c8bd606a1c0fd3\",\"dweb:/ipfs/QmZ4byVDnoAH67dSSXppkhTbvdNs7mmQadUnmreoeZVbSv\"]},\"src/interfaces/ILendingRateManager.sol\":{\"keccak256\":\"0x6078c32591ae3ced86c344ad2f228fbcc625f09cd59a8f7014355adb89dfcde0\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://fa594c0ceb1a0a085a6b077ac0729663f839f33f760eb8775ff1b3d25415e097\",\"dweb:/ipfs/QmXU74R73UDHiwvVaU9LRrC1tHaDq5eCerenKQtFX97UL6\"]},\"src/protocol/libraries/helpers/Errors.sol\":{\"keccak256\":\"0x490e76871922e89a13ba0bb88977be18c143fa9d0cd9afb033744a3d81479c52\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://1c409d4d1e1689d8d8f3c3e361198d20f3b6476608c5316d8e2d91f52373e8e3\",\"dweb:/ipfs/QmRZaYpxqjmBpbxb51KqswKYPSeCsU3ejbmk5E3MrMxJaM\"]},\"src/protocol/libraries/math/PercentageMath.sol\":{\"keccak256\":\"0xb84274fc3effba81036256cf7fde67b3dbfe86c4ffd0e062711a3270157952a2\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://3ecaf26e713b39d89ee21fb8bfefe55fe2fec4a2f5a2bffba7612f82182b7262\",\"dweb:/ipfs/QmZ6oXpNspwBEkiJEz1EhsU4EVBpG3anNjtzcycNEgAkfe\"]},\"src/protocol/libraries/math/WadRayMath.sol\":{\"keccak256\":\"0xb29e8edc0e0e6bfead27945357c9e4a66e0c11e58ff3b87ee68ed1b5ca416735\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://d1b4377995155f32bb6c3ba558875c617fa63601c597099d3460063ac2a15d93\",\"dweb:/ipfs/QmUvCE6Q2J62sMgQCCEbQauWSYJpMiu3QCgWa6mZnEmcK2\"]},\"src/protocol/risk/InterestRateStrategy.sol\":{\"keccak256\":\"0x15b2793f86d490b8d366e510d5a5c36f01450caf00bc748f1481a82ed02f7a0d\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://cbaedb9dd3f31336ec1c37844f19815a7d5c54bf271bbdaaea259f68ebfaf046\",\"dweb:/ipfs/QmUdVBDHqzL5AoNRMZxDyfAshSM315qgtrX4DBwidA8TdS\"]}},\"version\":1}",
"metadata": {
"compiler": {
"version": "0.8.16+commit.07a7930e"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [
{
"internalType": "contract IAddressProvider",
"name": "addressprovider_",
"type": "address"
},
{
"internalType": "uint256",
"name": "optimalUtilizationRate_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "baseVariableBorrowRate_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "variableRateSlope1_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "variableRateSlope2_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "stableRateSlope1_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "stableRateSlope2_",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "EXCESS_UTILIZATION_RATE",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "OPTIMAL_UTILIZATION_RATE",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "addressProvider",
"outputs": [
{
"internalType": "contract IAddressProvider",
"name": "",
"type": "address"
}
]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "baseVariableBorrowRate",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
},
{
"inputs": [
{
"internalType": "uint256",
"name": "reserveId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "availableLiquidity",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "totalStableDebt",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "totalVariableDebt",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "averageStableBorrowRate",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "reserveFactor",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function",
"name": "calculateInterestRate",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
},
{
"inputs": [
{
"internalType": "uint256",
"name": "reserveId",
"type": "uint256"
},
{
"internalType": "address",
"name": "asset",
"type": "address"
},
{
"internalType": "address",
"name": "fToken",
"type": "address"
},
{
"internalType": "uint256",
"name": "liquidityAdded",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "liquidityTaken",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "totalStableDebt",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "totalVariableDebt",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "averageStableBorrowRate",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "reserveFactor",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function",
"name": "calculateInterestRates",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "maxVariableBorrowRate",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "stableRateSlope1",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "stableRateSlope2",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "variableRateSlope1",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "variableRateSlope2",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
}
],
"devdoc": {
"kind": "dev",
"methods": {
"calculateInterestRate(uint256,uint256,uint256,uint256,uint256,uint256)": {
"details": "Calculates the interest rates depending on the asset reserve's state and configurations.",
"params": {
"availableLiquidity": "The liquidity available in the corresponding fToken",
"averageStableBorrowRate": "The weighted average of all the stable rate loans",
"reserveFactor": "The reserve portion of the interest that goes to the treasury of the market",
"totalStableDebt": "The total borrowed from the reserve at a stable rate",
"totalVariableDebt": "The total borrowed from the reserve at a variable rate"
},
"returns": {
"_0": "The liquidity rate, the stable borrow rate and the variable borrow rate*"
}
},
"calculateInterestRates(uint256,address,address,uint256,uint256,uint256,uint256,uint256,uint256)": {
"details": "Calculates the interest rates depending on the reserve's state and configurations",
"params": {
"asset": "The address of the reserve asset",
"fToken": "The address of the reserve fToken",
"liquidityAdded": "The liquidity added during the operation",
"liquidityTaken": "The liquidity taken during the operation",
"reserveFactor": "The reserve portion of the interest that goes to the treasury of the market",
"totalStableDebt": "The total borrowed from the reserve a stable rate",
"totalVariableDebt": "The total borrowed from the reserve at a variable rate"
},
"returns": {
"_0": "The liquidity rate, the stable borrow rate and the variable borrow rate*"
}
}
},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"remappings": [
":@chainlink/=lib/chainlink/",
":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/",
":ds-test/=lib/forge-std/lib/ds-test/src/",
":forge-std/=lib/forge-std/src/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"bytecodeHash": "ipfs"
},
"compilationTarget": {
"src/protocol/risk/InterestRateStrategy.sol": "InterestRateStrategy"
},
"libraries": {}
},
"sources": {
"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": {
"keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff",
"urls": [
"bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2",
"dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF"
],
"license": "MIT"
},
"lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol": {
"keccak256": "0x0f633a0223d9a1dcccfcf38a64c9de0874dfcbfac0c6941ccf074d63a2ce0e1e",
"urls": [
"bzz-raw://864a40efcffdf408044c332a5aa38ec5618ed7b4eecb8f65faf45671bd6cdc65",
"dweb:/ipfs/QmQJquTMtc6fgm5JQzGdsGpA2fqBe3MHWEdt2qzaLySMdN"
],
"license": "MIT"
},
"src/interfaces/IAddressProvider.sol": {
"keccak256": "0x6730abfcd8770e3279dad6137bf619ab98ee8b049e6dd85d2fbe87ba6224fde8",
"urls": [
"bzz-raw://9b7d1588eab025b049f858ab2f329be7fec220198d956b9b61bf0b9bddc5761a",
"dweb:/ipfs/QmTaFkYSUfWmbpsyE2TKC1QvP6eTDggZ72ZWodBhydqt5X"
],
"license": "AGPL-3.0"
},
"src/interfaces/IInterestRateStrategy.sol": {
"keccak256": "0x71f8b91324433fbdb16a38e5b7c214e7c30094167a7aaf77fcb045194a63af16",
"urls": [
"bzz-raw://ce7a18b9c191a676ab68f5d59449c22bead494ccba0c2272e6c8bd606a1c0fd3",
"dweb:/ipfs/QmZ4byVDnoAH67dSSXppkhTbvdNs7mmQadUnmreoeZVbSv"
],
"license": "AGPL-3.0"
},
"src/interfaces/ILendingRateManager.sol": {
"keccak256": "0x6078c32591ae3ced86c344ad2f228fbcc625f09cd59a8f7014355adb89dfcde0",
"urls": [
"bzz-raw://fa594c0ceb1a0a085a6b077ac0729663f839f33f760eb8775ff1b3d25415e097",
"dweb:/ipfs/QmXU74R73UDHiwvVaU9LRrC1tHaDq5eCerenKQtFX97UL6"
],
"license": "AGPL-3.0"
},
"src/protocol/libraries/helpers/Errors.sol": {
"keccak256": "0x490e76871922e89a13ba0bb88977be18c143fa9d0cd9afb033744a3d81479c52",
"urls": [
"bzz-raw://1c409d4d1e1689d8d8f3c3e361198d20f3b6476608c5316d8e2d91f52373e8e3",
"dweb:/ipfs/QmRZaYpxqjmBpbxb51KqswKYPSeCsU3ejbmk5E3MrMxJaM"
],
"license": "AGPL-3.0"
},
"src/protocol/libraries/math/PercentageMath.sol": {
"keccak256": "0xb84274fc3effba81036256cf7fde67b3dbfe86c4ffd0e062711a3270157952a2",
"urls": [
"bzz-raw://3ecaf26e713b39d89ee21fb8bfefe55fe2fec4a2f5a2bffba7612f82182b7262",
"dweb:/ipfs/QmZ6oXpNspwBEkiJEz1EhsU4EVBpG3anNjtzcycNEgAkfe"
],
"license": "AGPL-3.0"
},
"src/protocol/libraries/math/WadRayMath.sol": {
"keccak256": "0xb29e8edc0e0e6bfead27945357c9e4a66e0c11e58ff3b87ee68ed1b5ca416735",
"urls": [
"bzz-raw://d1b4377995155f32bb6c3ba558875c617fa63601c597099d3460063ac2a15d93",
"dweb:/ipfs/QmUvCE6Q2J62sMgQCCEbQauWSYJpMiu3QCgWa6mZnEmcK2"
],
"license": "AGPL-3.0"
},
"src/protocol/risk/InterestRateStrategy.sol": {
"keccak256": "0x15b2793f86d490b8d366e510d5a5c36f01450caf00bc748f1481a82ed02f7a0d",
"urls": [
"bzz-raw://cbaedb9dd3f31336ec1c37844f19815a7d5c54bf271bbdaaea259f68ebfaf046",
"dweb:/ipfs/QmUdVBDHqzL5AoNRMZxDyfAshSM315qgtrX4DBwidA8TdS"
],
"license": "AGPL-3.0"
}
},
"version": 1
},
"ast": {
"absolutePath": "src/protocol/risk/InterestRateStrategy.sol",
"id": 67613,
"exportedSymbols": {
"IAddressProvider": [
45718
],
"IERC20Upgradeable": [
27189
],
"IInterestRateStrategy": [
46846
],
"ILendingRateManager": [
47434
],
"InterestRateStrategy": [
67612
],
"PercentageMath": [
62719
],
"SafeMath": [
36719
],
"WadRayMath": [
62965
]
},
"nodeType": "SourceUnit",
"src": "38:10291:144",
"nodes": [
{
"id": 67124,
"nodeType": "PragmaDirective",
"src": "38:23:144",
"nodes": [],
"literals": [
"solidity",
"0.8",
".16"
]
},
{
"id": 67126,
"nodeType": "ImportDirective",
"src": "65:83:144",
"nodes": [],
"absolutePath": "src/interfaces/IInterestRateStrategy.sol",
"file": "../../interfaces/IInterestRateStrategy.sol",
"nameLocation": "-1:-1:-1",
"scope": 67613,
"sourceUnit": 46847,
"symbolAliases": [
{
"foreign": {
"id": 67125,
"name": "IInterestRateStrategy",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 46846,
"src": "74:21:144",
"typeDescriptions": {}
},
"nameLocation": "-1:-1:-1"
}
],
"unitAlias": ""
},
{
"id": 67128,
"nodeType": "ImportDirective",
"src": "150:79:144",
"nodes": [],
"absolutePath": "src/interfaces/ILendingRateManager.sol",
"file": "../../interfaces/ILendingRateManager.sol",
"nameLocation": "-1:-1:-1",
"scope": 67613,
"sourceUnit": 47435,
"symbolAliases": [
{
"foreign": {
"id": 67127,
"name": "ILendingRateManager",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 47434,
"src": "159:19:144",
"typeDescriptions": {}
},
"nameLocation": "-1:-1:-1"
}
],
"unitAlias": ""
},
{
"id": 67130,
"nodeType": "ImportDirective",
"src": "231:73:144",
"nodes": [],
"absolutePath": "src/interfaces/IAddressProvider.sol",
"file": "../../interfaces/IAddressProvider.sol",
"nameLocation": "-1:-1:-1",
"scope": 67613,
"sourceUnit": 45719,
"symbolAliases": [
{
"foreign": {
"id": 67129,
"name": "IAddressProvider",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 45718,
"src": "240:16:144",
"typeDescriptions": {}
},
"nameLocation": "-1:-1:-1"
}
],
"unitAlias": ""
},
{
"id": 67132,
"nodeType": "ImportDirective",
"src": "308:70:144",
"nodes": [],
"absolutePath": "src/protocol/libraries/math/PercentageMath.sol",
"file": "../libraries/math/PercentageMath.sol",
"nameLocation": "-1:-1:-1",
"scope": 67613,
"sourceUnit": 62720,
"symbolAliases": [
{
"foreign": {
"id": 67131,
"name": "PercentageMath",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 62719,
"src": "317:14:144",
"typeDescriptions": {}
},
"nameLocation": "-1:-1:-1"
}
],
"unitAlias": ""
},
{
"id": 67134,
"nodeType": "ImportDirective",
"src": "380:62:144",
"nodes": [],
"absolutePath": "src/protocol/libraries/math/WadRayMath.sol",
"file": "../libraries/math/WadRayMath.sol",
"nameLocation": "-1:-1:-1",
"scope": 67613,
"sourceUnit": 62966,
"symbolAliases": [
{
"foreign": {
"id": 67133,
"name": "WadRayMath",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 62965,
"src": "389:10:144",
"typeDescriptions": {}
},
"nameLocation": "-1:-1:-1"
}
],
"unitAlias": ""
},
{
"id": 67136,
"nodeType": "ImportDirective",
"src": "446:106:144",
"nodes": [],
"absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol",
"file": "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol",
"nameLocation": "-1:-1:-1",
"scope": 67613,
"sourceUnit": 27190,
"symbolAliases": [
{
"foreign": {
"id": 67135,
"name": "IERC20Upgradeable",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 27189,
"src": "455:17:144",
"typeDescriptions": {}
},
"nameLocation": "-1:-1:-1"
}
],
"unitAlias": ""
},
{
"id": 67138,
"nodeType": "ImportDirective",
"src": "554:75:144",
"nodes": [],
"absolutePath": "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol",
"file": "@openzeppelin/contracts/utils/math/SafeMath.sol",
"nameLocation": "-1:-1:-1",
"scope": 67613,
"sourceUnit": 36720,
"symbolAliases": [
{
"foreign": {
"id": 67137,
"name": "SafeMath",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 36719,
"src": "563:8:144",
"typeDescriptions": {}
},
"nameLocation": "-1:-1:-1"
}
],
"unitAlias": ""
},
{
"id": 67612,
"nodeType": "ContractDefinition",
"src": "958:9371:144",
"nodes": [
{
"id": 67144,
"nodeType": "UsingForDirective",
"src": "1020:29:144",
"nodes": [],
"global": false,
"libraryName": {
"id": 67142,
"name": "WadRayMath",
"nameLocations": [
"1026:10:144"
],
"nodeType": "IdentifierPath",
"referencedDeclaration": 62965,
"src": "1026:10:144"
},
"typeName": {
"id": 67143,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1041:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
},
{
"id": 67147,
"nodeType": "UsingForDirective",
"src": "1055:27:144",
"nodes": [],
"global": false,
"libraryName": {
"id": 67145,
"name": "SafeMath",
"nameLocations": [
"1061:8:144"
],
"nodeType": "IdentifierPath",
"referencedDeclaration": 36719,
"src": "1061:8:144"
},
"typeName": {
"id": 67146,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1074:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
},
{
"id": 67150,
"nodeType": "UsingForDirective",
"src": "1088:33:144",
"nodes": [],
"global": false,
"libraryName": {
"id": 67148,
"name": "PercentageMath",
"nameLocations": [
"1094:14:144"
],
"nodeType": "IdentifierPath",
"referencedDeclaration": 62719,
"src": "1094:14:144"
},
"typeName": {
"id": 67149,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1113:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
},
{
"id": 67153,
"nodeType": "VariableDeclaration",
"src": "1296:49:144",
"nodes": [],
"constant": false,
"documentation": {
"id": 67151,
"nodeType": "StructuredDocumentation",
"src": "1129:161:144",
"text": " @dev this constant represents the utilization rate at which the pool aims to obtain most competitive borrow rates.\n Expressed in ray*"
},
"functionSelector": "a15f30ac",
"mutability": "immutable",
"name": "OPTIMAL_UTILIZATION_RATE",
"nameLocation": "1321:24:144",
"scope": 67612,
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67152,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1296:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "public"
},
{
"id": 67156,
"nodeType": "VariableDeclaration",
"src": "1590:48:144",
"nodes": [],
"constant": false,
"documentation": {
"id": 67154,
"nodeType": "StructuredDocumentation",
"src": "1354:228:144",
"text": " @dev This constant represents the excess utilization rate above the optimal. It's always equal to\n 1-optimal utilization rate. Added as a constant here for gas optimizations.\n Expressed in ray*"
},
"functionSelector": "17319873",
"mutability": "immutable",
"name": "EXCESS_UTILIZATION_RATE",
"nameLocation": "1615:23:144",
"scope": 67612,
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67155,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1590:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "public"
},
{
"id": 67159,
"nodeType": "VariableDeclaration",
"src": "1647:49:144",
"nodes": [],
"constant": false,
"functionSelector": "2954018c",
"mutability": "immutable",
"name": "addressProvider",
"nameLocation": "1681:15:144",
"scope": 67612,
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IAddressProvider_$45718",
"typeString": "contract IAddressProvider"
},
"typeName": {
"id": 67158,
"nodeType": "UserDefinedTypeName",
"pathNode": {
"id": 67157,
"name": "IAddressProvider",
"nameLocations": [
"1647:16:144"
],
"nodeType": "IdentifierPath",
"referencedDeclaration": 45718,
"src": "1647:16:144"
},
"referencedDeclaration": 45718,
"src": "1647:16:144",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IAddressProvider_$45718",
"typeString": "contract IAddressProvider"
}
},
"visibility": "public"
},
{
"id": 67161,
"nodeType": "VariableDeclaration",
"src": "1783:50:144",
"nodes": [],
"constant": false,
"mutability": "immutable",
"name": "_baseVariableBorrowRate",
"nameLocation": "1810:23:144",
"scope": 67612,
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67160,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1783:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"id": 67163,
"nodeType": "VariableDeclaration",
"src": "1963:46:144",
"nodes": [],
"constant": false,
"mutability": "immutable",
"name": "_variableRateSlope1",
"nameLocation": "1990:19:144",
"scope": 67612,
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67162,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1963:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"id": 67165,
"nodeType": "VariableDeclaration",
"src": "2130:46:144",
"nodes": [],
"constant": false,
"mutability": "immutable",
"name": "_variableRateSlope2",
"nameLocation": "2157:19:144",
"scope": 67612,
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67164,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2130:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"id": 67167,
"nodeType": "VariableDeclaration",
"src": "2304:44:144",
"nodes": [],
"constant": false,
"mutability": "immutable",
"name": "_stableRateSlope1",
"nameLocation": "2331:17:144",
"scope": 67612,
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67166,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2304:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"id": 67169,
"nodeType": "VariableDeclaration",
"src": "2467:44:144",
"nodes": [],
"constant": false,
"mutability": "immutable",
"name": "_stableRateSlope2",
"nameLocation": "2494:17:144",
"scope": 67612,
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67168,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2467:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"id": 67225,
"nodeType": "FunctionDefinition",
"src": "2520:751:144",
"nodes": [],
"body": {
"id": 67224,
"nodeType": "Block",
"src": "2815:456:144",
"nodes": [],
"statements": [
{
"expression": {
"id": 67189,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 67187,
"name": "OPTIMAL_UTILIZATION_RATE",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67153,
"src": "2826:24:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"id": 67188,
"name": "optimalUtilizationRate_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67174,
"src": "2853:23:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "2826:50:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67190,
"nodeType": "ExpressionStatement",
"src": "2826:50:144"
},
{
"expression": {
"id": 67198,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 67191,
"name": "EXCESS_UTILIZATION_RATE",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67156,
"src": "2887:23:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"arguments": [
{
"id": 67196,
"name": "optimalUtilizationRate_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67174,
"src": "2934:23:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"arguments": [],
"expression": {
"argumentTypes": [],
"expression": {
"id": 67192,
"name": "WadRayMath",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 62965,
"src": "2913:10:144",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_WadRayMath_$62965_$",
"typeString": "type(library WadRayMath)"
}
},
"id": 67193,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "2924:3:144",
"memberName": "ray",
"nodeType": "MemberAccess",
"referencedDeclaration": 62753,
"src": "2913:14:144",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$__$returns$_t_uint256_$",
"typeString": "function () pure returns (uint256)"
}
},
"id": 67194,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "2913:16:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67195,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "2930:3:144",
"memberName": "sub",
"nodeType": "MemberAccess",
"referencedDeclaration": 36598,
"src": "2913:20:144",
"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": 67197,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "2913:45:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "2887:71:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67199,
"nodeType": "ExpressionStatement",
"src": "2887:71:144"
},
{
"expression": {
"id": 67202,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 67200,
"name": "addressProvider",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67159,
"src": "2969:15:144",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IAddressProvider_$45718",
"typeString": "contract IAddressProvider"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"id": 67201,
"name": "addressprovider_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67172,
"src": "2987:16:144",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IAddressProvider_$45718",
"typeString": "contract IAddressProvider"
}
},
"src": "2969:34:144",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IAddressProvider_$45718",
"typeString": "contract IAddressProvider"
}
},
"id": 67203,
"nodeType": "ExpressionStatement",
"src": "2969:34:144"
},
{
"expression": {
"id": 67206,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 67204,
"name": "_baseVariableBorrowRate",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67161,
"src": "3014:23:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"id": 67205,
"name": "baseVariableBorrowRate_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67176,
"src": "3040:23:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3014:49:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67207,
"nodeType": "ExpressionStatement",
"src": "3014:49:144"
},
{
"expression": {
"id": 67210,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 67208,
"name": "_variableRateSlope1",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67163,
"src": "3074:19:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"id": 67209,
"name": "variableRateSlope1_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67178,
"src": "3096:19:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3074:41:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67211,
"nodeType": "ExpressionStatement",
"src": "3074:41:144"
},
{
"expression": {
"id": 67214,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 67212,
"name": "_variableRateSlope2",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67165,
"src": "3126:19:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"id": 67213,
"name": "variableRateSlope2_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67180,
"src": "3148:19:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3126:41:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67215,
"nodeType": "ExpressionStatement",
"src": "3126:41:144"
},
{
"expression": {
"id": 67218,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 67216,
"name": "_stableRateSlope1",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67167,
"src": "3178:17:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"id": 67217,
"name": "stableRateSlope1_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67182,
"src": "3198:17:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3178:37:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67219,
"nodeType": "ExpressionStatement",
"src": "3178:37:144"
},
{
"expression": {
"id": 67222,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 67220,
"name": "_stableRateSlope2",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67169,
"src": "3226:17:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"id": 67221,
"name": "stableRateSlope2_",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67184,
"src": "3246:17:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3226:37:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67223,
"nodeType": "ExpressionStatement",
"src": "3226:37:144"
}
]
},
"implemented": true,
"kind": "constructor",
"modifiers": [],
"name": "",
"nameLocation": "-1:-1:-1",
"parameters": {
"id": 67185,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 67172,
"mutability": "mutable",
"name": "addressprovider_",
"nameLocation": "2559:16:144",
"nodeType": "VariableDeclaration",
"scope": 67225,
"src": "2542:33:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IAddressProvider_$45718",
"typeString": "contract IAddressProvider"
},
"typeName": {
"id": 67171,
"nodeType": "UserDefinedTypeName",
"pathNode": {
"id": 67170,
"name": "IAddressProvider",
"nameLocations": [
"2542:16:144"
],
"nodeType": "IdentifierPath",
"referencedDeclaration": 45718,
"src": "2542:16:144"
},
"referencedDeclaration": 45718,
"src": "2542:16:144",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IAddressProvider_$45718",
"typeString": "contract IAddressProvider"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67174,
"mutability": "mutable",
"name": "optimalUtilizationRate_",
"nameLocation": "2594:23:144",
"nodeType": "VariableDeclaration",
"scope": 67225,
"src": "2586:31:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67173,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2586:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67176,
"mutability": "mutable",
"name": "baseVariableBorrowRate_",
"nameLocation": "2636:23:144",
"nodeType": "VariableDeclaration",
"scope": 67225,
"src": "2628:31:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67175,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2628:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67178,
"mutability": "mutable",
"name": "variableRateSlope1_",
"nameLocation": "2678:19:144",
"nodeType": "VariableDeclaration",
"scope": 67225,
"src": "2670:27:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67177,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2670:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67180,
"mutability": "mutable",
"name": "variableRateSlope2_",
"nameLocation": "2716:19:144",
"nodeType": "VariableDeclaration",
"scope": 67225,
"src": "2708:27:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67179,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2708:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67182,
"mutability": "mutable",
"name": "stableRateSlope1_",
"nameLocation": "2754:17:144",
"nodeType": "VariableDeclaration",
"scope": 67225,
"src": "2746:25:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67181,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2746:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67184,
"mutability": "mutable",
"name": "stableRateSlope2_",
"nameLocation": "2790:17:144",
"nodeType": "VariableDeclaration",
"scope": 67225,
"src": "2782:25:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67183,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2782:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "2531:283:144"
},
"returnParameters": {
"id": 67186,
"nodeType": "ParameterList",
"parameters": [],
"src": "2815:0:144"
},
"scope": 67612,
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"id": 67233,
"nodeType": "FunctionDefinition",
"src": "3279:107:144",
"nodes": [],
"body": {
"id": 67232,
"nodeType": "Block",
"src": "3341:45:144",
"nodes": [],
"statements": [
{
"expression": {
"id": 67230,
"name": "_variableRateSlope1",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67163,
"src": "3359:19:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 67229,
"id": 67231,
"nodeType": "Return",
"src": "3352:26:144"
}
]
},
"baseFunctions": [
46772
],
"functionSelector": "7b832f58",
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "variableRateSlope1",
"nameLocation": "3288:18:144",
"parameters": {
"id": 67226,
"nodeType": "ParameterList",
"parameters": [],
"src": "3306:2:144"
},
"returnParameters": {
"id": 67229,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 67228,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 67233,
"src": "3332:7:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67227,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "3332:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "3331:9:144"
},
"scope": 67612,
"stateMutability": "view",
"virtual": false,
"visibility": "external"
},
{
"id": 67241,
"nodeType": "FunctionDefinition",
"src": "3394:107:144",
"nodes": [],
"body": {
"id": 67240,
"nodeType": "Block",
"src": "3456:45:144",
"nodes": [],
"statements": [
{
"expression": {
"id": 67238,
"name": "_variableRateSlope2",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67165,
"src": "3474:19:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 67237,
"id": 67239,
"nodeType": "Return",
"src": "3467:26:144"
}
]
},
"baseFunctions": [
46777
],
"functionSelector": "65614f81",
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "variableRateSlope2",
"nameLocation": "3403:18:144",
"parameters": {
"id": 67234,
"nodeType": "ParameterList",
"parameters": [],
"src": "3421:2:144"
},
"returnParameters": {
"id": 67237,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 67236,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 67241,
"src": "3447:7:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67235,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "3447:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "3446:9:144"
},
"scope": 67612,
"stateMutability": "view",
"virtual": false,
"visibility": "external"
},
{
"id": 67249,
"nodeType": "FunctionDefinition",
"src": "3509:103:144",
"nodes": [],
"body": {
"id": 67248,
"nodeType": "Block",
"src": "3569:43:144",
"nodes": [],
"statements": [
{
"expression": {
"id": 67246,
"name": "_stableRateSlope1",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67167,
"src": "3587:17:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 67245,
"id": 67247,
"nodeType": "Return",
"src": "3580:24:144"
}
]
},
"baseFunctions": [
46782
],
"functionSelector": "0bdf953f",
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "stableRateSlope1",
"nameLocation": "3518:16:144",
"parameters": {
"id": 67242,
"nodeType": "ParameterList",
"parameters": [],
"src": "3534:2:144"
},
"returnParameters": {
"id": 67245,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 67244,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 67249,
"src": "3560:7:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67243,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "3560:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "3559:9:144"
},
"scope": 67612,
"stateMutability": "view",
"virtual": false,
"visibility": "external"
},
{
"id": 67257,
"nodeType": "FunctionDefinition",
"src": "3620:103:144",
"nodes": [],
"body": {
"id": 67256,
"nodeType": "Block",
"src": "3680:43:144",
"nodes": [],
"statements": [
{
"expression": {
"id": 67254,
"name": "_stableRateSlope2",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67169,
"src": "3698:17:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 67253,
"id": 67255,
"nodeType": "Return",
"src": "3691:24:144"
}
]
},
"baseFunctions": [
46787
],
"functionSelector": "ccab01a3",
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "stableRateSlope2",
"nameLocation": "3629:16:144",
"parameters": {
"id": 67250,
"nodeType": "ParameterList",
"parameters": [],
"src": "3645:2:144"
},
"returnParameters": {
"id": 67253,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 67252,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 67257,
"src": "3671:7:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67251,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "3671:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "3670:9:144"
},
"scope": 67612,
"stateMutability": "view",
"virtual": false,
"visibility": "external"
},
{
"id": 67266,
"nodeType": "FunctionDefinition",
"src": "3731:124:144",
"nodes": [],
"body": {
"id": 67265,
"nodeType": "Block",
"src": "3806:49:144",
"nodes": [],
"statements": [
{
"expression": {
"id": 67263,
"name": "_baseVariableBorrowRate",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67161,
"src": "3824:23:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 67262,
"id": 67264,
"nodeType": "Return",
"src": "3817:30:144"
}
]
},
"baseFunctions": [
46792
],
"functionSelector": "b2589544",
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "baseVariableBorrowRate",
"nameLocation": "3740:22:144",
"overrides": {
"id": 67259,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "3779:8:144"
},
"parameters": {
"id": 67258,
"nodeType": "ParameterList",
"parameters": [],
"src": "3762:2:144"
},
"returnParameters": {
"id": 67262,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 67261,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 67266,
"src": "3797:7:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67260,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "3797:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "3796:9:144"
},
"scope": 67612,
"stateMutability": "view",
"virtual": false,
"visibility": "external"
},
{
"id": 67281,
"nodeType": "FunctionDefinition",
"src": "3863:173:144",
"nodes": [],
"body": {
"id": 67280,
"nodeType": "Block",
"src": "3937:99:144",
"nodes": [],
"statements": [
{
"expression": {
"arguments": [
{
"id": 67277,
"name": "_variableRateSlope2",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67165,
"src": "4008:19:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"arguments": [
{
"id": 67274,
"name": "_variableRateSlope1",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67163,
"src": "3983:19:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"id": 67272,
"name": "_baseVariableBorrowRate",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67161,
"src": "3955:23:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67273,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "3979:3:144",
"memberName": "add",
"nodeType": "MemberAccess",
"referencedDeclaration": 36583,
"src": "3955:27:144",
"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": 67275,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "3955:48:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67276,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "4004:3:144",
"memberName": "add",
"nodeType": "MemberAccess",
"referencedDeclaration": 36583,
"src": "3955:52:144",
"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": 67278,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "3955:73:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 67271,
"id": 67279,
"nodeType": "Return",
"src": "3948:80:144"
}
]
},
"baseFunctions": [
46797
],
"functionSelector": "643d41f2",
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "maxVariableBorrowRate",
"nameLocation": "3872:21:144",
"overrides": {
"id": 67268,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "3910:8:144"
},
"parameters": {
"id": 67267,
"nodeType": "ParameterList",
"parameters": [],
"src": "3893:2:144"
},
"returnParameters": {
"id": 67271,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 67270,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 67281,
"src": "3928:7:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67269,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "3928:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "3927:9:144"
},
"scope": 67612,
"stateMutability": "view",
"virtual": false,
"visibility": "external"
},
{
"id": 67339,
"nodeType": "FunctionDefinition",
"src": "4772:925:144",
"nodes": [],
"body": {
"id": 67338,
"nodeType": "Block",
"src": "5248:449:144",
"nodes": [],
"statements": [
{
"assignments": [
67311
],
"declarations": [
{
"constant": false,
"id": 67311,
"mutability": "mutable",
"name": "availableLiquidity",
"nameLocation": "5267:18:144",
"nodeType": "VariableDeclaration",
"scope": 67338,
"src": "5259:26:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67310,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5259:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 67318,
"initialValue": {
"arguments": [
{
"id": 67316,
"name": "fToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67288,
"src": "5323:6:144",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"expression": {
"arguments": [
{
"id": 67313,
"name": "asset",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67286,
"src": "5306:5:144",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 67312,
"name": "IERC20Upgradeable",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 27189,
"src": "5288:17:144",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_IERC20Upgradeable_$27189_$",
"typeString": "type(contract IERC20Upgradeable)"
}
},
"id": 67314,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "5288:24:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Upgradeable_$27189",
"typeString": "contract IERC20Upgradeable"
}
},
"id": 67315,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "5313:9:144",
"memberName": "balanceOf",
"nodeType": "MemberAccess",
"referencedDeclaration": 27146,
"src": "5288:34:144",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
"typeString": "function (address) view external returns (uint256)"
}
},
"id": 67317,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "5288:42:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "5259:71:144"
},
{
"expression": {
"id": 67327,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 67319,
"name": "availableLiquidity",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67311,
"src": "5373:18:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"arguments": [
{
"id": 67325,
"name": "liquidityTaken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67292,
"src": "5437:14:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"arguments": [
{
"id": 67322,
"name": "liquidityAdded",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67290,
"src": "5417:14:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"id": 67320,
"name": "availableLiquidity",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67311,
"src": "5394:18:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67321,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "5413:3:144",
"memberName": "add",
"nodeType": "MemberAccess",
"referencedDeclaration": 36583,
"src": "5394:22:144",
"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": 67323,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "5394:38:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67324,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "5433:3:144",
"memberName": "sub",
"nodeType": "MemberAccess",
"referencedDeclaration": 36598,
"src": "5394:42:144",
"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": 67326,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "5394:58:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "5373:79:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67328,
"nodeType": "ExpressionStatement",
"src": "5373:79:144"
},
{
"expression": {
"arguments": [
{
"id": 67330,
"name": "reserveId",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67284,
"src": "5508:9:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"id": 67331,
"name": "availableLiquidity",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67311,
"src": "5532:18:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"id": 67332,
"name": "totalStableDebt",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67294,
"src": "5565:15:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"id": 67333,
"name": "totalVariableDebt",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67296,
"src": "5595:17:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"id": 67334,
"name": "averageStableBorrowRate",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67298,
"src": "5627:23:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"id": 67335,
"name": "reserveFactor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67300,
"src": "5665:13:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 67329,
"name": "calculateInterestRate",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67551,
"src": "5472:21:144",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$",
"typeString": "function (uint256,uint256,uint256,uint256,uint256,uint256) view returns (uint256,uint256,uint256)"
}
},
"id": 67336,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "5472:217:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
"typeString": "tuple(uint256,uint256,uint256)"
}
},
"functionReturnParameters": 67309,
"id": 67337,
"nodeType": "Return",
"src": "5465:224:144"
}
]
},
"baseFunctions": [
46845
],
"documentation": {
"id": 67282,
"nodeType": "StructuredDocumentation",
"src": "4044:722:144",
"text": " @dev Calculates the interest rates depending on the reserve's state and configurations\n @param asset The address of the reserve asset\n @param fToken The address of the reserve fToken\n @param liquidityAdded The liquidity added during the operation\n @param liquidityTaken The liquidity taken during the operation\n @param totalStableDebt The total borrowed from the reserve a stable rate\n @param totalVariableDebt The total borrowed from the reserve at a variable rate\n @param reserveFactor The reserve portion of the interest that goes to the treasury of the market\n @return The liquidity rate, the stable borrow rate and the variable borrow rate*"
},
"functionSelector": "7d8a872d",
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "calculateInterestRates",
"nameLocation": "4781:22:144",
"overrides": {
"id": 67302,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "5139:8:144"
},
"parameters": {
"id": 67301,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 67284,
"mutability": "mutable",
"name": "reserveId",
"nameLocation": "4822:9:144",
"nodeType": "VariableDeclaration",
"scope": 67339,
"src": "4814:17:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67283,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4814:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67286,
"mutability": "mutable",
"name": "asset",
"nameLocation": "4850:5:144",
"nodeType": "VariableDeclaration",
"scope": 67339,
"src": "4842:13:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 67285,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "4842:7:144",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67288,
"mutability": "mutable",
"name": "fToken",
"nameLocation": "4874:6:144",
"nodeType": "VariableDeclaration",
"scope": 67339,
"src": "4866:14:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 67287,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "4866:7:144",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67290,
"mutability": "mutable",
"name": "liquidityAdded",
"nameLocation": "4899:14:144",
"nodeType": "VariableDeclaration",
"scope": 67339,
"src": "4891:22:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67289,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4891:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67292,
"mutability": "mutable",
"name": "liquidityTaken",
"nameLocation": "4932:14:144",
"nodeType": "VariableDeclaration",
"scope": 67339,
"src": "4924:22:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67291,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4924:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67294,
"mutability": "mutable",
"name": "totalStableDebt",
"nameLocation": "4965:15:144",
"nodeType": "VariableDeclaration",
"scope": 67339,
"src": "4957:23:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67293,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4957:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67296,
"mutability": "mutable",
"name": "totalVariableDebt",
"nameLocation": "4999:17:144",
"nodeType": "VariableDeclaration",
"scope": 67339,
"src": "4991:25:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67295,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4991:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67298,
"mutability": "mutable",
"name": "averageStableBorrowRate",
"nameLocation": "5035:23:144",
"nodeType": "VariableDeclaration",
"scope": 67339,
"src": "5027:31:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67297,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5027:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67300,
"mutability": "mutable",
"name": "reserveFactor",
"nameLocation": "5077:13:144",
"nodeType": "VariableDeclaration",
"scope": 67339,
"src": "5069:21:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67299,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5069:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "4803:294:144"
},
"returnParameters": {
"id": 67309,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 67304,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 67339,
"src": "5180:7:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67303,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5180:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67306,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 67339,
"src": "5202:7:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67305,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5202:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67308,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 67339,
"src": "5224:7:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67307,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5224:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "5165:77:144"
},
"scope": 67612,
"stateMutability": "view",
"virtual": false,
"visibility": "external"
},
{
"id": 67350,
"nodeType": "StructDefinition",
"src": "5705:229:144",
"nodes": [],
"canonicalName": "InterestRateStrategy.CalcInterestRatesLocalVars",
"members": [
{
"constant": false,
"id": 67341,
"mutability": "mutable",
"name": "totalDebt",
"nameLocation": "5758:9:144",
"nodeType": "VariableDeclaration",
"scope": 67350,
"src": "5750:17:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67340,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5750:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67343,
"mutability": "mutable",
"name": "currentVariableBorrowRate",
"nameLocation": "5786:25:144",
"nodeType": "VariableDeclaration",
"scope": 67350,
"src": "5778:33:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67342,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5778:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67345,
"mutability": "mutable",
"name": "currentStableBorrowRate",
"nameLocation": "5830:23:144",
"nodeType": "VariableDeclaration",
"scope": 67350,
"src": "5822:31:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67344,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5822:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67347,
"mutability": "mutable",
"name": "currentLiquidityRate",
"nameLocation": "5872:20:144",
"nodeType": "VariableDeclaration",
"scope": 67350,
"src": "5864:28:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67346,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5864:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67349,
"mutability": "mutable",
"name": "utilizationRate",
"nameLocation": "5911:15:144",
"nodeType": "VariableDeclaration",
"scope": 67350,
"src": "5903:23:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67348,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5903:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"name": "CalcInterestRatesLocalVars",
"nameLocation": "5712:26:144",
"scope": 67612,
"visibility": "public"
},
{
"id": 67551,
"nodeType": "FunctionDefinition",
"src": "6603:2429:144",
"nodes": [],
"body": {
"id": 67550,
"nodeType": "Block",
"src": "6998:2034:144",
"nodes": [],
"statements": [
{
"assignments": [
67375
],
"declarations": [
{
"constant": false,
"id": 67375,
"mutability": "mutable",
"name": "vars",
"nameLocation": "7043:4:144",
"nodeType": "VariableDeclaration",
"scope": 67550,
"src": "7009:38:144",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars"
},
"typeName": {
"id": 67374,
"nodeType": "UserDefinedTypeName",
"pathNode": {
"id": 67373,
"name": "CalcInterestRatesLocalVars",
"nameLocations": [
"7009:26:144"
],
"nodeType": "IdentifierPath",
"referencedDeclaration": 67350,
"src": "7009:26:144"
},
"referencedDeclaration": 67350,
"src": "7009:26:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_storage_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars"
}
},
"visibility": "internal"
}
],
"id": 67376,
"nodeType": "VariableDeclarationStatement",
"src": "7009:38:144"
},
{
"expression": {
"id": 67384,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"expression": {
"id": 67377,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "7060:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67379,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberLocation": "7065:9:144",
"memberName": "totalDebt",
"nodeType": "MemberAccess",
"referencedDeclaration": 67341,
"src": "7060:14:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"arguments": [
{
"id": 67382,
"name": "totalVariableDebt",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67359,
"src": "7097:17:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"id": 67380,
"name": "totalStableDebt",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67357,
"src": "7077:15:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67381,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "7093:3:144",
"memberName": "add",
"nodeType": "MemberAccess",
"referencedDeclaration": 36583,
"src": "7077:19:144",
"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": 67383,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "7077:38:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7060:55:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67385,
"nodeType": "ExpressionStatement",
"src": "7060:55:144"
},
{
"expression": {
"id": 67390,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"expression": {
"id": 67386,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "7126:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67388,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberLocation": "7131:23:144",
"memberName": "currentStableBorrowRate",
"nodeType": "MemberAccess",
"referencedDeclaration": 67345,
"src": "7126:28:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"hexValue": "30",
"id": 67389,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7157:1:144",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "7126:32:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67391,
"nodeType": "ExpressionStatement",
"src": "7126:32:144"
},
{
"expression": {
"id": 67396,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"expression": {
"id": 67392,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "7169:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67394,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberLocation": "7174:25:144",
"memberName": "currentVariableBorrowRate",
"nodeType": "MemberAccess",
"referencedDeclaration": 67343,
"src": "7169:30:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"hexValue": "30",
"id": 67395,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7202:1:144",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "7169:34:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67397,
"nodeType": "ExpressionStatement",
"src": "7169:34:144"
},
{
"expression": {
"id": 67402,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"expression": {
"id": 67398,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "7214:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67400,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberLocation": "7219:20:144",
"memberName": "currentLiquidityRate",
"nodeType": "MemberAccess",
"referencedDeclaration": 67347,
"src": "7214:25:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"hexValue": "30",
"id": 67401,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7242:1:144",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "7214:29:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67403,
"nodeType": "ExpressionStatement",
"src": "7214:29:144"
},
{
"expression": {
"id": 67422,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"expression": {
"id": 67404,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "7256:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67406,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberLocation": "7261:15:144",
"memberName": "utilizationRate",
"nodeType": "MemberAccess",
"referencedDeclaration": 67349,
"src": "7256:20:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 67410,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"expression": {
"id": 67407,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "7279:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67408,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberLocation": "7284:9:144",
"memberName": "totalDebt",
"nodeType": "MemberAccess",
"referencedDeclaration": 67341,
"src": "7279:14:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"hexValue": "30",
"id": 67409,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7297:1:144",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "7279:19:144",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseExpression": {
"arguments": [
{
"arguments": [
{
"expression": {
"id": 67417,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "7378:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67418,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberLocation": "7383:9:144",
"memberName": "totalDebt",
"nodeType": "MemberAccess",
"referencedDeclaration": 67341,
"src": "7378:14:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"id": 67415,
"name": "availableLiquidity",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67355,
"src": "7355:18:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67416,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "7374:3:144",
"memberName": "add",
"nodeType": "MemberAccess",
"referencedDeclaration": 36583,
"src": "7355:22:144",
"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": 67419,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "7355:38:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"expression": {
"id": 67412,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "7333:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67413,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberLocation": "7338:9:144",
"memberName": "totalDebt",
"nodeType": "MemberAccess",
"referencedDeclaration": 67341,
"src": "7333:14:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67414,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "7348:6:144",
"memberName": "rayDiv",
"nodeType": "MemberAccess",
"referencedDeclaration": 62873,
"src": "7333:21:144",
"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": 67420,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "7333:61:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67421,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "Conditional",
"src": "7279:115:144",
"trueExpression": {
"hexValue": "30",
"id": 67411,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7315:1:144",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7256:138:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67423,
"nodeType": "ExpressionStatement",
"src": "7256:138:144"
},
{
"expression": {
"id": 67435,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"expression": {
"id": 67424,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "7407:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67426,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberLocation": "7412:23:144",
"memberName": "currentStableBorrowRate",
"nodeType": "MemberAccess",
"referencedDeclaration": 67345,
"src": "7407:28:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"arguments": [
{
"id": 67433,
"name": "reserveId",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67353,
"src": "7533:9:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"arguments": [
{
"arguments": [],
"expression": {
"argumentTypes": [],
"expression": {
"id": 67428,
"name": "addressProvider",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67159,
"src": "7458:15:144",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IAddressProvider_$45718",
"typeString": "contract IAddressProvider"
}
},
"id": 67429,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "7474:21:144",
"memberName": "getLendingRateManager",
"nodeType": "MemberAccess",
"referencedDeclaration": 45602,
"src": "7458:37:144",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
"typeString": "function () view external returns (address)"
}
},
"id": 67430,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "7458:39:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 67427,
"name": "ILendingRateManager",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 47434,
"src": "7438:19:144",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_ILendingRateManager_$47434_$",
"typeString": "type(contract ILendingRateManager)"
}
},
"id": 67431,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "7438:60:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_contract$_ILendingRateManager_$47434",
"typeString": "contract ILendingRateManager"
}
},
"id": 67432,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "7513:19:144",
"memberName": "getMarketBorrowRate",
"nodeType": "MemberAccess",
"referencedDeclaration": 47405,
"src": "7438:94:144",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256) view external returns (uint256)"
}
},
"id": 67434,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "7438:105:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7407:136:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67436,
"nodeType": "ExpressionStatement",
"src": "7407:136:144"
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 67440,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"expression": {
"id": 67437,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "7560:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67438,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberLocation": "7565:15:144",
"memberName": "utilizationRate",
"nodeType": "MemberAccess",
"referencedDeclaration": 67349,
"src": "7560:20:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"id": 67439,
"name": "OPTIMAL_UTILIZATION_RATE",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67153,
"src": "7583:24:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7560:47:144",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": {
"id": 67517,
"nodeType": "Block",
"src": "8140:395:144",
"statements": [
{
"expression": {
"id": 67499,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"expression": {
"id": 67484,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "8155:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67486,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberLocation": "8160:23:144",
"memberName": "currentStableBorrowRate",
"nodeType": "MemberAccess",
"referencedDeclaration": 67345,
"src": "8155:28:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"id": 67495,
"name": "OPTIMAL_UTILIZATION_RATE",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67153,
"src": "8290:24:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"expression": {
"id": 67492,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "8262:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67493,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberLocation": "8267:15:144",
"memberName": "utilizationRate",
"nodeType": "MemberAccess",
"referencedDeclaration": 67349,
"src": "8262:20:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67494,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "8283:6:144",
"memberName": "rayDiv",
"nodeType": "MemberAccess",
"referencedDeclaration": 62873,
"src": "8262:27:144",
"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": 67496,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "8262:53:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"id": 67490,
"name": "_stableRateSlope1",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67167,
"src": "8237:17:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67491,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "8255:6:144",
"memberName": "rayMul",
"nodeType": "MemberAccess",
"referencedDeclaration": 62846,
"src": "8237:24:144",
"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": 67497,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "8237:79:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"expression": {
"id": 67487,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "8186:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67488,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberLocation": "8191:23:144",
"memberName": "currentStableBorrowRate",
"nodeType": "MemberAccess",
"referencedDeclaration": 67345,
"src": "8186:28:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67489,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "8215:3:144",
"memberName": "add",
"nodeType": "MemberAccess",
"referencedDeclaration": 36583,
"src": "8186:32:144",
"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": 67498,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "8186:145:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "8155:176:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67500,
"nodeType": "ExpressionStatement",
"src": "8155:176:144"
},
{
"expression": {
"id": 67515,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"expression": {
"id": 67501,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "8348:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67503,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberLocation": "8353:25:144",
"memberName": "currentVariableBorrowRate",
"nodeType": "MemberAccess",
"referencedDeclaration": 67343,
"src": "8348:30:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"arguments": [
{
"arguments": [
{
"id": 67512,
"name": "OPTIMAL_UTILIZATION_RATE",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67153,
"src": "8483:24:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"arguments": [
{
"id": 67509,
"name": "_variableRateSlope1",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67163,
"src": "8455:19:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"expression": {
"id": 67506,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "8427:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67507,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberLocation": "8432:15:144",
"memberName": "utilizationRate",
"nodeType": "MemberAccess",
"referencedDeclaration": 67349,
"src": "8427:20:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67508,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "8448:6:144",
"memberName": "rayMul",
"nodeType": "MemberAccess",
"referencedDeclaration": 62846,
"src": "8427:27:144",
"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": 67510,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "8427:48:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67511,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "8476:6:144",
"memberName": "rayDiv",
"nodeType": "MemberAccess",
"referencedDeclaration": 62873,
"src": "8427:55:144",
"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": 67513,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "8427:81:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"id": 67504,
"name": "_baseVariableBorrowRate",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67161,
"src": "8381:23:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67505,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "8405:3:144",
"memberName": "add",
"nodeType": "MemberAccess",
"referencedDeclaration": 36583,
"src": "8381:27:144",
"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": 67514,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "8381:142:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "8348:175:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67516,
"nodeType": "ExpressionStatement",
"src": "8348:175:144"
}
]
},
"id": 67518,
"nodeType": "IfStatement",
"src": "7556:979:144",
"trueBody": {
"id": 67483,
"nodeType": "Block",
"src": "7609:525:144",
"statements": [
{
"assignments": [
67442
],
"declarations": [
{
"constant": false,
"id": 67442,
"mutability": "mutable",
"name": "excessUtilizationRateRatio",
"nameLocation": "7632:26:144",
"nodeType": "VariableDeclaration",
"scope": 67483,
"src": "7624:34:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67441,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "7624:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 67451,
"initialValue": {
"arguments": [
{
"id": 67449,
"name": "EXCESS_UTILIZATION_RATE",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67156,
"src": "7719:23:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"arguments": [
{
"id": 67446,
"name": "OPTIMAL_UTILIZATION_RATE",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67153,
"src": "7686:24:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"expression": {
"id": 67443,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "7661:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67444,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberLocation": "7666:15:144",
"memberName": "utilizationRate",
"nodeType": "MemberAccess",
"referencedDeclaration": 67349,
"src": "7661:20:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67445,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "7682:3:144",
"memberName": "sub",
"nodeType": "MemberAccess",
"referencedDeclaration": 36598,
"src": "7661:24:144",
"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": 67447,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "7661:50:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67448,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "7712:6:144",
"memberName": "rayDiv",
"nodeType": "MemberAccess",
"referencedDeclaration": 62873,
"src": "7661:57:144",
"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": 67450,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "7661:82:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "7624:119:144"
},
{
"expression": {
"id": 67466,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"expression": {
"id": 67452,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "7760:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67454,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberLocation": "7765:23:144",
"memberName": "currentStableBorrowRate",
"nodeType": "MemberAccess",
"referencedDeclaration": 67345,
"src": "7760:28:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"arguments": [
{
"arguments": [
{
"id": 67463,
"name": "excessUtilizationRateRatio",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67442,
"src": "7890:26:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"id": 67461,
"name": "_stableRateSlope2",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67169,
"src": "7865:17:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67462,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "7883:6:144",
"memberName": "rayMul",
"nodeType": "MemberAccess",
"referencedDeclaration": 62846,
"src": "7865:24:144",
"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": 67464,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "7865:52:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"arguments": [
{
"id": 67458,
"name": "_stableRateSlope1",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67167,
"src": "7824:17:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"expression": {
"id": 67455,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "7791:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67456,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberLocation": "7796:23:144",
"memberName": "currentStableBorrowRate",
"nodeType": "MemberAccess",
"referencedDeclaration": 67345,
"src": "7791:28:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67457,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "7820:3:144",
"memberName": "add",
"nodeType": "MemberAccess",
"referencedDeclaration": 36583,
"src": "7791:32:144",
"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": 67459,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "7791:51:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67460,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "7843:3:144",
"memberName": "add",
"nodeType": "MemberAccess",
"referencedDeclaration": 36583,
"src": "7791:55:144",
"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": 67465,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "7791:141:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7760:172:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67467,
"nodeType": "ExpressionStatement",
"src": "7760:172:144"
},
{
"expression": {
"id": 67481,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"expression": {
"id": 67468,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "7949:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67470,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberLocation": "7954:25:144",
"memberName": "currentVariableBorrowRate",
"nodeType": "MemberAccess",
"referencedDeclaration": 67343,
"src": "7949:30:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"arguments": [
{
"arguments": [
{
"id": 67478,
"name": "excessUtilizationRateRatio",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67442,
"src": "8080:26:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"id": 67476,
"name": "_variableRateSlope2",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67165,
"src": "8053:19:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67477,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "8073:6:144",
"memberName": "rayMul",
"nodeType": "MemberAccess",
"referencedDeclaration": 62846,
"src": "8053:26:144",
"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": 67479,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "8053:54:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"arguments": [
{
"id": 67473,
"name": "_variableRateSlope1",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67163,
"src": "8010:19:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"id": 67471,
"name": "_baseVariableBorrowRate",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67161,
"src": "7982:23:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67472,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "8006:3:144",
"memberName": "add",
"nodeType": "MemberAccess",
"referencedDeclaration": 36583,
"src": "7982:27:144",
"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": 67474,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "7982:48:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67475,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "8031:3:144",
"memberName": "add",
"nodeType": "MemberAccess",
"referencedDeclaration": 36583,
"src": "7982:52:144",
"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": 67480,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "7982:140:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7949:173:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67482,
"nodeType": "ExpressionStatement",
"src": "7949:173:144"
}
]
}
},
{
"expression": {
"id": 67540,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"expression": {
"id": 67519,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "8547:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67521,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberLocation": "8552:20:144",
"memberName": "currentLiquidityRate",
"nodeType": "MemberAccess",
"referencedDeclaration": 67347,
"src": "8547:25:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"arguments": [
{
"arguments": [
{
"id": 67537,
"name": "reserveFactor",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67363,
"src": "8850:13:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"expression": {
"id": 67534,
"name": "PercentageMath",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 62719,
"src": "8813:14:144",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_PercentageMath_$62719_$",
"typeString": "type(library PercentageMath)"
}
},
"id": 67535,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberLocation": "8828:17:144",
"memberName": "PERCENTAGE_FACTOR",
"nodeType": "MemberAccess",
"referencedDeclaration": 62602,
"src": "8813:32:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67536,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "8846:3:144",
"memberName": "sub",
"nodeType": "MemberAccess",
"referencedDeclaration": 36598,
"src": "8813:36:144",
"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": 67538,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "8813:51:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"arguments": [
{
"expression": {
"id": 67530,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "8770:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67531,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberLocation": "8775:15:144",
"memberName": "utilizationRate",
"nodeType": "MemberAccess",
"referencedDeclaration": 67349,
"src": "8770:20:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"arguments": [
{
"id": 67523,
"name": "totalStableDebt",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67357,
"src": "8611:15:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"id": 67524,
"name": "totalVariableDebt",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67359,
"src": "8641:17:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"expression": {
"id": 67525,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "8673:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67526,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberLocation": "8678:25:144",
"memberName": "currentVariableBorrowRate",
"nodeType": "MemberAccess",
"referencedDeclaration": 67343,
"src": "8673:30:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"id": 67527,
"name": "averageStableBorrowRate",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67361,
"src": "8718:23:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 67522,
"name": "_getOverallBorrowRate",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67611,
"src": "8575:21:144",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
}
},
"id": 67528,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "8575:177:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67529,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "8763:6:144",
"memberName": "rayMul",
"nodeType": "MemberAccess",
"referencedDeclaration": 62846,
"src": "8575:194:144",
"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": 67532,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "8575:216:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67533,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "8802:10:144",
"memberName": "percentMul",
"nodeType": "MemberAccess",
"referencedDeclaration": 62667,
"src": "8575:237:144",
"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": 67539,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "8575:290:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "8547:318:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67541,
"nodeType": "ExpressionStatement",
"src": "8547:318:144"
},
{
"expression": {
"components": [
{
"expression": {
"id": 67542,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "8900:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67543,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberLocation": "8905:20:144",
"memberName": "currentLiquidityRate",
"nodeType": "MemberAccess",
"referencedDeclaration": 67347,
"src": "8900:25:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"expression": {
"id": 67544,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "8940:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67545,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberLocation": "8945:23:144",
"memberName": "currentStableBorrowRate",
"nodeType": "MemberAccess",
"referencedDeclaration": 67345,
"src": "8940:28:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"expression": {
"id": 67546,
"name": "vars",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67375,
"src": "8983:4:144",
"typeDescriptions": {
"typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
"typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
}
},
"id": 67547,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberLocation": "8988:25:144",
"memberName": "currentVariableBorrowRate",
"nodeType": "MemberAccess",
"referencedDeclaration": 67343,
"src": "8983:30:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"id": 67548,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "8885:139:144",
"typeDescriptions": {
"typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
"typeString": "tuple(uint256,uint256,uint256)"
}
},
"functionReturnParameters": 67372,
"id": 67549,
"nodeType": "Return",
"src": "8878:146:144"
}
]
},
"baseFunctions": [
46818
],
"documentation": {
"id": 67351,
"nodeType": "StructuredDocumentation",
"src": "5942:655:144",
"text": " @dev Calculates the interest rates depending on the asset reserve's state and configurations.\n @param availableLiquidity The liquidity available in the corresponding fToken\n @param totalStableDebt The total borrowed from the reserve at a stable rate\n @param totalVariableDebt The total borrowed from the reserve at a variable rate\n @param averageStableBorrowRate The weighted average of all the stable rate loans\n @param reserveFactor The reserve portion of the interest that goes to the treasury of the market\n @return The liquidity rate, the stable borrow rate and the variable borrow rate*"
},
"functionSelector": "9b9c5b49",
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "calculateInterestRate",
"nameLocation": "6612:21:144",
"overrides": {
"id": 67365,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "6889:8:144"
},
"parameters": {
"id": 67364,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 67353,
"mutability": "mutable",
"name": "reserveId",
"nameLocation": "6652:9:144",
"nodeType": "VariableDeclaration",
"scope": 67551,
"src": "6644:17:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67352,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6644:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67355,
"mutability": "mutable",
"name": "availableLiquidity",
"nameLocation": "6680:18:144",
"nodeType": "VariableDeclaration",
"scope": 67551,
"src": "6672:26:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67354,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6672:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67357,
"mutability": "mutable",
"name": "totalStableDebt",
"nameLocation": "6717:15:144",
"nodeType": "VariableDeclaration",
"scope": 67551,
"src": "6709:23:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67356,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6709:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67359,
"mutability": "mutable",
"name": "totalVariableDebt",
"nameLocation": "6751:17:144",
"nodeType": "VariableDeclaration",
"scope": 67551,
"src": "6743:25:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67358,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6743:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67361,
"mutability": "mutable",
"name": "averageStableBorrowRate",
"nameLocation": "6787:23:144",
"nodeType": "VariableDeclaration",
"scope": 67551,
"src": "6779:31:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67360,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6779:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67363,
"mutability": "mutable",
"name": "reserveFactor",
"nameLocation": "6829:13:144",
"nodeType": "VariableDeclaration",
"scope": 67551,
"src": "6821:21:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67362,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6821:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "6633:216:144"
},
"returnParameters": {
"id": 67372,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 67367,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 67551,
"src": "6930:7:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67366,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6930:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67369,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 67551,
"src": "6952:7:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67368,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6952:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67371,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 67551,
"src": "6974:7:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67370,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6974:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "6915:77:144"
},
"scope": 67612,
"stateMutability": "view",
"virtual": false,
"visibility": "public"
},
{
"id": 67611,
"nodeType": "FunctionDefinition",
"src": "9597:729:144",
"nodes": [],
"body": {
"id": 67610,
"nodeType": "Block",
"src": "9830:496:144",
"nodes": [],
"statements": [
{
"assignments": [
67566
],
"declarations": [
{
"constant": false,
"id": 67566,
"mutability": "mutable",
"name": "totalDebt",
"nameLocation": "9849:9:144",
"nodeType": "VariableDeclaration",
"scope": 67610,
"src": "9841:17:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67565,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "9841:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 67571,
"initialValue": {
"arguments": [
{
"id": 67569,
"name": "totalVariableDebt",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67556,
"src": "9881:17:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"id": 67567,
"name": "totalStableDebt",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67554,
"src": "9861:15:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67568,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "9877:3:144",
"memberName": "add",
"nodeType": "MemberAccess",
"referencedDeclaration": 36583,
"src": "9861:19:144",
"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": 67570,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "9861:38:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "9841:58:144"
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 67574,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 67572,
"name": "totalDebt",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67566,
"src": "9916:9:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"hexValue": "30",
"id": 67573,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9929:1:144",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "9916:14:144",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 67577,
"nodeType": "IfStatement",
"src": "9912:28:144",
"trueBody": {
"expression": {
"hexValue": "30",
"id": 67575,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9939:1:144",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"functionReturnParameters": 67564,
"id": 67576,
"nodeType": "Return",
"src": "9932:8:144"
}
},
{
"assignments": [
67579
],
"declarations": [
{
"constant": false,
"id": 67579,
"mutability": "mutable",
"name": "weightedVariableRate",
"nameLocation": "9961:20:144",
"nodeType": "VariableDeclaration",
"scope": 67610,
"src": "9953:28:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67578,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "9953:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 67586,
"initialValue": {
"arguments": [
{
"id": 67584,
"name": "currentVariableBorrowRate",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67558,
"src": "10020:25:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"arguments": [],
"expression": {
"argumentTypes": [],
"expression": {
"id": 67580,
"name": "totalVariableDebt",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67556,
"src": "9984:17:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67581,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "10002:8:144",
"memberName": "wadToRay",
"nodeType": "MemberAccess",
"referencedDeclaration": 62908,
"src": "9984:26:144",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256) pure returns (uint256)"
}
},
"id": 67582,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "9984:28:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67583,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "10013:6:144",
"memberName": "rayMul",
"nodeType": "MemberAccess",
"referencedDeclaration": 62846,
"src": "9984:35:144",
"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": 67585,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "9984:62:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "9953:93:144"
},
{
"assignments": [
67588
],
"declarations": [
{
"constant": false,
"id": 67588,
"mutability": "mutable",
"name": "weightedStableRate",
"nameLocation": "10067:18:144",
"nodeType": "VariableDeclaration",
"scope": 67610,
"src": "10059:26:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67587,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "10059:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 67595,
"initialValue": {
"arguments": [
{
"id": 67593,
"name": "currentAverageStableBorrowRate",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67560,
"src": "10122:30:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"arguments": [],
"expression": {
"argumentTypes": [],
"expression": {
"id": 67589,
"name": "totalStableDebt",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67554,
"src": "10088:15:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67590,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "10104:8:144",
"memberName": "wadToRay",
"nodeType": "MemberAccess",
"referencedDeclaration": 62908,
"src": "10088:24:144",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256) pure returns (uint256)"
}
},
"id": 67591,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "10088:26:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67592,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "10115:6:144",
"memberName": "rayMul",
"nodeType": "MemberAccess",
"referencedDeclaration": 62846,
"src": "10088:33:144",
"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": 67594,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "10088:65:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "10059:94:144"
},
{
"assignments": [
67597
],
"declarations": [
{
"constant": false,
"id": 67597,
"mutability": "mutable",
"name": "overallBorrowRate",
"nameLocation": "10174:17:144",
"nodeType": "VariableDeclaration",
"scope": 67610,
"src": "10166:25:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67596,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "10166:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 67607,
"initialValue": {
"arguments": [
{
"arguments": [],
"expression": {
"argumentTypes": [],
"expression": {
"id": 67603,
"name": "totalDebt",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67566,
"src": "10260:9:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67604,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "10270:8:144",
"memberName": "wadToRay",
"nodeType": "MemberAccess",
"referencedDeclaration": 62908,
"src": "10260:18:144",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256) pure returns (uint256)"
}
},
"id": 67605,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "10260:20:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"arguments": [
{
"id": 67600,
"name": "weightedStableRate",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67588,
"src": "10233:18:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"id": 67598,
"name": "weightedVariableRate",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67579,
"src": "10208:20:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67599,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "10229:3:144",
"memberName": "add",
"nodeType": "MemberAccess",
"referencedDeclaration": 36583,
"src": "10208:24:144",
"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": 67601,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "10208:44:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 67602,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "10253:6:144",
"memberName": "rayDiv",
"nodeType": "MemberAccess",
"referencedDeclaration": 62873,
"src": "10208:51:144",
"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": 67606,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "10208:73:144",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "10166:115:144"
},
{
"expression": {
"id": 67608,
"name": "overallBorrowRate",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 67597,
"src": "10301:17:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 67564,
"id": 67609,
"nodeType": "Return",
"src": "10294:24:144"
}
]
},
"documentation": {
"id": 67552,
"nodeType": "StructuredDocumentation",
"src": "9040:551:144",
"text": " @dev Calculates the overall borrow rate as the weighted average between the total variable debt and total stable debt\n @param totalStableDebt The total borrowed from the reserve a stable rate\n @param totalVariableDebt The total borrowed from the reserve at a variable rate\n @param currentVariableBorrowRate The current variable borrow rate of the reserve\n @param currentAverageStableBorrowRate The current weighted average of all the stable rate loans\n @return The weighted averaged borrow rate*"
},
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_getOverallBorrowRate",
"nameLocation": "9606:21:144",
"parameters": {
"id": 67561,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 67554,
"mutability": "mutable",
"name": "totalStableDebt",
"nameLocation": "9646:15:144",
"nodeType": "VariableDeclaration",
"scope": 67611,
"src": "9638:23:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67553,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "9638:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67556,
"mutability": "mutable",
"name": "totalVariableDebt",
"nameLocation": "9680:17:144",
"nodeType": "VariableDeclaration",
"scope": 67611,
"src": "9672:25:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67555,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "9672:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67558,
"mutability": "mutable",
"name": "currentVariableBorrowRate",
"nameLocation": "9716:25:144",
"nodeType": "VariableDeclaration",
"scope": 67611,
"src": "9708:33:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67557,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "9708:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 67560,
"mutability": "mutable",
"name": "currentAverageStableBorrowRate",
"nameLocation": "9760:30:144",
"nodeType": "VariableDeclaration",
"scope": 67611,
"src": "9752:38:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67559,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "9752:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "9627:170:144"
},
"returnParameters": {
"id": 67564,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 67563,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 67611,
"src": "9821:7:144",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 67562,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "9821:7:144",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "9820:9:144"
},
"scope": 67612,
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
}
],
"abstract": false,
"baseContracts": [
{
"baseName": {
"id": 67140,
"name": "IInterestRateStrategy",
"nameLocations": [
"991:21:144"
],
"nodeType": "IdentifierPath",
"referencedDeclaration": 46846,
"src": "991:21:144"
},
"id": 67141,
"nodeType": "InheritanceSpecifier",
"src": "991:21:144"
}
],
"canonicalName": "InterestRateStrategy",
"contractDependencies": [],
"contractKind": "contract",
"documentation": {
"id": 67139,
"nodeType": "StructuredDocumentation",
"src": "633:323:144",
"text": " @title InterestRateStrategy contract\n @notice Implfements the calculation of the interest rates depending on the reserve state\n @dev The model of interest rate is based on 2 slopes, one before the `OPTIMAL_UTILIZATION_RATE`\n point of utilization and another from that one to 100%\n @author FluidNFT*"
},
"fullyImplemented": true,
"linearizedBaseContracts": [
67612,
46846
],
"name": "InterestRateStrategy",
"nameLocation": "967:20:144",
"scope": 67613,
"usedErrors": []
}
],
"license": "AGPL-3.0"
},
"id": 144
}
Last updated