From cce8c8836d21ac307df918a4ca46f0b83dbe2757 Mon Sep 17 00:00:00 2001 From: maxwolff Date: Fri, 7 Feb 2020 15:21:47 -0800 Subject: [PATCH] Tether Support and Gas Optimizations This patch adds Tether support and creates a number of small gas optimizations. The goal is to reduce about 10-20K of gas on operations by simplying certain operations in the protocol, without significantly changing behavior. Specfically we: 1. Remove `checkTransferIn` as the now look at the effect of `transfer` to handle fees, which obviates the need for check transfer in. 2. Change our delegator contract to use `msg.data` directly, instead of re-encoding. This removes some unnecessary repacking. 3. Reduce potentially redunant SLOADs by memoizing values. 4. Do not re-accrue interest multiple-times per block (as the interest accrued is, by definition, zero, beyond the first transaction in a block for a given cToken). 5. Remove `localVars` structs as Solidity handles more variables correctly and it cleans up code. 6. In some cases, switch from `CarefulMath` to `SafeMath` (that is, revert instead of returning error codes). This is done in select places as it's technically a change of behavior and needs to be handled carefully. 7. Add Tether to Price Oracle Proxy. 8. Bump up to 0.5.16, but: 9. Update Solidity 0.6.x-style contract inheritence (that is, interfaces cannot declare constants, etc) 10. Add a scenario command to check the BorrowRate from an IR model 11. Deploy Tether to Ropsten and Mainnet 12. Bump up total gas limit --- contracts/CDaiDelegate.sol | 46 +- contracts/CErc20.sol | 23 +- contracts/CErc20Delegator.sol | 147 +- contracts/CEther.sol | 14 - contracts/CToken.sol | 129 +- contracts/Comptroller.sol | 26 +- contracts/ComptrollerG1.sol | 5 - contracts/ComptrollerInterface.sol | 10 +- contracts/DAIInterestRateModel.sol | 28 +- contracts/InterestRateModel.sol | 8 +- contracts/JumpRateModel.sol | 5 - contracts/Maximillion.sol | 4 +- contracts/PriceOracle.sol | 8 +- contracts/PriceOracleProxy.sol | 14 +- contracts/SafeMath.sol | 22 + contracts/SimplePriceOracle.sol | 2 - contracts/WhitePaperInterestRateModel.sol | 5 - gasCosts.json | 89 + networks/mainnet-abi.json | 2979 +++- networks/mainnet.json | 192 +- networks/ropsten-abi.json | 11283 ++++++++++------ networks/ropsten.json | 68 +- package.json | 3 +- scenario/package.json | 2 +- scenario/src/Builder/Erc20Builder.ts | 2 +- .../src/Builder/InterestRateModelBuilder.ts | 2 +- .../src/Builder/PriceOracleProxyBuilder.ts | 16 +- scenario/src/Contract/InterestRateModel.ts | 2 +- scenario/src/CoreEvent.ts | 2 +- scenario/src/CoreValue.ts | 15 + scenario/src/Repl.ts | 2 +- scenario/src/Value/InterestRateModelValue.ts | 26 +- scenario/yarn.lock | 189 +- spec/scenario/AddReserves.scen | 6 +- spec/scenario/CoreMacros | 6 +- spec/scenario/InKindLiquidation.scen | 2 +- spec/scenario/Mint.scen | 6 +- spec/scenario/MintWBTC.scen | 8 +- spec/scenario/PriceOracleProxy.scen | 13 +- spec/scenario/RepayBorrow.scen | 4 +- spec/scenario/RepayBorrowWBTC.scen | 6 +- spec/scenario/Timelock.scen | 2 +- .../admin/setMarketPolicyHook.scen.old | 41 - .../admin/setMarketPriceOracle.scen.old | 38 - tests/Contracts/BasicToken.sol | 50 - tests/Contracts/BasicTokenNS.sol | 50 - tests/Contracts/BoolComptroller.sol | 278 - tests/Contracts/CDaiDelegateScenario.sol | 26 - tests/Contracts/CErc20DelegateHarness.sol | 183 - tests/Contracts/CErc20DelegateScenario.sol | 26 - .../Contracts/CErc20DelegateScenarioExtra.sol | 17 - tests/Contracts/CErc20DelegatorScenario.sol | 35 - tests/Contracts/CErc20Harness.sol | 433 +- tests/Contracts/CErc20Scenario.sol | 42 - tests/Contracts/CEtherHarness.sol | 120 +- tests/Contracts/CEtherScenario.sol | 46 - tests/Contracts/CEvil.sol | 27 - .../{CompScenario.sol => CompHarness.sol} | 3 +- tests/Contracts/ComptrollerBorked.sol | 18 - tests/Contracts/ComptrollerHarness.sol | 352 +- tests/Contracts/ComptrollerScenario.sol | 42 - tests/Contracts/ComptrollerScenarioG1.sol | 12 +- tests/Contracts/Counter.sol | 2 +- tests/Contracts/DSValueHarness.sol | 32 - tests/Contracts/EIP20Harness.sol | 123 - tests/Contracts/EIP20NonCompliantHarness.sol | 27 - .../EIP20NonStandardReturnHarness.sol | 123 - .../EIP20NonStandardThrowHarness.sol | 123 - tests/Contracts/ERC20.sol | 161 +- tests/Contracts/ERC20Basic.sol | 14 - tests/Contracts/ERC20BasicNS.sol | 13 - tests/Contracts/ERC20NS.sol | 16 - tests/Contracts/ERC20NonView.sol | 196 - tests/Contracts/EchoTypesComptroller.sol | 31 - tests/Contracts/EvilToken.sol | 51 +- tests/Contracts/FalseMarker.sol | 9 + .../FalseMarkerMethodComptroller.sol | 6 - .../FalseMarkerMethodInterestRateModel.sol | 34 - tests/Contracts/FaucetNonStandardToken.sol | 31 - tests/Contracts/FaucetToken.sol | 129 +- .../Contracts/FaucetTokenReEntrantHarness.sol | 78 - tests/Contracts/FeeToken.sol | 43 +- tests/Contracts/FixedPriceOracle.sol | 3 +- tests/Contracts/FullErc20Interface.sol | 63 - tests/Contracts/GovernorAlphaHarness.sol | 5 +- tests/Contracts/InterestRateModelHarness.sol | 3 +- tests/Contracts/MockMCD.sol | 2 +- tests/Contracts/NonStandardToken.sol | 122 - tests/Contracts/NotPriceOracle.sol | 6 - tests/Contracts/SafeMath.sol | 52 - tests/Contracts/StandardToken.sol | 124 - tests/Contracts/Structs.sol | 2 +- tests/Contracts/TetherInterface.sol | 7 +- tests/Contracts/TimelockHarness.sol | 14 +- tests/Contracts/TimelockTest.sol | 11 - tests/PriceOracleProxyTest.js | 12 +- tests/SpinaramaTest.js | 11 +- tests/Tokens/accrueInterestTest.js | 3 +- tests/Tokens/borrowAndRepayCEtherTest.js | 4 + tests/Tokens/borrowAndRepayTest.js | 16 +- tests/Tokens/cTokenTest.js | 2 + tests/Tokens/liquidateTest.js | 5 +- tests/Tokens/mintAndRedeemCEtherTest.js | 1 + tests/Tokens/mintAndRedeemTest.js | 6 +- tests/Tokens/reservesTest.js | 6 +- tests/Tokens/safeTokenTest.js | 14 - tests/Tokens/setInterestRateModelTest.js | 4 +- tests/Utils/Compound.js | 40 +- tests/Utils/Ethereum.js | 11 + tests/gasProfiler.js | 153 + yarn.lock | 2601 ++-- 111 files changed, 14015 insertions(+), 7790 deletions(-) create mode 100644 gasCosts.json delete mode 100644 spec/scenario/admin/setMarketPolicyHook.scen.old delete mode 100644 spec/scenario/admin/setMarketPriceOracle.scen.old delete mode 100644 tests/Contracts/BasicToken.sol delete mode 100644 tests/Contracts/BasicTokenNS.sol delete mode 100644 tests/Contracts/BoolComptroller.sol delete mode 100644 tests/Contracts/CDaiDelegateScenario.sol delete mode 100644 tests/Contracts/CErc20DelegateHarness.sol delete mode 100644 tests/Contracts/CErc20DelegateScenario.sol delete mode 100644 tests/Contracts/CErc20DelegateScenarioExtra.sol delete mode 100644 tests/Contracts/CErc20DelegatorScenario.sol delete mode 100644 tests/Contracts/CErc20Scenario.sol delete mode 100644 tests/Contracts/CEtherScenario.sol delete mode 100644 tests/Contracts/CEvil.sol rename tests/Contracts/{CompScenario.sol => CompHarness.sol} (97%) delete mode 100644 tests/Contracts/ComptrollerBorked.sol delete mode 100644 tests/Contracts/ComptrollerScenario.sol delete mode 100644 tests/Contracts/DSValueHarness.sol delete mode 100644 tests/Contracts/EIP20Harness.sol delete mode 100644 tests/Contracts/EIP20NonCompliantHarness.sol delete mode 100644 tests/Contracts/EIP20NonStandardReturnHarness.sol delete mode 100644 tests/Contracts/EIP20NonStandardThrowHarness.sol delete mode 100644 tests/Contracts/ERC20Basic.sol delete mode 100644 tests/Contracts/ERC20BasicNS.sol delete mode 100644 tests/Contracts/ERC20NS.sol delete mode 100644 tests/Contracts/ERC20NonView.sol delete mode 100644 tests/Contracts/EchoTypesComptroller.sol create mode 100644 tests/Contracts/FalseMarker.sol delete mode 100644 tests/Contracts/FalseMarkerMethodComptroller.sol delete mode 100644 tests/Contracts/FalseMarkerMethodInterestRateModel.sol delete mode 100644 tests/Contracts/FaucetNonStandardToken.sol delete mode 100644 tests/Contracts/FaucetTokenReEntrantHarness.sol delete mode 100644 tests/Contracts/FullErc20Interface.sol delete mode 100644 tests/Contracts/NonStandardToken.sol delete mode 100644 tests/Contracts/NotPriceOracle.sol delete mode 100644 tests/Contracts/SafeMath.sol delete mode 100644 tests/Contracts/StandardToken.sol delete mode 100644 tests/Contracts/TimelockTest.sol create mode 100644 tests/gasProfiler.js diff --git a/contracts/CDaiDelegate.sol b/contracts/CDaiDelegate.sol index 97119105a..363285abb 100644 --- a/contracts/CDaiDelegate.sol +++ b/contracts/CDaiDelegate.sol @@ -181,38 +181,28 @@ contract CDaiDelegate is CErc20Delegate { /*** Maker Interfaces ***/ -contract PotLike { - function chi() public view returns (uint); - function dsr() public view returns (uint); - function rho() public view returns (uint); - function pie(address) public view returns (uint); - function drip() public returns (uint); - function join(uint) public; - function exit(uint) public; +interface PotLike { + function chi() external view returns (uint); + function pie(address) external view returns (uint); + function drip() external returns (uint); + function join(uint) external; + function exit(uint) external; } -contract GemLike { - function approve(address, uint) public; - function balanceOf(address) public view returns (uint); - function transfer(address, uint) public; - function transferFrom(address, address, uint) public; - function deposit() public payable; - function withdraw(uint) public; +interface GemLike { + function approve(address, uint) external; + function balanceOf(address) external view returns (uint); + function transferFrom(address, address, uint) external returns (bool); } -contract VatLike { - function can(address, address) public view returns (uint); - function ilks(bytes32) public view returns (uint, uint, uint, uint, uint); - function dai(address) public view returns (uint); - function urns(bytes32, address) public view returns (uint, uint); - function frob(bytes32, address, address, address, int, int) public; - function hope(address) public; - function move(address, address, uint) public; +interface VatLike { + function dai(address) external view returns (uint); + function hope(address) external; } -contract DaiJoinLike { - function vat() public returns (VatLike); - function dai() public returns (GemLike); - function join(address, uint) public payable; - function exit(address, uint) public; +interface DaiJoinLike { + function vat() external returns (VatLike); + function dai() external returns (GemLike); + function join(address, uint) external payable; + function exit(address, uint) external; } diff --git a/contracts/CErc20.sol b/contracts/CErc20.sol index 7ff5d8d37..1e97b3dc6 100644 --- a/contracts/CErc20.sol +++ b/contracts/CErc20.sol @@ -130,29 +130,10 @@ contract CErc20 is CToken, CErc20Interface { return token.balanceOf(address(this)); } - /** - * @dev Checks whether or not there is sufficient allowance for this contract to move amount from `from` and - * whether or not `from` has a balance of at least `amount`. Does NOT do a transfer. - */ - function checkTransferIn(address from, uint amount) internal view returns (Error) { - EIP20Interface token = EIP20Interface(underlying); - - if (token.allowance(from, address(this)) < amount) { - return Error.TOKEN_INSUFFICIENT_ALLOWANCE; - } - - if (token.balanceOf(from) < amount) { - return Error.TOKEN_INSUFFICIENT_BALANCE; - } - - return Error.NO_ERROR; - } - /** * @dev Similar to EIP20 transfer, except it handles a False result from `transferFrom` and reverts in that case. - * If caller has not called `checkTransferIn`, this may revert due to insufficient balance or insufficient - * allowance. If caller has called `checkTransferIn` prior to this call, and it returned Error.NO_ERROR, - * this should not revert in normal conditions. This function returns the actual amount received, + * This will revert due to insufficient balance or insufficient allowance. + * This function returns the actual amount received, * which may be less than `amount` if there is a fee attached to the transfer. * * Note: This wrapper safely handles non-standard ERC-20 tokens that do not return a value. diff --git a/contracts/CErc20Delegator.sol b/contracts/CErc20Delegator.sol index 90274c8d3..0f6f749c9 100644 --- a/contracts/CErc20Delegator.sol +++ b/contracts/CErc20Delegator.sol @@ -79,8 +79,8 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function mint(uint mintAmount) external returns (uint) { - bytes memory data = delegateToImplementation(abi.encodeWithSignature("mint(uint256)", mintAmount)); - return abi.decode(data, (uint)); + mintAmount; // Shh + delegateAndReturn(); } /** @@ -90,8 +90,8 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function redeem(uint redeemTokens) external returns (uint) { - bytes memory data = delegateToImplementation(abi.encodeWithSignature("redeem(uint256)", redeemTokens)); - return abi.decode(data, (uint)); + redeemTokens; // Shh + delegateAndReturn(); } /** @@ -101,8 +101,8 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function redeemUnderlying(uint redeemAmount) external returns (uint) { - bytes memory data = delegateToImplementation(abi.encodeWithSignature("redeemUnderlying(uint256)", redeemAmount)); - return abi.decode(data, (uint)); + redeemAmount; // Shh + delegateAndReturn(); } /** @@ -111,8 +111,8 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function borrow(uint borrowAmount) external returns (uint) { - bytes memory data = delegateToImplementation(abi.encodeWithSignature("borrow(uint256)", borrowAmount)); - return abi.decode(data, (uint)); + borrowAmount; // Shh + delegateAndReturn(); } /** @@ -121,8 +121,8 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function repayBorrow(uint repayAmount) external returns (uint) { - bytes memory data = delegateToImplementation(abi.encodeWithSignature("repayBorrow(uint256)", repayAmount)); - return abi.decode(data, (uint)); + repayAmount; // Shh + delegateAndReturn(); } /** @@ -132,8 +132,8 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function repayBorrowBehalf(address borrower, uint repayAmount) external returns (uint) { - bytes memory data = delegateToImplementation(abi.encodeWithSignature("repayBorrowBehalf(address,uint256)", borrower, repayAmount)); - return abi.decode(data, (uint)); + borrower; repayAmount; // Shh + delegateAndReturn(); } /** @@ -145,8 +145,8 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function liquidateBorrow(address borrower, uint repayAmount, CTokenInterface cTokenCollateral) external returns (uint) { - bytes memory data = delegateToImplementation(abi.encodeWithSignature("liquidateBorrow(address,uint256,address)", borrower, repayAmount, cTokenCollateral)); - return abi.decode(data, (uint)); + borrower; repayAmount; cTokenCollateral; // Shh + delegateAndReturn(); } /** @@ -156,8 +156,8 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return Whether or not the transfer succeeded */ function transfer(address dst, uint amount) external returns (bool) { - bytes memory data = delegateToImplementation(abi.encodeWithSignature("transfer(address,uint256)", dst, amount)); - return abi.decode(data, (bool)); + dst; amount; // Shh + delegateAndReturn(); } /** @@ -168,8 +168,8 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return Whether or not the transfer succeeded */ function transferFrom(address src, address dst, uint256 amount) external returns (bool) { - bytes memory data = delegateToImplementation(abi.encodeWithSignature("transferFrom(address,address,uint256)", src, dst, amount)); - return abi.decode(data, (bool)); + src; dst; amount; // Shh + delegateAndReturn(); } /** @@ -181,8 +181,8 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return Whether or not the approval succeeded */ function approve(address spender, uint256 amount) external returns (bool) { - bytes memory data = delegateToImplementation(abi.encodeWithSignature("approve(address,uint256)", spender, amount)); - return abi.decode(data, (bool)); + spender; amount; // Shh + delegateAndReturn(); } /** @@ -192,8 +192,8 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return The number of tokens allowed to be spent (-1 means infinite) */ function allowance(address owner, address spender) external view returns (uint) { - bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("allowance(address,address)", owner, spender)); - return abi.decode(data, (uint)); + owner; spender; // Shh + delegateToViewAndReturn(); } /** @@ -202,8 +202,8 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return The number of tokens owned by `owner` */ function balanceOf(address owner) external view returns (uint) { - bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("balanceOf(address)", owner)); - return abi.decode(data, (uint)); + owner; // Shh + delegateToViewAndReturn(); } /** @@ -213,8 +213,8 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return The amount of underlying owned by `owner` */ function balanceOfUnderlying(address owner) external returns (uint) { - bytes memory data = delegateToImplementation(abi.encodeWithSignature("balanceOfUnderlying(address)", owner)); - return abi.decode(data, (uint)); + owner; // Shh + delegateAndReturn(); } /** @@ -224,8 +224,8 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return (possible error, token balance, borrow balance, exchange rate mantissa) */ function getAccountSnapshot(address account) external view returns (uint, uint, uint, uint) { - bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("getAccountSnapshot(address)", account)); - return abi.decode(data, (uint, uint, uint, uint)); + account; // Shh + delegateToViewAndReturn(); } /** @@ -233,8 +233,7 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return The borrow interest rate per block, scaled by 1e18 */ function borrowRatePerBlock() external view returns (uint) { - bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("borrowRatePerBlock()")); - return abi.decode(data, (uint)); + delegateToViewAndReturn(); } /** @@ -242,8 +241,7 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return The supply interest rate per block, scaled by 1e18 */ function supplyRatePerBlock() external view returns (uint) { - bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("supplyRatePerBlock()")); - return abi.decode(data, (uint)); + delegateToViewAndReturn(); } /** @@ -251,8 +249,7 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return The total borrows with interest */ function totalBorrowsCurrent() external returns (uint) { - bytes memory data = delegateToImplementation(abi.encodeWithSignature("totalBorrowsCurrent()")); - return abi.decode(data, (uint)); + delegateAndReturn(); } /** @@ -261,8 +258,8 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return The calculated balance */ function borrowBalanceCurrent(address account) external returns (uint) { - bytes memory data = delegateToImplementation(abi.encodeWithSignature("borrowBalanceCurrent(address)", account)); - return abi.decode(data, (uint)); + account; // Shh + delegateAndReturn(); } /** @@ -271,8 +268,8 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return The calculated balance */ function borrowBalanceStored(address account) public view returns (uint) { - bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("borrowBalanceStored(address)", account)); - return abi.decode(data, (uint)); + account; // Shh + delegateToViewAndReturn(); } /** @@ -280,8 +277,7 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return Calculated exchange rate scaled by 1e18 */ function exchangeRateCurrent() public returns (uint) { - bytes memory data = delegateToImplementation(abi.encodeWithSignature("exchangeRateCurrent()")); - return abi.decode(data, (uint)); + delegateAndReturn(); } /** @@ -290,8 +286,7 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return Calculated exchange rate scaled by 1e18 */ function exchangeRateStored() public view returns (uint) { - bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("exchangeRateStored()")); - return abi.decode(data, (uint)); + delegateToViewAndReturn(); } /** @@ -299,8 +294,7 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return The quantity of underlying asset owned by this contract */ function getCash() external view returns (uint) { - bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("getCash()")); - return abi.decode(data, (uint)); + delegateToViewAndReturn(); } /** @@ -309,8 +303,7 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * up to the current block and writes new checkpoint to storage. */ function accrueInterest() public returns (uint) { - bytes memory data = delegateToImplementation(abi.encodeWithSignature("accrueInterest()")); - return abi.decode(data, (uint)); + delegateAndReturn(); } /** @@ -323,8 +316,8 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function seize(address liquidator, address borrower, uint seizeTokens) external returns (uint) { - bytes memory data = delegateToImplementation(abi.encodeWithSignature("seize(address,address,uint256)", liquidator, borrower, seizeTokens)); - return abi.decode(data, (uint)); + liquidator; borrower; seizeTokens; // Shh + delegateAndReturn(); } /*** Admin Functions ***/ @@ -336,8 +329,8 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function _setPendingAdmin(address payable newPendingAdmin) external returns (uint) { - bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setPendingAdmin(address)", newPendingAdmin)); - return abi.decode(data, (uint)); + newPendingAdmin; // Shh + delegateAndReturn(); } /** @@ -346,8 +339,8 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function _setComptroller(ComptrollerInterface newComptroller) public returns (uint) { - bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setComptroller(address)", newComptroller)); - return abi.decode(data, (uint)); + newComptroller; // Shh + delegateAndReturn(); } /** @@ -356,8 +349,8 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function _setReserveFactor(uint newReserveFactorMantissa) external returns (uint) { - bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setReserveFactor(uint256)", newReserveFactorMantissa)); - return abi.decode(data, (uint)); + newReserveFactorMantissa; // Shh + delegateAndReturn(); } /** @@ -366,8 +359,7 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function _acceptAdmin() external returns (uint) { - bytes memory data = delegateToImplementation(abi.encodeWithSignature("_acceptAdmin()")); - return abi.decode(data, (uint)); + delegateAndReturn(); } /** @@ -376,8 +368,8 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function _addReserves(uint addAmount) external returns (uint) { - bytes memory data = delegateToImplementation(abi.encodeWithSignature("_addReserves(uint256)", addAmount)); - return abi.decode(data, (uint)); + addAmount; // Shh + delegateAndReturn(); } /** @@ -386,8 +378,8 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function _reduceReserves(uint reduceAmount) external returns (uint) { - bytes memory data = delegateToImplementation(abi.encodeWithSignature("_reduceReserves(uint256)", reduceAmount)); - return abi.decode(data, (uint)); + reduceAmount; // Shh + delegateAndReturn(); } /** @@ -397,8 +389,8 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function _setInterestRateModel(InterestRateModel newInterestRateModel) public returns (uint) { - bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setInterestRateModel(address)", newInterestRateModel)); - return abi.decode(data, (uint)); + newInterestRateModel; // Shh + delegateAndReturn(); } /** @@ -445,14 +437,20 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac return abi.decode(returnData, (bytes)); } - /** - * @notice Delegates execution to an implementation contract - * @dev It returns to the external caller whatever the implementation returns or forwards reverts - */ - function () external payable { - require(msg.value == 0,"CErc20Delegator:fallback: cannot send value to fallback"); + function delegateToViewAndReturn() private view returns (bytes memory) { + (bool success, ) = address(this).staticcall(abi.encodeWithSignature("delegateToImplementation(bytes)", msg.data)); - // delegate all other functions to current implementation + assembly { + let free_mem_ptr := mload(0x40) + returndatacopy(free_mem_ptr, 0, returndatasize) + + switch success + case 0 { revert(free_mem_ptr, returndatasize) } + default { return(add(free_mem_ptr, 0x40), returndatasize) } + } + } + + function delegateAndReturn() private returns (bytes memory) { (bool success, ) = implementation.delegatecall(msg.data); assembly { @@ -464,4 +462,15 @@ contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterfac default { return(free_mem_ptr, returndatasize) } } } + + /** + * @notice Delegates execution to an implementation contract + * @dev It returns to the external caller whatever the implementation returns or forwards reverts + */ + function () external payable { + require(msg.value == 0,"CErc20Delegator:fallback: cannot send value to fallback"); + + // delegate all other functions to current implementation + delegateAndReturn(); + } } diff --git a/contracts/CEther.sol b/contracts/CEther.sol index e3f172392..e7bd14ea2 100644 --- a/contracts/CEther.sol +++ b/contracts/CEther.sol @@ -127,20 +127,6 @@ contract CEther is CToken { return startingBalance; } - /** - * @notice Checks whether the requested transfer matches the `msg` - * @dev Does NOT do a transfer - * @param from Address sending the Ether - * @param amount Amount of Ether being sent - * @return Whether or not the transfer checks out - */ - function checkTransferIn(address from, uint amount) internal view returns (Error) { - // Sanity checks - require(msg.sender == from, "sender mismatch"); - require(msg.value == amount, "value mismatch"); - return Error.NO_ERROR; - } - /** * @notice Perform the actual transfer in, which is a no-op * @param from Address sending the Ether diff --git a/contracts/CToken.sol b/contracts/CToken.sol index a493dc8a0..d1a697bb0 100644 --- a/contracts/CToken.sol +++ b/contracts/CToken.sol @@ -337,7 +337,8 @@ contract CToken is CTokenInterface, Exponential, TokenErrorReporter { * @return (error code, calculated exchange rate scaled by 1e18) */ function exchangeRateStoredInternal() internal view returns (MathError, uint) { - if (totalSupply == 0) { + uint _totalSupply = totalSupply; + if (_totalSupply == 0) { /* * If there are no tokens minted: * exchangeRate = initialExchangeRate @@ -358,7 +359,7 @@ contract CToken is CTokenInterface, Exponential, TokenErrorReporter { return (mathErr, 0); } - (mathErr, exchangeRate) = getExp(cashPlusBorrowsMinusReserves, totalSupply); + (mathErr, exchangeRate) = getExp(cashPlusBorrowsMinusReserves, _totalSupply); if (mathErr != MathError.NO_ERROR) { return (mathErr, 0); } @@ -375,40 +376,34 @@ contract CToken is CTokenInterface, Exponential, TokenErrorReporter { return getCashPrior(); } - struct AccrueInterestLocalVars { - MathError mathErr; - uint opaqueErr; - uint borrowRateMantissa; - uint currentBlockNumber; - uint blockDelta; - - Exp simpleInterestFactor; - - uint interestAccumulated; - uint totalBorrowsNew; - uint totalReservesNew; - uint borrowIndexNew; - } - /** * @notice Applies accrued interest to total borrows and reserves * @dev This calculates interest accrued from the last checkpointed block * up to the current block and writes new checkpoint to storage. */ function accrueInterest() public returns (uint) { - AccrueInterestLocalVars memory vars; + /* Remember the initial block number */ + uint currentBlockNumber = getBlockNumber(); + uint accrualBlockNumberPrior = accrualBlockNumber; + + /* Short-circuit accumulating 0 interest */ + if (accrualBlockNumberPrior == currentBlockNumber) { + return uint(Error.NO_ERROR); + } + + /* Read the previous values out of storage */ uint cashPrior = getCashPrior(); + uint borrowsPrior = totalBorrows; + uint reservesPrior = totalReserves; + uint borrowIndexPrior = borrowIndex; /* Calculate the current borrow interest rate */ - vars.borrowRateMantissa = interestRateModel.getBorrowRate(cashPrior, totalBorrows, totalReserves); - require(vars.borrowRateMantissa <= borrowRateMaxMantissa, "borrow rate is absurdly high"); - - /* Remember the initial block number */ - vars.currentBlockNumber = getBlockNumber(); + uint borrowRateMantissa = interestRateModel.getBorrowRate(cashPrior, borrowsPrior, reservesPrior); + require(borrowRateMantissa <= borrowRateMaxMantissa, "borrow rate is absurdly high"); /* Calculate the number of blocks elapsed since the last accrual */ - (vars.mathErr, vars.blockDelta) = subUInt(vars.currentBlockNumber, accrualBlockNumber); - require(vars.mathErr == MathError.NO_ERROR, "could not calculate block delta"); + (MathError mathErr, uint blockDelta) = subUInt(currentBlockNumber, accrualBlockNumberPrior); + require(mathErr == MathError.NO_ERROR, "could not calculate block delta"); /* * Calculate the interest accumulated into borrows and reserves and the new index: @@ -418,29 +413,36 @@ contract CToken is CTokenInterface, Exponential, TokenErrorReporter { * totalReservesNew = interestAccumulated * reserveFactor + totalReserves * borrowIndexNew = simpleInterestFactor * borrowIndex + borrowIndex */ - (vars.mathErr, vars.simpleInterestFactor) = mulScalar(Exp({mantissa: vars.borrowRateMantissa}), vars.blockDelta); - if (vars.mathErr != MathError.NO_ERROR) { - return failOpaque(Error.MATH_ERROR, FailureInfo.ACCRUE_INTEREST_SIMPLE_INTEREST_FACTOR_CALCULATION_FAILED, uint(vars.mathErr)); + + Exp memory simpleInterestFactor; + uint interestAccumulated; + uint totalBorrowsNew; + uint totalReservesNew; + uint borrowIndexNew; + + (mathErr, simpleInterestFactor) = mulScalar(Exp({mantissa: borrowRateMantissa}), blockDelta); + if (mathErr != MathError.NO_ERROR) { + return failOpaque(Error.MATH_ERROR, FailureInfo.ACCRUE_INTEREST_SIMPLE_INTEREST_FACTOR_CALCULATION_FAILED, uint(mathErr)); } - (vars.mathErr, vars.interestAccumulated) = mulScalarTruncate(vars.simpleInterestFactor, totalBorrows); - if (vars.mathErr != MathError.NO_ERROR) { - return failOpaque(Error.MATH_ERROR, FailureInfo.ACCRUE_INTEREST_ACCUMULATED_INTEREST_CALCULATION_FAILED, uint(vars.mathErr)); + (mathErr, interestAccumulated) = mulScalarTruncate(simpleInterestFactor, borrowsPrior); + if (mathErr != MathError.NO_ERROR) { + return failOpaque(Error.MATH_ERROR, FailureInfo.ACCRUE_INTEREST_ACCUMULATED_INTEREST_CALCULATION_FAILED, uint(mathErr)); } - (vars.mathErr, vars.totalBorrowsNew) = addUInt(vars.interestAccumulated, totalBorrows); - if (vars.mathErr != MathError.NO_ERROR) { - return failOpaque(Error.MATH_ERROR, FailureInfo.ACCRUE_INTEREST_NEW_TOTAL_BORROWS_CALCULATION_FAILED, uint(vars.mathErr)); + (mathErr, totalBorrowsNew) = addUInt(interestAccumulated, borrowsPrior); + if (mathErr != MathError.NO_ERROR) { + return failOpaque(Error.MATH_ERROR, FailureInfo.ACCRUE_INTEREST_NEW_TOTAL_BORROWS_CALCULATION_FAILED, uint(mathErr)); } - (vars.mathErr, vars.totalReservesNew) = mulScalarTruncateAddUInt(Exp({mantissa: reserveFactorMantissa}), vars.interestAccumulated, totalReserves); - if (vars.mathErr != MathError.NO_ERROR) { - return failOpaque(Error.MATH_ERROR, FailureInfo.ACCRUE_INTEREST_NEW_TOTAL_RESERVES_CALCULATION_FAILED, uint(vars.mathErr)); + (mathErr, totalReservesNew) = mulScalarTruncateAddUInt(Exp({mantissa: reserveFactorMantissa}), interestAccumulated, reservesPrior); + if (mathErr != MathError.NO_ERROR) { + return failOpaque(Error.MATH_ERROR, FailureInfo.ACCRUE_INTEREST_NEW_TOTAL_RESERVES_CALCULATION_FAILED, uint(mathErr)); } - (vars.mathErr, vars.borrowIndexNew) = mulScalarTruncateAddUInt(vars.simpleInterestFactor, borrowIndex, borrowIndex); - if (vars.mathErr != MathError.NO_ERROR) { - return failOpaque(Error.MATH_ERROR, FailureInfo.ACCRUE_INTEREST_NEW_BORROW_INDEX_CALCULATION_FAILED, uint(vars.mathErr)); + (mathErr, borrowIndexNew) = mulScalarTruncateAddUInt(simpleInterestFactor, borrowIndexPrior, borrowIndexPrior); + if (mathErr != MathError.NO_ERROR) { + return failOpaque(Error.MATH_ERROR, FailureInfo.ACCRUE_INTEREST_NEW_BORROW_INDEX_CALCULATION_FAILED, uint(mathErr)); } ///////////////////////// @@ -448,13 +450,13 @@ contract CToken is CTokenInterface, Exponential, TokenErrorReporter { // (No safe failures beyond this point) /* We write the previously calculated values into storage */ - accrualBlockNumber = vars.currentBlockNumber; - borrowIndex = vars.borrowIndexNew; - totalBorrows = vars.totalBorrowsNew; - totalReserves = vars.totalReservesNew; + accrualBlockNumber = currentBlockNumber; + borrowIndex = borrowIndexNew; + totalBorrows = totalBorrowsNew; + totalReserves = totalReservesNew; /* We emit an AccrueInterest event */ - emit AccrueInterest(cashPrior, vars.interestAccumulated, vars.borrowIndexNew, totalBorrows); + emit AccrueInterest(cashPrior, interestAccumulated, borrowIndexNew, totalBorrowsNew); return uint(Error.NO_ERROR); } @@ -506,12 +508,6 @@ contract CToken is CTokenInterface, Exponential, TokenErrorReporter { MintLocalVars memory vars; - /* Fail if checkTransferIn fails */ - vars.err = checkTransferIn(minter, mintAmount); - if (vars.err != Error.NO_ERROR) { - return (fail(vars.err, FailureInfo.MINT_TRANSFER_IN_NOT_POSSIBLE), 0); - } - (vars.mathErr, vars.exchangeRateMantissa) = exchangeRateStoredInternal(); if (vars.mathErr != MathError.NO_ERROR) { return (failOpaque(Error.MATH_ERROR, FailureInfo.MINT_EXCHANGE_RATE_READ_FAILED, uint(vars.mathErr)), 0); @@ -881,12 +877,6 @@ contract CToken is CTokenInterface, Exponential, TokenErrorReporter { vars.repayAmount = repayAmount; } - /* Fail if checkTransferIn fails */ - vars.err = checkTransferIn(payer, vars.repayAmount); - if (vars.err != Error.NO_ERROR) { - return (fail(vars.err, FailureInfo.REPAY_BORROW_TRANSFER_IN_NOT_POSSIBLE), 0); - } - ///////////////////////// // EFFECTS & INTERACTIONS // (No safe failures beyond this point) @@ -1255,18 +1245,18 @@ contract CToken is CTokenInterface, Exponential, TokenErrorReporter { return (fail(Error.MARKET_NOT_FRESH, FailureInfo.ADD_RESERVES_FRESH_CHECK), actualAddAmount); } - /* Fail if checkTransferIn fails */ - Error err = checkTransferIn(msg.sender, addAmount); - if (err != Error.NO_ERROR) { - return (fail(err, FailureInfo.ADD_RESERVES_TRANSFER_IN_NOT_POSSIBLE), actualAddAmount); - } - - ///////////////////////// // EFFECTS & INTERACTIONS // (No safe failures beyond this point) - /* actualAddAmount=invoke doTransferIn(msg.sender, addAmount) */ + /* + * We call doTransferIn for the caller and the addAmount + * Note: The cToken must handle variations between ERC-20 and ETH underlying. + * On success, the cToken holds an additional addAmount of cash. + * doTransferIn reverts if anything goes wrong, since we can't be sure if side effects occurred. + * it returns the amount actually transferred, in case of a fee. + */ + actualAddAmount = doTransferIn(msg.sender, addAmount); totalReservesNew = totalReserves + actualAddAmount; @@ -1410,16 +1400,9 @@ contract CToken is CTokenInterface, Exponential, TokenErrorReporter { */ function getCashPrior() internal view returns (uint); - /** - * @dev Checks whether or not there is sufficient allowance for this contract to move amount from `from` and - * whether or not `from` has a balance of at least `amount`. Does NOT do a transfer. - */ - function checkTransferIn(address from, uint amount) internal view returns (Error); - /** * @dev Performs a transfer in, reverting upon failure. Returns the amount actually transferred to the protocol, in case of a fee. - * If caller has not called `checkTransferIn`, this may revert due to insufficient balance or insufficient allowance. - * If caller has called `checkTransferIn` successfully, this should not revert in normal conditions. + * This may revert due to insufficient balance or insufficient allowance. */ function doTransferIn(address from, uint amount) internal returns (uint); diff --git a/contracts/Comptroller.sol b/contracts/Comptroller.sol index 484fe1d69..72dd15fa3 100644 --- a/contracts/Comptroller.sol +++ b/contracts/Comptroller.sol @@ -68,11 +68,6 @@ contract Comptroller is ComptrollerV2Storage, ComptrollerInterface, ComptrollerE */ event ActionPaused(CToken cToken, string action, bool pauseState); - /** - * @notice Indicator that this is a Comptroller contract (for inspection) - */ - bool public constant isComptroller = true; - // closeFactorMantissa must be strictly greater than this value uint internal constant closeFactorMinMantissa = 0.05e18; // 0.05 @@ -665,6 +660,25 @@ contract Comptroller is ComptrollerV2Storage, ComptrollerInterface, ComptrollerE return getHypotheticalAccountLiquidityInternal(account, CToken(0), 0, 0); } + /** + * @notice Determine what the account liquidity would be if the given amounts were redeemed/borrowed + * @param cTokenModify The market to hypothetically redeem/borrow in + * @param account The account to determine liquidity for + * @param redeemTokens The number of tokens to hypothetically redeem + * @param borrowAmount The amount of underlying to hypothetically borrow + * @return (possible error code (semi-opaque), + hypothetical account liquidity in excess of collateral requirements, + * hypothetical account shortfall below collateral requirements) + */ + function getHypotheticalAccountLiquidity( + address account, + address cTokenModify, + uint redeemTokens, + uint borrowAmount) public view returns (uint, uint, uint) { + (Error err, uint liquidity, uint shortfall) = getHypotheticalAccountLiquidityInternal(account, CToken(cTokenModify), redeemTokens, borrowAmount); + return (uint(err), liquidity, shortfall); + } + /** * @notice Determine what the account liquidity would be if the given amounts were redeemed/borrowed * @param cTokenModify The market to hypothetically redeem/borrow in @@ -1044,4 +1058,4 @@ contract Comptroller is ComptrollerV2Storage, ComptrollerInterface, ComptrollerE uint changeStatus = unitroller._acceptImplementation(); require(changeStatus == 0, "change not authorized"); } -} \ No newline at end of file +} diff --git a/contracts/ComptrollerG1.sol b/contracts/ComptrollerG1.sol index b0b2c3eb6..9e243f660 100644 --- a/contracts/ComptrollerG1.sol +++ b/contracts/ComptrollerG1.sol @@ -80,11 +80,6 @@ contract ComptrollerG1 is ComptrollerV1Storage, ComptrollerInterface, Comptrolle */ event NewPriceOracle(PriceOracle oldPriceOracle, PriceOracle newPriceOracle); - /** - * @notice Indicator that this is a Comptroller contract (for inspection) - */ - bool public constant isComptroller = true; - // closeFactorMantissa must be strictly greater than this value uint constant closeFactorMinMantissa = 5e16; // 0.05 diff --git a/contracts/ComptrollerInterface.sol b/contracts/ComptrollerInterface.sol index bcf2ff6ec..ce63c7849 100644 --- a/contracts/ComptrollerInterface.sol +++ b/contracts/ComptrollerInterface.sol @@ -1,12 +1,8 @@ pragma solidity ^0.5.16; -interface ComptrollerInterface { - /** - * @notice Marker function used for light validation when updating the comptroller of a market - * @dev Implementations should simply return true. - * @return true - */ - function isComptroller() external view returns (bool); +contract ComptrollerInterface { + /// @notice Indicator that this is a Comptroller contract (for inspection) + bool public constant isComptroller = true; /*** Assets You Are In ***/ diff --git a/contracts/DAIInterestRateModel.sol b/contracts/DAIInterestRateModel.sol index 03c82a399..3efb79a55 100644 --- a/contracts/DAIInterestRateModel.sol +++ b/contracts/DAIInterestRateModel.sol @@ -92,24 +92,18 @@ contract DAIInterestRateModel is JumpRateModel { /*** Maker Interfaces ***/ -contract PotLike { - function chi() public view returns (uint); - function dsr() public view returns (uint); - function rho() public view returns (uint); - function pie(address) public view returns (uint); - function drip() public returns (uint); - function join(uint) public; - function exit(uint) public; +interface PotLike { + function chi() external view returns (uint); + function dsr() external view returns (uint); + function rho() external view returns (uint); + function pie(address) external view returns (uint); + function drip() external returns (uint); + function join(uint) external; + function exit(uint) external; } -contract JugLike { - // --- Data --- - struct Ilk { - uint256 duty; - uint256 rho; - } - - mapping (bytes32 => Ilk) public ilks; - uint256 public base; +interface JugLike { + function ilks(bytes32) external view returns (uint duty, uint rho); + function base() external view returns (uint); } diff --git a/contracts/InterestRateModel.sol b/contracts/InterestRateModel.sol index d7ebb94a7..b1842cb71 100644 --- a/contracts/InterestRateModel.sol +++ b/contracts/InterestRateModel.sol @@ -4,11 +4,9 @@ pragma solidity ^0.5.16; * @title Compound's InterestRateModel Interface * @author Compound */ -interface InterestRateModel { - /** - * @notice Indicator that this is an InterestRateModel contract (for inspection) - */ - function isInterestRateModel() external pure returns (bool); +contract InterestRateModel { + /// @notice Indicator that this is an InterestRateModel contract (for inspection) + bool public constant isInterestRateModel = true; /** * @notice Calculates the current borrow interest rate per block diff --git a/contracts/JumpRateModel.sol b/contracts/JumpRateModel.sol index 32d528257..7548aef7c 100644 --- a/contracts/JumpRateModel.sol +++ b/contracts/JumpRateModel.sol @@ -12,11 +12,6 @@ contract JumpRateModel is InterestRateModel { event NewInterestParams(uint baseRatePerBlock, uint multiplierPerBlock, uint jumpMultiplierPerBlock, uint kink); - /** - * @notice Indicator that this is an InterestRateModel contract (for inspection) - */ - bool public constant isInterestRateModel = true; - /** * @notice The approximate number of blocks per year that is assumed by the interest rate model */ diff --git a/contracts/Maximillion.sol b/contracts/Maximillion.sol index 5470c15bc..a511c97a9 100644 --- a/contracts/Maximillion.sol +++ b/contracts/Maximillion.sol @@ -23,10 +23,9 @@ contract Maximillion { * @notice msg.sender sends Ether to repay an account's borrow in the cEther market * @dev The provided Ether is applied towards the borrow balance, any excess is refunded * @param borrower The address of the borrower account to repay on behalf of - * @return The initial borrows before the repay */ function repayBehalf(address borrower) public payable { - return repayBehalfExplicit(borrower, cEther); + repayBehalfExplicit(borrower, cEther); } /** @@ -34,7 +33,6 @@ contract Maximillion { * @dev The provided Ether is applied towards the borrow balance, any excess is refunded * @param borrower The address of the borrower account to repay on behalf of * @param cEther_ The address of the cEther contract to repay in - * @return The initial borrows before the repay */ function repayBehalfExplicit(address borrower, CEther cEther_) public payable { uint received = msg.value; diff --git a/contracts/PriceOracle.sol b/contracts/PriceOracle.sol index 372d852f6..27bcc99e6 100644 --- a/contracts/PriceOracle.sol +++ b/contracts/PriceOracle.sol @@ -2,11 +2,9 @@ pragma solidity ^0.5.16; import "./CToken.sol"; -interface PriceOracle { - /** - * @notice Indicator that this is a PriceOracle contract (for inspection) - */ - function isPriceOracle() external pure returns (bool); +contract PriceOracle { + /// @notice Indicator that this is a PriceOracle contract (for inspection) + bool public constant isPriceOracle = true; /** * @notice Get the underlying price of a cToken asset diff --git a/contracts/PriceOracleProxy.sol b/contracts/PriceOracleProxy.sol index 04ffcbf52..7c29c0e46 100644 --- a/contracts/PriceOracleProxy.sol +++ b/contracts/PriceOracleProxy.sol @@ -24,7 +24,10 @@ contract PriceOracleProxy is PriceOracle { /// @notice Address of the cUSDC contract, which we hand pick a key for address public cUsdcAddress; - /// @notice Address of the cSAI contract, which we hand pick a key for + /// @notice Address of the cUSDT contract, which uses the cUSDC price + address public cUsdtAddress; + + /// @notice Address of the cSAI contract, which may have its price set address public cSaiAddress; /// @notice Address of the cDAI contract, which we hand pick a key for @@ -44,15 +47,17 @@ contract PriceOracleProxy is PriceOracle { * @param v1PriceOracle_ The address of the v1 price oracle, which will continue to operate and hold prices for collateral assets * @param cEthAddress_ The address of cETH, which will return a constant 1e18, since all prices relative to ether * @param cUsdcAddress_ The address of cUSDC, which will be read from a special oracle key - * @param cSaiAddress_ The address of cSAI, which will be read directly from storage + * @param cSaiAddress_ The address of cSAI, which may be read directly from storage * @param cDaiAddress_ The address of cDAI, which will be read from a special oracle key + * @param cUsdtAddress_ The address of cUSDT, which uses the cUSDC price */ constructor(address guardian_, address v1PriceOracle_, address cEthAddress_, address cUsdcAddress_, address cSaiAddress_, - address cDaiAddress_) public { + address cDaiAddress_, + address cUsdtAddress_) public { guardian = guardian_; v1PriceOracle = V1PriceOracleInterface(v1PriceOracle_); @@ -60,6 +65,7 @@ contract PriceOracleProxy is PriceOracle { cUsdcAddress = cUsdcAddress_; cSaiAddress = cSaiAddress_; cDaiAddress = cDaiAddress_; + cUsdtAddress = cUsdtAddress_; } /** @@ -75,7 +81,7 @@ contract PriceOracleProxy is PriceOracle { return 1e18; } - if (cTokenAddress == cUsdcAddress) { + if (cTokenAddress == cUsdcAddress || cTokenAddress == cUsdtAddress) { return v1PriceOracle.assetPrices(usdcOracleKey); } diff --git a/contracts/SafeMath.sol b/contracts/SafeMath.sol index e3bb5ebd9..b27c9962d 100644 --- a/contracts/SafeMath.sol +++ b/contracts/SafeMath.sol @@ -96,6 +96,28 @@ library SafeMath { return c; } + /** + * @dev Returns the multiplication of two unsigned integers, reverting on overflow. + * + * Counterpart to Solidity's `*` operator. + * + * Requirements: + * - Multiplication cannot overflow. + */ + function mul(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { + // Gas optimization: this is cheaper than requiring 'a' not being zero, but the + // benefit is lost if 'b' is also tested. + // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 + if (a == 0) { + return 0; + } + + uint256 c = a * b; + require(c / a == b, errorMessage); + + return c; + } + /** * @dev Returns the integer division of two unsigned integers. * Reverts on division by zero. The result is rounded towards zero. diff --git a/contracts/SimplePriceOracle.sol b/contracts/SimplePriceOracle.sol index ea16be13f..32d572f97 100644 --- a/contracts/SimplePriceOracle.sol +++ b/contracts/SimplePriceOracle.sol @@ -5,10 +5,8 @@ import "./CErc20.sol"; contract SimplePriceOracle is PriceOracle { mapping(address => uint) prices; - bool public constant isPriceOracle = true; event PricePosted(address asset, uint previousPriceMantissa, uint requestedPriceMantissa, uint newPriceMantissa); - function getUnderlyingPrice(CToken cToken) public view returns (uint) { if (compareStrings(cToken.symbol(), "cETH")) { return 1e18; diff --git a/contracts/WhitePaperInterestRateModel.sol b/contracts/WhitePaperInterestRateModel.sol index d5a2ff67b..6fb197778 100644 --- a/contracts/WhitePaperInterestRateModel.sol +++ b/contracts/WhitePaperInterestRateModel.sol @@ -13,11 +13,6 @@ contract WhitePaperInterestRateModel is InterestRateModel { event NewInterestParams(uint baseRatePerBlock, uint multiplierPerBlock); - /** - * @notice Indicator that this is an InterestRateModel contract (for inspection) - */ - bool public constant isInterestRateModel = true; - /** * @notice The approximate number of blocks per year that is assumed by the interest rate model */ diff --git a/gasCosts.json b/gasCosts.json new file mode 100644 index 000000000..b38bf66e8 --- /dev/null +++ b/gasCosts.json @@ -0,0 +1,89 @@ +{ + "second mint": { + "fee": 86450, + "opcodes": { + "PUSH1 @ 3": 589, + "MSTORE @ 12": 9, + "CALLDATASIZE @ 2": 19, + "LT @ 3": 34, + "PUSH2 @ 3": 322, + "JUMPI @ 10": 182, + "CALLDATALOAD @ 3": 24, + "SHR @ 3": 9, + "DUP1 @ 3": 196, + "PUSH4 @ 3": 73, + "GT @ 3": 46, + "JUMPDEST @ 1": 273, + "EQ @ 3": 48, + "CALLVALUE @ 2": 9, + "ISZERO @ 3": 91, + "POP @ 2": 308, + "SUB @ 3": 62, + "DUP2 @ 3": 183, + "JUMP @ 8": 128, + "SLOAD @ 800": 38, + "MLOAD @ 3": 93, + "SWAP2 @ 3": 108, + "SHL @ 3": 35, + "SWAP1 @ 3": 231, + "AND @ 3": 51, + "DUP3 @ 3": 77, + "DUP4 @ 3": 75, + "DUP5 @ 3": 22, + "CALLDATACOPY @ 18": 1, + "SWAP3 @ 3": 77, + "ADD @ 3": 130, + "SWAP5 @ 3": 10, + "SWAP4 @ 3": 35, + "DUP6 @ 3": 24, + "GAS @ 2": 8, + "DELEGATECALL @ 700": 1, + "NOT @ 3": 4, + "SSTORE @ 5000": 7, + "MSTORE @ 3": 91, + "MSTORE @ 9": 8, + "MSTORE @ 6": 30, + "MSTORE @ 24": 1, + "ADDRESS @ 2": 7, + "DUP7 @ 3": 19, + "EXTCODESIZE @ 700": 7, + "STATICCALL @ 700": 5, + "SHA3 @ 42": 14, + "RETURN @ 0": 9, + "RETURNDATASIZE @ 2": 13, + "DUP8 @ 3": 12, + "SWAP6 @ 3": 7, + "SWAP7 @ 3": 2, + "PUSH8 @ 3": 8, + "PUSH32 @ 3": 5, + "DIV @ 5": 11, + "PUSH6 @ 3": 1, + "DUP9 @ 3": 11, + "CODECOPY @ 12": 1, + "CODECOPY @ 16": 2, + "CODECOPY @ 15": 4, + "DUP13 @ 3": 1, + "DUP12 @ 3": 1, + "DUP15 @ 3": 1, + "SSTORE @ 800": 4, + "DUP14 @ 3": 1, + "MSTORE @ 7": 4, + "LOG1 @ 1774": 1, + "SWAP15 @ 3": 1, + "CALLER @ 2": 3, + "CALL @ 700": 2, + "MUL @ 5": 3, + "SWAP9 @ 3": 2, + "SWAP8 @ 3": 2, + "LOG3 @ 1756": 2, + "RETURNDATACOPY @ 6": 2, + "LOG1 @ 1518": 1, + "CODECOPY @ 6": 1, + "OR @ 3": 1, + "RETURNDATACOPY @ 9": 1 + } + }, + "redeem": 94077, + "first mint": 134954, + "second mint, no interest accrued": 70851 +} \ No newline at end of file diff --git a/networks/mainnet-abi.json b/networks/mainnet-abi.json index a7486b607..3d6461124 100644 --- a/networks/mainnet-abi.json +++ b/networks/mainnet-abi.json @@ -1968,6 +1968,11 @@ "internalType": "address", "name": "cDaiAddress_", "type": "address" + }, + { + "internalType": "address", + "name": "cUsdtAddress_", + "type": "address" } ], "payable": false, @@ -2039,6 +2044,22 @@ "type": "function", "signature": "0xff11439b" }, + { + "constant": true, + "inputs": [], + "name": "cUsdtAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x1a3cb2e8" + }, { "constant": true, "inputs": [], @@ -2237,23 +2258,28 @@ "signature": "constructor" } ], - "GovernorAlpha": [ + "Base200bps_Slope2000bps_Jump20000bps_Kink90": [ { "inputs": [ { - "internalType": "address", - "name": "timelock_", - "type": "address" + "internalType": "uint256", + "name": "baseRatePerYear", + "type": "uint256" }, { - "internalType": "address", - "name": "comp_", - "type": "address" + "internalType": "uint256", + "name": "multiplierPerYear", + "type": "uint256" }, { - "internalType": "address", - "name": "guardian_", - "type": "address" + "internalType": "uint256", + "name": "jumpMultiplierPerYear", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kink_", + "type": "uint256" } ], "payable": false, @@ -2267,207 +2293,461 @@ { "indexed": false, "internalType": "uint256", - "name": "id", + "name": "baseRatePerBlock", "type": "uint256" - } - ], - "name": "ProposalCanceled", - "type": "event", - "signature": "0x789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c" - }, - { - "anonymous": false, - "inputs": [ + }, { "indexed": false, "internalType": "uint256", - "name": "id", + "name": "multiplierPerBlock", "type": "uint256" }, - { - "indexed": false, - "internalType": "address", - "name": "proposer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "string[]", - "name": "signatures", - "type": "string[]" - }, - { - "indexed": false, - "internalType": "bytes[]", - "name": "calldatas", - "type": "bytes[]" - }, { "indexed": false, "internalType": "uint256", - "name": "startBlock", + "name": "jumpMultiplierPerBlock", "type": "uint256" }, { "indexed": false, "internalType": "uint256", - "name": "endBlock", + "name": "kink", "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "description", - "type": "string" } ], - "name": "ProposalCreated", + "name": "NewInterestParams", "type": "event", - "signature": "0x7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e0" + "signature": "0x6960ab234c7ef4b0c9197100f5393cfcde7c453ac910a27bd2000aa1dd4c068d" }, { - "anonymous": false, - "inputs": [ + "constant": true, + "inputs": [], + "name": "baseRatePerBlock", + "outputs": [ { - "indexed": false, "internalType": "uint256", - "name": "id", + "name": "", "type": "uint256" } ], - "name": "ProposalExecuted", - "type": "event", - "signature": "0x712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f" + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xf14039de" }, { - "anonymous": false, + "constant": true, + "inputs": [], + "name": "blocksPerYear", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xa385fb96" + }, + { + "constant": true, "inputs": [ { - "indexed": false, "internalType": "uint256", - "name": "id", + "name": "cash", "type": "uint256" }, { - "indexed": false, "internalType": "uint256", - "name": "eta", + "name": "borrows", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserves", "type": "uint256" } ], - "name": "ProposalQueued", - "type": "event", - "signature": "0x9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892" + "name": "getBorrowRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x15f24053" }, { - "anonymous": false, + "constant": true, "inputs": [ { - "indexed": false, - "internalType": "address", - "name": "voter", - "type": "address" + "internalType": "uint256", + "name": "cash", + "type": "uint256" }, { - "indexed": false, "internalType": "uint256", - "name": "proposalId", + "name": "borrows", "type": "uint256" }, { - "indexed": false, - "internalType": "bool", - "name": "support", - "type": "bool" + "internalType": "uint256", + "name": "reserves", + "type": "uint256" }, { - "indexed": false, "internalType": "uint256", - "name": "votes", + "name": "reserveFactorMantissa", "type": "uint256" } ], - "name": "VoteCast", - "type": "event", - "signature": "0x877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c46" + "name": "getSupplyRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xb8168816" }, { "constant": true, "inputs": [], - "name": "BALLOT_TYPEHASH", + "name": "isInterestRateModel", "outputs": [ { - "internalType": "bytes32", + "internalType": "bool", "name": "", - "type": "bytes32" + "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0xdeaaa7cc" + "signature": "0x2191f92a" }, { "constant": true, "inputs": [], - "name": "DOMAIN_TYPEHASH", + "name": "jumpMultiplierPerBlock", "outputs": [ { - "internalType": "bytes32", + "internalType": "uint256", "name": "", - "type": "bytes32" + "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x20606b70" + "signature": "0xb9f9850a" }, { - "constant": false, + "constant": true, "inputs": [], - "name": "__abdicate", - "outputs": [], + "name": "kink", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0x760fbc13" + "signature": "0xfd2da339" }, { - "constant": false, + "constant": true, "inputs": [], - "name": "__acceptAdmin", - "outputs": [], + "name": "multiplierPerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0xb9a61961" + "signature": "0x8726bb89" }, { - "constant": false, + "constant": true, "inputs": [ { - "internalType": "address", - "name": "newPendingAdmin", - "type": "address" + "internalType": "uint256", + "name": "cash", + "type": "uint256" }, { "internalType": "uint256", - "name": "eta", + "name": "borrows", "type": "uint256" - } + }, + { + "internalType": "uint256", + "name": "reserves", + "type": "uint256" + } + ], + "name": "utilizationRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function", + "signature": "0x6e71e2d8" + } + ], + "GovernorAlpha": [ + { + "inputs": [ + { + "internalType": "address", + "name": "timelock_", + "type": "address" + }, + { + "internalType": "address", + "name": "comp_", + "type": "address" + }, + { + "internalType": "address", + "name": "guardian_", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor", + "signature": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "ProposalCanceled", + "type": "event", + "signature": "0x789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "proposer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "string[]", + "name": "signatures", + "type": "string[]" + }, + { + "indexed": false, + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "startBlock", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "endBlock", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "description", + "type": "string" + } + ], + "name": "ProposalCreated", + "type": "event", + "signature": "0x7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e0" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "ProposalExecuted", + "type": "event", + "signature": "0x712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "eta", + "type": "uint256" + } + ], + "name": "ProposalQueued", + "type": "event", + "signature": "0x9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "voter", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "support", + "type": "bool" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "votes", + "type": "uint256" + } + ], + "name": "VoteCast", + "type": "event", + "signature": "0x877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c46" + }, + { + "constant": true, + "inputs": [], + "name": "BALLOT_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xdeaaa7cc" + }, + { + "constant": true, + "inputs": [], + "name": "DOMAIN_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x20606b70" + }, + { + "constant": false, + "inputs": [], + "name": "__abdicate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x760fbc13" + }, + { + "constant": false, + "inputs": [], + "name": "__acceptAdmin", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xb9a61961" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "newPendingAdmin", + "type": "address" + }, + { + "internalType": "uint256", + "name": "eta", + "type": "uint256" + } ], "name": "__executeSetTimelockPendingAdmin", "outputs": [], @@ -8291,211 +8571,485 @@ "signature": "0x8d925ccd" } ], - "Comptroller": [ + "USDT": [ { - "constant": true, - "inputs": [], - "name": "pendingAdmin", - "outputs": [ + "anonymous": false, + "inputs": [ { - "name": "", + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event", + "signature": "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event", + "signature": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", "type": "address" } ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "remaining", + "type": "uint256" + } + ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x26782247" + "signature": "0xdd62ed3e" }, { "constant": false, "inputs": [ { - "name": "newPendingAdmin", + "internalType": "address", + "name": "spender", "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" } ], - "name": "_setPendingAdmin", + "name": "approve", "outputs": [ { - "name": "", - "type": "uint256" + "internalType": "bool", + "name": "success", + "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xb71d1a0c" + "signature": "0x095ea7b3" }, { "constant": true, - "inputs": [], - "name": "comptrollerImplementation", - "outputs": [ + "inputs": [ { - "name": "", + "internalType": "address", + "name": "owner", "type": "address" } ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0xbb82aa5e" + "signature": "0x70a08231" }, { - "constant": false, + "constant": true, "inputs": [], - "name": "_acceptImplementation", + "name": "decimals", "outputs": [ { + "internalType": "uint8", "name": "", - "type": "uint256" + "type": "uint8" } ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0xc1e80334" + "signature": "0x313ce567" }, { "constant": true, "inputs": [], - "name": "pendingComptrollerImplementation", + "name": "name", "outputs": [ { + "internalType": "string", "name": "", - "type": "address" + "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0xdcfbc0c7" + "signature": "0x06fdde03" }, { "constant": false, "inputs": [ { - "name": "newPendingImplementation", - "type": "address" - } - ], - "name": "_setPendingImplementation", - "outputs": [ + "internalType": "uint256", + "name": "newBasisPoints", + "type": "uint256" + }, { - "name": "", + "internalType": "uint256", + "name": "newMaxFee", "type": "uint256" } ], + "name": "setParams", + "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xe992a041" + "signature": "0xc0324c77" }, { - "constant": false, + "constant": true, "inputs": [], - "name": "_acceptAdmin", + "name": "symbol", "outputs": [ { + "internalType": "string", "name": "", - "type": "uint256" + "type": "string" } ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0xe9c714f2" + "signature": "0x95d89b41" }, { "constant": true, "inputs": [], - "name": "admin", + "name": "totalSupply", "outputs": [ { + "internalType": "uint256", "name": "", - "type": "address" + "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0xf851a440" - }, - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor", - "signature": "constructor" - }, - { - "payable": true, - "stateMutability": "payable", - "type": "fallback" + "signature": "0x18160ddd" }, { - "anonymous": false, + "constant": false, "inputs": [ { - "indexed": false, - "name": "oldPendingImplementation", + "internalType": "address", + "name": "dst", "type": "address" }, { - "indexed": false, - "name": "newPendingImplementation", - "type": "address" + "internalType": "uint256", + "name": "amount", + "type": "uint256" } ], - "name": "NewPendingImplementation", - "type": "event", - "signature": "0xe945ccee5d701fc83f9b8aa8ca94ea4219ec1fcbd4f4cab4f0ea57c5c3e1d815" + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xa9059cbb" }, { - "anonymous": false, + "constant": false, "inputs": [ { - "indexed": false, - "name": "oldImplementation", + "internalType": "address", + "name": "src", "type": "address" }, { - "indexed": false, - "name": "newImplementation", + "internalType": "address", + "name": "dst", "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" } ], - "name": "NewImplementation", - "type": "event", - "signature": "0xd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a" - }, - { - "anonymous": false, - "inputs": [ + "name": "transferFrom", + "outputs": [ { - "indexed": false, - "name": "oldPendingAdmin", - "type": "address" - }, + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x23b872dd" + } + ], + "Comptroller": [ + { + "constant": true, + "inputs": [], + "name": "pendingAdmin", + "outputs": [ { - "indexed": false, - "name": "newPendingAdmin", + "name": "", "type": "address" } ], - "name": "NewPendingAdmin", - "type": "event", - "signature": "0xca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9" + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x26782247" }, { - "anonymous": false, + "constant": false, "inputs": [ { - "indexed": false, - "name": "oldAdmin", + "name": "newPendingAdmin", "type": "address" - }, + } + ], + "name": "_setPendingAdmin", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xb71d1a0c" + }, + { + "constant": true, + "inputs": [], + "name": "comptrollerImplementation", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xbb82aa5e" + }, + { + "constant": false, + "inputs": [], + "name": "_acceptImplementation", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xc1e80334" + }, + { + "constant": true, + "inputs": [], + "name": "pendingComptrollerImplementation", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xdcfbc0c7" + }, + { + "constant": false, + "inputs": [ + { + "name": "newPendingImplementation", + "type": "address" + } + ], + "name": "_setPendingImplementation", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xe992a041" + }, + { + "constant": false, + "inputs": [], + "name": "_acceptAdmin", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xe9c714f2" + }, + { + "constant": true, + "inputs": [], + "name": "admin", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xf851a440" + }, + { + "inputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor", + "signature": "constructor" + }, + { + "payable": true, + "stateMutability": "payable", + "type": "fallback" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "oldPendingImplementation", + "type": "address" + }, + { + "indexed": false, + "name": "newPendingImplementation", + "type": "address" + } + ], + "name": "NewPendingImplementation", + "type": "event", + "signature": "0xe945ccee5d701fc83f9b8aa8ca94ea4219ec1fcbd4f4cab4f0ea57c5c3e1d815" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": false, + "name": "newImplementation", + "type": "address" + } + ], + "name": "NewImplementation", + "type": "event", + "signature": "0xd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "oldPendingAdmin", + "type": "address" + }, + { + "indexed": false, + "name": "newPendingAdmin", + "type": "address" + } + ], + "name": "NewPendingAdmin", + "type": "event", + "signature": "0xca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "oldAdmin", + "type": "address" + }, { "indexed": false, "name": "newAdmin", @@ -13165,48 +13719,1580 @@ "signature": "0x23b872dd" } ], - "cBAT": [ - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0x06fdde03" - }, + "cUSDT": [ { - "constant": false, "inputs": [ { - "name": "spender", + "internalType": "address", + "name": "underlying_", "type": "address" }, { - "name": "amount", + "internalType": "contract ComptrollerInterface", + "name": "comptroller_", + "type": "address" + }, + { + "internalType": "contract InterestRateModel", + "name": "interestRateModel_", + "type": "address" + }, + { + "internalType": "uint256", + "name": "initialExchangeRateMantissa_", "type": "uint256" - } - ], - "name": "approve", - "outputs": [ + }, { - "name": "", - "type": "bool" + "internalType": "string", + "name": "name_", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol_", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals_", + "type": "uint8" + }, + { + "internalType": "address payable", + "name": "admin_", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "becomeImplementationData", + "type": "bytes" } ], "payable": false, "stateMutability": "nonpayable", - "type": "function", - "signature": "0x095ea7b3" + "type": "constructor", + "signature": "constructor" }, { - "constant": false, + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "cashPrior", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "interestAccumulated", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "borrowIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" + } + ], + "name": "AccrueInterest", + "type": "event", + "signature": "0x4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc04" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event", + "signature": "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" + } + ], + "name": "Borrow", + "type": "event", + "signature": "0x13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab80" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "error", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "info", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "detail", + "type": "uint256" + } + ], + "name": "Failure", + "type": "event", + "signature": "0x45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "name": "LiquidateBorrow", + "type": "event", + "signature": "0x298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb52" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "mintTokens", + "type": "uint256" + } + ], + "name": "Mint", + "type": "event", + "signature": "0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "NewAdmin", + "type": "event", + "signature": "0xf9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract ComptrollerInterface", + "name": "oldComptroller", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract ComptrollerInterface", + "name": "newComptroller", + "type": "address" + } + ], + "name": "NewComptroller", + "type": "event", + "signature": "0x7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "NewImplementation", + "type": "event", + "signature": "0xd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract InterestRateModel", + "name": "oldInterestRateModel", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address" + } + ], + "name": "NewMarketInterestRateModel", + "type": "event", + "signature": "0xedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f926" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldPendingAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newPendingAdmin", + "type": "address" + } + ], + "name": "NewPendingAdmin", + "type": "event", + "signature": "0xca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldReserveFactorMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256" + } + ], + "name": "NewReserveFactor", + "type": "event", + "signature": "0xaaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f821460" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "redeemer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "name": "Redeem", + "type": "event", + "signature": "0xe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" + } + ], + "name": "RepayBorrow", + "type": "event", + "signature": "0x1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "benefactor", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "addAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256" + } + ], + "name": "ReservesAdded", + "type": "event", + "signature": "0xa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc5" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "admin", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "reduceAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256" + } + ], + "name": "ReservesReduced", + "type": "event", + "signature": "0x3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event", + "signature": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef" + }, + { + "payable": true, + "stateMutability": "payable", + "type": "fallback" + }, + { + "constant": false, + "inputs": [], + "name": "_acceptAdmin", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xe9c714f2" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "addAmount", + "type": "uint256" + } + ], + "name": "_addReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x3e941010" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "reduceAmount", + "type": "uint256" + } + ], + "name": "_reduceReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x601a0bf1" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "contract ComptrollerInterface", + "name": "newComptroller", + "type": "address" + } + ], + "name": "_setComptroller", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x4576b5db" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowResign", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "becomeImplementationData", + "type": "bytes" + } + ], + "name": "_setImplementation", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x555bcc40" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address" + } + ], + "name": "_setInterestRateModel", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xf2b3abbd" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "newPendingAdmin", + "type": "address" + } + ], + "name": "_setPendingAdmin", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xb71d1a0c" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256" + } + ], + "name": "_setReserveFactor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xfca7820b" + }, + { + "constant": true, + "inputs": [], + "name": "accrualBlockNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x6c540baf" + }, + { + "constant": false, + "inputs": [], + "name": "accrueInterest", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xa6afed95" + }, + { + "constant": true, + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xf851a440" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xdd62ed3e" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x095ea7b3" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x70a08231" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOfUnderlying", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x3af9e669" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + } + ], + "name": "borrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xc5ebeaec" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "borrowBalanceCurrent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x17bfdfbc" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "borrowBalanceStored", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x95dd9193" + }, + { + "constant": true, + "inputs": [], + "name": "borrowIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xaa5af0fd" + }, + { + "constant": true, + "inputs": [], + "name": "borrowRatePerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xf8f9da28" + }, + { + "constant": true, + "inputs": [], + "name": "comptroller", + "outputs": [ + { + "internalType": "contract ComptrollerInterface", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x5fe3b567" + }, + { + "constant": true, + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x313ce567" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "delegateToImplementation", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x0933c1ed" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "delegateToViewImplementation", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x4487152f" + }, + { + "constant": false, + "inputs": [], + "name": "exchangeRateCurrent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xbd6d894d" + }, + { + "constant": true, + "inputs": [], + "name": "exchangeRateStored", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x182df0f5" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getAccountSnapshot", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xc37f68e2" + }, + { + "constant": true, + "inputs": [], + "name": "getCash", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x3b1d21a2" + }, + { + "constant": true, + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x5c60da1b" + }, + { + "constant": true, + "inputs": [], + "name": "interestRateModel", + "outputs": [ + { + "internalType": "contract InterestRateModel", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xf3fdb15a" + }, + { + "constant": true, + "inputs": [], + "name": "isCToken", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xfe9c44ae" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "contract CTokenInterface", + "name": "cTokenCollateral", + "type": "address" + } + ], + "name": "liquidateBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xf5e3c462" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xa0712d68" + }, + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x06fdde03" + }, + { + "constant": true, + "inputs": [], + "name": "pendingAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x26782247" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "name": "redeem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xdb006a75" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + } + ], + "name": "redeemUnderlying", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x852a12e3" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "name": "repayBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x0e752702" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "name": "repayBorrowBehalf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x2608f818" + }, + { + "constant": true, + "inputs": [], + "name": "reserveFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x173b9904" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "name": "seize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xb2a02ff1" + }, + { + "constant": true, + "inputs": [], + "name": "supplyRatePerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xae9d70b0" + }, + { + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x95d89b41" + }, + { + "constant": true, + "inputs": [], + "name": "totalBorrows", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x47bd3718" + }, + { + "constant": false, + "inputs": [], + "name": "totalBorrowsCurrent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x73acee98" + }, + { + "constant": true, + "inputs": [], + "name": "totalReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x8f840ddd" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x18160ddd" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xa9059cbb" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "src", + "type": "address" + }, + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x23b872dd" + }, + { + "constant": true, + "inputs": [], + "name": "underlying", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x6f307dc3" + } + ], + "cBAT": [ + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x06fdde03" + }, + { + "constant": false, + "inputs": [ + { + "name": "spender", + "type": "address" + }, + { + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x095ea7b3" + }, + { + "constant": false, "inputs": [ { "name": "repayAmount", @@ -22057,165 +24143,424 @@ "anonymous": false, "inputs": [ { - "indexed": false, - "name": "oldAdmin", - "type": "address" + "indexed": false, + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": false, + "name": "newAdmin", + "type": "address" + } + ], + "name": "NewAdmin", + "type": "event", + "signature": "0xf9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "oldComptroller", + "type": "address" + }, + { + "indexed": false, + "name": "newComptroller", + "type": "address" + } + ], + "name": "NewComptroller", + "type": "event", + "signature": "0x7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "oldInterestRateModel", + "type": "address" + }, + { + "indexed": false, + "name": "newInterestRateModel", + "type": "address" + } + ], + "name": "NewMarketInterestRateModel", + "type": "event", + "signature": "0xedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f926" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "oldReserveFactorMantissa", + "type": "uint256" + }, + { + "indexed": false, + "name": "newReserveFactorMantissa", + "type": "uint256" + } + ], + "name": "NewReserveFactor", + "type": "event", + "signature": "0xaaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f821460" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "admin", + "type": "address" + }, + { + "indexed": false, + "name": "reduceAmount", + "type": "uint256" + }, + { + "indexed": false, + "name": "newTotalReserves", + "type": "uint256" + } + ], + "name": "ReservesReduced", + "type": "event", + "signature": "0x3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "error", + "type": "uint256" + }, + { + "indexed": false, + "name": "info", + "type": "uint256" + }, + { + "indexed": false, + "name": "detail", + "type": "uint256" + } + ], + "name": "Failure", + "type": "event", + "signature": "0x45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "from", + "type": "address" + }, + { + "indexed": true, + "name": "to", + "type": "address" + }, + { + "indexed": false, + "name": "amount", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event", + "signature": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "name": "amount", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event", + "signature": "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925" + } + ], + "Base200bps_Slope2000bps_Jump8000bps_Kink90": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "baseRatePerYear", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "multiplierPerYear", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "jumpMultiplierPerYear", + "type": "uint256" }, { - "indexed": false, - "name": "newAdmin", - "type": "address" + "internalType": "uint256", + "name": "kink_", + "type": "uint256" } ], - "name": "NewAdmin", - "type": "event", - "signature": "0xf9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc" + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor", + "signature": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, - "name": "oldComptroller", - "type": "address" + "internalType": "uint256", + "name": "baseRatePerBlock", + "type": "uint256" }, { "indexed": false, - "name": "newComptroller", - "type": "address" - } - ], - "name": "NewComptroller", - "type": "event", - "signature": "0x7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d" - }, - { - "anonymous": false, - "inputs": [ + "internalType": "uint256", + "name": "multiplierPerBlock", + "type": "uint256" + }, { "indexed": false, - "name": "oldInterestRateModel", - "type": "address" + "internalType": "uint256", + "name": "jumpMultiplierPerBlock", + "type": "uint256" }, { "indexed": false, - "name": "newInterestRateModel", - "type": "address" + "internalType": "uint256", + "name": "kink", + "type": "uint256" } ], - "name": "NewMarketInterestRateModel", + "name": "NewInterestParams", "type": "event", - "signature": "0xedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f926" + "signature": "0x6960ab234c7ef4b0c9197100f5393cfcde7c453ac910a27bd2000aa1dd4c068d" }, { - "anonymous": false, - "inputs": [ + "constant": true, + "inputs": [], + "name": "baseRatePerBlock", + "outputs": [ { - "indexed": false, - "name": "oldReserveFactorMantissa", + "internalType": "uint256", + "name": "", "type": "uint256" - }, + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xf14039de" + }, + { + "constant": true, + "inputs": [], + "name": "blocksPerYear", + "outputs": [ { - "indexed": false, - "name": "newReserveFactorMantissa", + "internalType": "uint256", + "name": "", "type": "uint256" } ], - "name": "NewReserveFactor", - "type": "event", - "signature": "0xaaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f821460" + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xa385fb96" }, { - "anonymous": false, + "constant": true, "inputs": [ { - "indexed": false, - "name": "admin", - "type": "address" + "internalType": "uint256", + "name": "cash", + "type": "uint256" }, { - "indexed": false, - "name": "reduceAmount", + "internalType": "uint256", + "name": "borrows", "type": "uint256" }, { - "indexed": false, - "name": "newTotalReserves", + "internalType": "uint256", + "name": "reserves", "type": "uint256" } ], - "name": "ReservesReduced", - "type": "event", - "signature": "0x3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e" + "name": "getBorrowRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x15f24053" }, { - "anonymous": false, + "constant": true, "inputs": [ { - "indexed": false, - "name": "error", + "internalType": "uint256", + "name": "cash", "type": "uint256" }, { - "indexed": false, - "name": "info", + "internalType": "uint256", + "name": "borrows", "type": "uint256" }, { - "indexed": false, - "name": "detail", + "internalType": "uint256", + "name": "reserves", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveFactorMantissa", "type": "uint256" } ], - "name": "Failure", - "type": "event", - "signature": "0x45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0" + "name": "getSupplyRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xb8168816" }, { - "anonymous": false, - "inputs": [ + "constant": true, + "inputs": [], + "name": "isInterestRateModel", + "outputs": [ { - "indexed": true, - "name": "from", - "type": "address" - }, + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x2191f92a" + }, + { + "constant": true, + "inputs": [], + "name": "jumpMultiplierPerBlock", + "outputs": [ { - "indexed": true, - "name": "to", - "type": "address" - }, + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xb9f9850a" + }, + { + "constant": true, + "inputs": [], + "name": "kink", + "outputs": [ { - "indexed": false, - "name": "amount", + "internalType": "uint256", + "name": "", "type": "uint256" } ], - "name": "Transfer", - "type": "event", - "signature": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef" + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xfd2da339" }, { - "anonymous": false, + "constant": true, + "inputs": [], + "name": "multiplierPerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x8726bb89" + }, + { + "constant": true, "inputs": [ { - "indexed": true, - "name": "owner", - "type": "address" + "internalType": "uint256", + "name": "cash", + "type": "uint256" }, { - "indexed": true, - "name": "spender", - "type": "address" + "internalType": "uint256", + "name": "borrows", + "type": "uint256" }, { - "indexed": false, - "name": "amount", + "internalType": "uint256", + "name": "reserves", "type": "uint256" } ], - "name": "Approval", - "type": "event", - "signature": "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925" + "name": "utilizationRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function", + "signature": "0x6e71e2d8" } ], "ComptrollerG2": [ diff --git a/networks/mainnet.json b/networks/mainnet.json index 6e8f3f7e7..c18865f06 100644 --- a/networks/mainnet.json +++ b/networks/mainnet.json @@ -3,8 +3,9 @@ "ZRX": "0xE41d2489571d322189246DaFA5ebDe1F4699F498", "cUSDC": "0x39AA39c021dfbaE8faC545936693aC917d5E7563", "PriceOracle": "0x02557a5e05defeffd4cae6d83ea3d173b272c904", - "PriceOracleProxy": "0xdA17fbEdA95222f331Cb1D252401F4b44F49f7A0", + "PriceOracleProxy": "0xDDc46a3B076aec7ab3Fc37420A8eDd2959764Ec4", "Maximillion": "0xf859A1AD94BcF445A406B892eF0d3082f4174088", + "Base200bps_Slope2000bps_Jump20000bps_Kink90": "0x6bc8fE27D0c7207733656595e73c0D5Cf7AfaE36", "GovernorAlpha": "0xc0dA01a04C3f3E0be433606045bB7017A7323E38", "cDAI": "0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643", "CompoundLens": "0x1Af3De636BB341165F6C4E6aD17A1C09154c8670", @@ -13,23 +14,25 @@ "Poster": "0x3c6809319201b978d821190ba03fa19a3523bd96", "Unitroller": "0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B", "cDaiDelegate": "0xbB8bE4772fAA655C255309afc3c5207aA7b896Fd", + "USDT": "0xdAC17F958D2ee523a2206206994597C13D831ec7", "Comptroller": "0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B", "Comp": "0xc00e94Cb662C3520282E6f5717214004A7f26888", + "cUSDT": "0xf650C3d88D12dB855b8bf7D11Be6C55A4e07dCC9", "cBAT": "0x6C8c6b02E7b2BE14d4fA6022Dfd6d75921D90E4E", "Base500bps_Slope1500bps": "0xd928c8ead620bb316d2cefe3caf81dc2dec6ff63", "DSR_Kink_9000bps_Jump_12000bps_AssumedRF_500bps": "0xec163986cC9a6593D6AdDcBFf5509430D348030F", "Base0bps_Slope2000bps": "0xc64C4cBA055eFA614CE01F4BAD8A9F519C4f8FaB", "BAT": "0x0D8775F648430679A709E98d2b0Cb6250d2887EF", - "cErc20Delegate": "0x99ee778B9A6205657DD03B2B91415C8646d521ec", + "cUsdtDelegate": "0x976aa93ca5Aaa569109f4267589c619a097f001D", "Base200bps_Slope1000bps": "0x0c3f8df27e1a00b47653fde878d68d35f00714c0", "cETH": "0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5", "Base500bps_Slope1200bps": "0xa1046abfc2598F48C44Fb320d281d3F3c0733c9a", - "Base500bps_Slope1500bps": "0xd928c8ead620bb316d2cefe3caf81dc2dec6ff63", "cSAI": "0xF5DCe57282A584D2746FaF1593d3121Fcac444dC", "Timelock": "0x6d903f6003cca6255D85CcA4D3B5E5146dC33925", "Base200bps_Slope3000bps": "0xBAE04CbF96391086dC643e842b517734E214D698", "Comptroller_2_6": "0x97BD4Cc841FC999194174cd1803C543247a014fe", "cREP": "0x158079Ee67Fce2f58472A96584A73C7Ab9AC95c1", + "Base200bps_Slope2000bps_Jump8000bps_Kink90": "0x40C0C2c565335fa9C4235aC8E1CbFE2c97BAC13A", "ComptrollerG2": "0xf592eF673057a451c49c9433E278c5d59b56132c", "WBTC": "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", "Base200bps_Slope222bps_Kink90_Jump40": "0x5562024784cc914069d67D89a28e3201bF7b57E7", @@ -42,8 +45,9 @@ "Blocks": { "cUSDC": 7710760, "PriceOracle": 6747538, - "PriceOracleProxy": 9788084, + "PriceOracleProxy": 9879366, "Maximillion": 7710775, + "Base200bps_Slope2000bps_Jump20000bps_Kink90": 9879332, "GovernorAlpha": 9601447, "cDAI": 8983575, "CompoundLens": 9833393, @@ -51,10 +55,11 @@ "Unitroller": 7710671, "cDaiDelegate": 9122579, "Comp": 9601359, + "cUSDT": 9879363, "cBAT": 7710735, "DSR_Kink_9000bps_Jump_12000bps_AssumedRF_500bps": 9122577, "Base0bps_Slope2000bps": 7710727, - "cErc20Delegate": 8983559, + "cUsdtDelegate": 9879348, "Base200bps_Slope1000bps": 9321474, "cETH": 7710758, "Base500bps_Slope1200bps": 7710726, @@ -63,6 +68,7 @@ "Base200bps_Slope3000bps": 7710728, "Comptroller_2_6": 9652268, "cREP": 7710755, + "Base200bps_Slope2000bps_Jump8000bps_Kink90": 9847407, "ComptrollerG2": 8722898, "Base200bps_Slope222bps_Kink90_Jump40": 8983555, "cZRX": 7710733, @@ -74,7 +80,8 @@ "cUSDC": "0x39AA39c021dfbaE8faC545936693aC917d5E7563", "cSAI": "0xF5DCe57282A584D2746FaF1593d3121Fcac444dC", "cDAI": "0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643", - "address": "0xdA17fbEdA95222f331Cb1D252401F4b44F49f7A0" + "cUSDT": "0xf650C3d88D12dB855b8bf7D11Be6C55A4e07dCC9", + "address": "0xDDc46a3B076aec7ab3Fc37420A8eDd2959764Ec4" }, "Maximillion": { "description": "Maximillion", @@ -120,20 +127,6 @@ "address": "0xc0dA01a04C3f3E0be433606045bB7017A7323E38" } }, - "Comp": { - "contract": "Comp", - "symbol": "COMP", - "name": "Compound Governance Token", - "decimals": 18, - "address": "0xc00e94Cb662C3520282E6f5717214004A7f26888" - }, - "Governor": { - "GovernorAlpha": { - "name": "GovernorAlpha", - "contract": "GovernorAlpha", - "address": "0xc0dA01a04C3f3E0be433606045bB7017A7323E38" - } - }, "Timelock": { "address": "0x6d903f6003cca6255D85CcA4D3B5E5146dC33925", "contract": "Timelock", @@ -141,8 +134,9 @@ }, "Constructors": { "cUSDC": "0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000003d9819210a31b4961b30ef54be2aed79b9c9cd3b000000000000000000000000c64c4cba055efa614ce01f4bad8a9f519c4f8fab0000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000011436f6d706f756e642055534420436f696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000056355534443000000000000000000000000000000000000000000000000000000", - "PriceOracleProxy": "0x0000000000000000000000008b8592e9570e96166336603a1b4bd1e8db20fa2000000000000000000000000002557a5e05defeffd4cae6d83ea3d173b272c9040000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed500000000000000000000000039aa39c021dfbae8fac545936693ac917d5e7563000000000000000000000000f5dce57282a584d2746faf1593d3121fcac444dc0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e3643", + "PriceOracleProxy": "0x0000000000000000000000008b8592e9570e96166336603a1b4bd1e8db20fa2000000000000000000000000002557a5e05defeffd4cae6d83ea3d173b272c9040000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed500000000000000000000000039aa39c021dfbae8fac545936693ac917d5e7563000000000000000000000000f5dce57282a584d2746faf1593d3121fcac444dc0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e3643000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc9", "Maximillion": "0x0000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed5", + "Base200bps_Slope2000bps_Jump20000bps_Kink90": "0x00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000002c68af0bb1400000000000000000000000000000000000000000000000000001bc16d674ec800000000000000000000000000000000000000000000000000000c7d713b49da0000", "GovernorAlpha": "0x0000000000000000000000006d903f6003cca6255d85cca4d3b5e5146dc33925000000000000000000000000c00e94cb662c3520282e6f5717214004a7f268880000000000000000000000008b8592e9570e96166336603a1b4bd1e8db20fa20", "cDAI": "0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000003d9819210a31b4961b30ef54be2aed79b9c9cd3b0000000000000000000000005562024784cc914069d67d89a28e3201bf7b57e7000000000000000000000000000000000000000000a56fa5b99019a5c80000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000080000000000000000000000006d903f6003cca6255d85cca4d3b5e5146dc3392500000000000000000000000099ee778b9a6205657dd03b2b91415c8646d521ec00000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000c436f6d706f756e642044616900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004634441490000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", "CompoundLens": "0x", @@ -150,10 +144,11 @@ "Unitroller": "0x", "cDaiDelegate": "0x", "Comp": "0x0000000000000000000000001449e0687810bddd356ae6dd87789244a46d9adb", + "cUSDT": "0x000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000003d9819210a31b4961b30ef54be2aed79b9c9cd3b0000000000000000000000006bc8fe27d0c7207733656595e73c0d5cf7afae360000000000000000000000000000000000000000000000000000b5e620f480000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000080000000000000000000000006d903f6003cca6255d85cca4d3b5e5146dc33925000000000000000000000000976aa93ca5aaa569109f4267589c619a097f001d00000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000d436f6d706f756e642055534454000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005635553445400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", "cBAT": "0x0000000000000000000000000d8775f648430679a709e98d2b0cb6250d2887ef0000000000000000000000003d9819210a31b4961b30ef54be2aed79b9c9cd3b000000000000000000000000bae04cbf96391086dc643e842b517734e214d698000000000000000000000000000000000000000000a56fa5b99019a5c800000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001e436f6d706f756e6420426173696320417474656e74696f6e20546f6b656e000000000000000000000000000000000000000000000000000000000000000000046342415400000000000000000000000000000000000000000000000000000000", "DSR_Kink_9000bps_Jump_12000bps_AssumedRF_500bps": "0x00000000000000000000000000000000000000000000000010a741a4627800000000000000000000000000000000000000000000000000000c7d713b49da0000000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf700000000000000000000000019c0976f590d67707e62397c87829d896dc0f1f1", "Base0bps_Slope2000bps": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c68af0bb140000", - "cErc20Delegate": "0x", + "cUsdtDelegate": "0x", "Base200bps_Slope1000bps": "0x00000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000016345785d8a0000", "cETH": "0x0000000000000000000000003d9819210a31b4961b30ef54be2aed79b9c9cd3b000000000000000000000000c64c4cba055efa614ce01f4bad8a9f519c4f8fab000000000000000000000000000000000000000000a56fa5b99019a5c800000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e436f6d706f756e6420457468657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046345544800000000000000000000000000000000000000000000000000000000", "Base500bps_Slope1200bps": "0x00000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000001aa535d3d0c0000", @@ -162,6 +157,7 @@ "Base200bps_Slope3000bps": "0x00000000000000000000000000000000000000000000000000470de4df8200000000000000000000000000000000000000000000000000000429d069189e0000", "Comptroller_2_6": "0x", "cREP": "0x0000000000000000000000001985365e9f78359a9b6ad760e32412f4a445e8620000000000000000000000003d9819210a31b4961b30ef54be2aed79b9c9cd3b000000000000000000000000bae04cbf96391086dc643e842b517734e214d698000000000000000000000000000000000000000000a56fa5b99019a5c800000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e436f6d706f756e6420417567757200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046352455000000000000000000000000000000000000000000000000000000000", + "Base200bps_Slope2000bps_Jump8000bps_Kink90": "0x00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000002c68af0bb1400000000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000022b1c8c1227a00000", "ComptrollerG2": "0x", "Base200bps_Slope222bps_Kink90_Jump40": "0x00000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000004ef2fe4dac8cc00000000000000000000000000000000000000000000000000c7d713b49da00000000000000000000000000000000000000000000000000000000000000000028", "cZRX": "0x000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f4980000000000000000000000003d9819210a31b4961b30ef54be2aed79b9c9cd3b000000000000000000000000bae04cbf96391086dc643e842b517734e214d698000000000000000000000000000000000000000000a56fa5b99019a5c800000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000b436f6d706f756e642030780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004635a525800000000000000000000000000000000000000000000000000000000", @@ -201,6 +197,14 @@ "contract": "ExistingToken", "address": "0x6B175474E89094C44Da98b954EedeAC495271d0F" }, + "USDT": { + "description": "ExistingTether", + "name": "USDT", + "symbol": "USDT", + "contract": "TetherInterface", + "decimals": 6, + "address": "0xdAC17F958D2ee523a2206206994597C13D831ec7" + }, "COMP": { "contract": "Comp", "symbol": "COMP", @@ -208,6 +212,16 @@ "decimals": 18, "address": "0xc00e94Cb662C3520282E6f5717214004A7f26888" }, + "cUSDT": { + "name": "Compound USDT", + "symbol": "cUSDT", + "decimals": 8, + "underlying": "0xdAC17F958D2ee523a2206206994597C13D831ec7", + "contract": "CErc20Delegator", + "initial_exchange_rate_mantissa": "200000000000000", + "admin": "0x6d903f6003cca6255D85CcA4D3B5E5146dC33925", + "address": "0xf650C3d88D12dB855b8bf7D11Be6C55A4e07dCC9" + }, "cBAT": { "name": "Compound Basic Attention Token", "symbol": "cBAT", @@ -297,8 +311,8 @@ } }, "CTokenDelegate": { - "cErc20Delegate": { - "address": "0x99ee778B9A6205657DD03B2B91415C8646d521ec", + "cUsdtDelegate": { + "address": "0x976aa93ca5Aaa569109f4267589c619a097f001D", "contract": "CErc20Delegate", "description": "Standard CErc20 Delegate" }, @@ -309,14 +323,34 @@ } }, "cTokens": { - "cZRX": { - "name": "Compound 0x", - "symbol": "cZRX", + "cUSDC": { + "name": "Compound USD Coin", + "symbol": "cUSDC", "decimals": 8, - "underlying": "0xE41d2489571d322189246DaFA5ebDe1F4699F498", + "underlying": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", "contract": "CErc20", + "initial_exchange_rate_mantissa": "200000000000000", + "address": "0x39AA39c021dfbaE8faC545936693aC917d5E7563" + }, + "cDAI": { + "name": "Compound Dai", + "symbol": "cDAI", + "decimals": 8, + "underlying": "0x6B175474E89094C44Da98b954EedeAC495271d0F", + "contract": "CErc20Delegator", "initial_exchange_rate_mantissa": "200000000000000000000000000", - "address": "0xB3319f5D18Bc0D84dD1b4825Dcde5d5f7266d407" + "admin": "0x6d903f6003cca6255D85CcA4D3B5E5146dC33925", + "address": "0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643" + }, + "cUSDT": { + "name": "Compound USDT", + "symbol": "cUSDT", + "decimals": 8, + "underlying": "0xdAC17F958D2ee523a2206206994597C13D831ec7", + "contract": "CErc20Delegator", + "initial_exchange_rate_mantissa": "200000000000000", + "admin": "0x6d903f6003cca6255D85CcA4D3B5E5146dC33925", + "address": "0xf650C3d88D12dB855b8bf7D11Be6C55A4e07dCC9" }, "cBAT": { "name": "Compound Basic Attention Token", @@ -327,6 +361,15 @@ "initial_exchange_rate_mantissa": "200000000000000000000000000", "address": "0x6C8c6b02E7b2BE14d4fA6022Dfd6d75921D90E4E" }, + "cETH": { + "name": "Compound Ether", + "symbol": "cETH", + "decimals": 8, + "underlying": "", + "contract": "CEther", + "initial_exchange_rate_mantissa": "200000000000000000000000000", + "address": "0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5" + }, "cSAI": { "name": "Compound Sai", "symbol": "cSAI", @@ -345,23 +388,14 @@ "initial_exchange_rate_mantissa": "200000000000000000000000000", "address": "0x158079Ee67Fce2f58472A96584A73C7Ab9AC95c1" }, - "cETH": { - "name": "Compound Ether", - "symbol": "cETH", - "decimals": 8, - "underlying": "", - "contract": "CEther", - "initial_exchange_rate_mantissa": "200000000000000000000000000", - "address": "0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5" - }, - "cUSDC": { - "name": "Compound USD Coin", - "symbol": "cUSDC", + "cZRX": { + "name": "Compound 0x", + "symbol": "cZRX", "decimals": 8, - "underlying": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + "underlying": "0xE41d2489571d322189246DaFA5ebDe1F4699F498", "contract": "CErc20", - "initial_exchange_rate_mantissa": "200000000000000", - "address": "0x39AA39c021dfbaE8faC545936693aC917d5E7563" + "initial_exchange_rate_mantissa": "200000000000000000000000000", + "address": "0xB3319f5D18Bc0D84dD1b4825Dcde5d5f7266d407" }, "cWBTC": { "name": "Compound Wrapped BTC", @@ -371,26 +405,18 @@ "contract": "CErc20", "initial_exchange_rate_mantissa": "20000000000000000", "address": "0xC11b1268C1A384e55C48c2391d8d480264A3A7F4" - }, - "cDAI": { - "name": "Compound Dai", - "symbol": "cDAI", - "decimals": 8, - "underlying": "0x6B175474E89094C44Da98b954EedeAC495271d0F", - "contract": "CErc20Delegator", - "initial_exchange_rate_mantissa": "200000000000000000000000000", - "admin": "0x6d903f6003cca6255D85CcA4D3B5E5146dC33925", - "address": "0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643" } }, "InterestRateModel": { - "Base500bps_Slope1200bps": { - "name": "Base500bps_Slope1200bps", - "contract": "WhitePaperInterestRateModel", - "description": "WhitePaper baseRate=50000000000000000 multiplier=120000000000000000", - "base": "50000000000000000", - "slope": "120000000000000000", - "address": "0xa1046abfc2598F48C44Fb320d281d3F3c0733c9a" + "Base200bps_Slope2000bps_Jump20000bps_Kink90": { + "name": "Base200bps_Slope2000bps_Jump20000bps_Kink90", + "contract": "JumpRateModel", + "description": "JumpRateModel baseRate=20000000000000000 multiplier=200000000000000000 jump=2000000000000000000 kink=900000000000000000", + "base": "20000000000000000", + "slope": "200000000000000000", + "jump": "2000000000000000000", + "kink": "900000000000000000", + "address": "0x6bc8fE27D0c7207733656595e73c0D5Cf7AfaE36" }, "Base500bps_Slope1500bps": { "name": "Base500bps_Slope1500bps", @@ -400,6 +426,16 @@ "slope": "150000000000000000", "address": "0xd928c8ead620bb316d2cefe3caf81dc2dec6ff63" }, + "DSR_Kink_9000bps_Jump_12000bps_AssumedRF_500bps": { + "name": "DSR_Kink_9000bps_Jump_12000bps_AssumedRF_500bps", + "contract": "DAIInterestRateModel", + "description": "DAIInterestRateModel jump=1200000000000000000 kink=900000000000000000 pot=0x197e90f9fad81970ba7976f33cbd77088e5d7cf7 jug=0x19c0976f590d67707e62397c87829d896dc0f1f1", + "jump": "1200000000000000000", + "kink": "900000000000000000", + "pot": "0x197e90f9fad81970ba7976f33cbd77088e5d7cf7", + "jug": "0x19c0976f590d67707e62397c87829d896dc0f1f1", + "address": "0xec163986cC9a6593D6AdDcBFf5509430D348030F" + }, "Base0bps_Slope2000bps": { "name": "Base0bps_Slope2000bps", "contract": "WhitePaperInterestRateModel", @@ -416,13 +452,13 @@ "slope": "100000000000000000", "address": "0x0c3f8df27e1a00b47653fde878d68d35f00714c0" }, - "Base500bps_Slope1500bps": { - "name": "Base500bps_Slope1500bps", - "contract": "WhitePaperInterestRateModel", - "description": "WhitePaper baseRate=50000000000000000 multiplier=150000000000000000", - "base": "50000000000000000", - "slope": "150000000000000000", - "address": "0xd928c8ead620bb316d2cefe3caf81dc2dec6ff63" + "Base500bps_Slope1200bps": { + "name": "Base500bps_Slope1200bps", + "contract": "WhitePaperInterestRateModel", + "description": "WhitePaper baseRate=50000000000000000 multiplier=120000000000000000", + "base": "50000000000000000", + "slope": "120000000000000000", + "address": "0xa1046abfc2598F48C44Fb320d281d3F3c0733c9a" }, "Base200bps_Slope3000bps": { "name": "Base200bps_Slope3000bps", @@ -432,6 +468,16 @@ "slope": "300000000000000000", "address": "0xBAE04CbF96391086dC643e842b517734E214D698" }, + "Base200bps_Slope2000bps_Jump8000bps_Kink90": { + "name": "Base200bps_Slope2000bps_Jump8000bps_Kink90", + "contract": "JumpRateModel", + "description": "JumpRateModel baseRate=20000000000000000 multiplier=200000000000000000 jump=800000000000000000 kink=40000000000000000000", + "base": "20000000000000000", + "slope": "200000000000000000", + "jump": "800000000000000000", + "kink": "40000000000000000000", + "address": "0x40C0C2c565335fa9C4235aC8E1CbFE2c97BAC13A" + }, "Base200bps_Slope222bps_Kink90_Jump40": { "name": "Base200bps_Slope222bps_Kink90_Jump40", "contract": "JumpRateModel", @@ -441,16 +487,6 @@ "kink": "900000000000000000", "jump": "40", "address": "0x5562024784cc914069d67D89a28e3201bF7b57E7" - }, - "DSR_Kink_9000bps_Jump_12000bps_AssumedRF_500bps": { - "name": "DSR_Kink_9000bps_Jump_12000bps_AssumedRF_500bps", - "contract": "DAIInterestRateModel", - "description": "DAIInterestRateModel jump=1200000000000000000 kink=900000000000000000 pot=0x197e90f9fad81970ba7976f33cbd77088e5d7cf7 jug=0x19c0976f590d67707e62397c87829d896dc0f1f1", - "jump": "1200000000000000000", - "kink": "900000000000000000", - "pot": "0x197e90f9fad81970ba7976f33cbd77088e5d7cf7", - "jug": "0x19c0976f590d67707e62397c87829d896dc0f1f1", - "address": "0xec163986cC9a6593D6AdDcBFf5509430D348030F" } } } \ No newline at end of file diff --git a/networks/ropsten-abi.json b/networks/ropsten-abi.json index b0fa2f0f6..fd7e2882f 100644 --- a/networks/ropsten-abi.json +++ b/networks/ropsten-abi.json @@ -3489,7 +3489,7 @@ "inputs": [ { "internalType": "address", - "name": "comptroller_", + "name": "guardian_", "type": "address" }, { @@ -3516,6 +3516,11 @@ "internalType": "address", "name": "cDaiAddress_", "type": "address" + }, + { + "internalType": "address", + "name": "cUsdtAddress_", + "type": "address" } ], "payable": false, @@ -3590,10 +3595,10 @@ { "constant": true, "inputs": [], - "name": "comptroller", + "name": "cUsdtAddress", "outputs": [ { - "internalType": "contract Comptroller", + "internalType": "address", "name": "", "type": "address" } @@ -3601,7 +3606,23 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x5fe3b567" + "signature": "0x1a3cb2e8" + }, + { + "constant": true, + "inputs": [], + "name": "daiOracleKey", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xe5ee0f6e" }, { "constant": true, @@ -3625,6 +3646,22 @@ "type": "function", "signature": "0xfc57d4df" }, + { + "constant": true, + "inputs": [], + "name": "guardian", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x452a9320" + }, { "constant": true, "inputs": [], @@ -3644,7 +3681,39 @@ { "constant": true, "inputs": [], - "name": "makerUsdOracleKey", + "name": "saiPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xa86b1944" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "name": "setSaiPrice", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xf9c99e9c" + }, + { + "constant": true, + "inputs": [], + "name": "usdcOracleKey", "outputs": [ { "internalType": "address", @@ -3655,7 +3724,7 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0xbc8a4ef4" + "signature": "0x3e76f255" }, { "constant": true, @@ -3737,23 +3806,28 @@ "signature": "constructor" } ], - "GovernorAlpha": [ + "Base200bps_Slope2000bps_Jump20000bps_Kink90": [ { "inputs": [ { - "internalType": "address", - "name": "timelock_", - "type": "address" + "internalType": "uint256", + "name": "baseRatePerYear", + "type": "uint256" }, { - "internalType": "address", - "name": "comp_", - "type": "address" + "internalType": "uint256", + "name": "multiplierPerYear", + "type": "uint256" }, { - "internalType": "address", - "name": "guardian_", - "type": "address" + "internalType": "uint256", + "name": "jumpMultiplierPerYear", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kink_", + "type": "uint256" } ], "payable": false, @@ -3767,167 +3841,421 @@ { "indexed": false, "internalType": "uint256", - "name": "id", + "name": "baseRatePerBlock", "type": "uint256" - } - ], - "name": "ProposalCanceled", - "type": "event", - "signature": "0x789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c" - }, - { - "anonymous": false, - "inputs": [ + }, { "indexed": false, "internalType": "uint256", - "name": "id", + "name": "multiplierPerBlock", "type": "uint256" }, { "indexed": false, - "internalType": "address", - "name": "proposer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "string[]", - "name": "signatures", - "type": "string[]" - }, - { - "indexed": false, - "internalType": "bytes[]", - "name": "calldatas", - "type": "bytes[]" + "internalType": "uint256", + "name": "jumpMultiplierPerBlock", + "type": "uint256" }, { "indexed": false, - "internalType": "string", - "name": "description", - "type": "string" + "internalType": "uint256", + "name": "kink", + "type": "uint256" } ], - "name": "ProposalCreated", + "name": "NewInterestParams", "type": "event", - "signature": "0xbaab6dcd2ae57433cc1372e25bc5139c3bd664075695546fde8821591a226e38" + "signature": "0x6960ab234c7ef4b0c9197100f5393cfcde7c453ac910a27bd2000aa1dd4c068d" }, { - "anonymous": false, - "inputs": [ + "constant": true, + "inputs": [], + "name": "baseRatePerBlock", + "outputs": [ { - "indexed": false, "internalType": "uint256", - "name": "id", + "name": "", "type": "uint256" } ], - "name": "ProposalExecuted", - "type": "event", - "signature": "0x712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f" + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xf14039de" }, { - "anonymous": false, + "constant": true, + "inputs": [], + "name": "blocksPerYear", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xa385fb96" + }, + { + "constant": true, "inputs": [ { - "indexed": false, "internalType": "uint256", - "name": "id", + "name": "cash", "type": "uint256" }, { - "indexed": false, "internalType": "uint256", - "name": "eta", + "name": "borrows", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserves", "type": "uint256" } ], - "name": "ProposalQueued", - "type": "event", - "signature": "0x9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892" + "name": "getBorrowRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x15f24053" }, { - "anonymous": false, + "constant": true, "inputs": [ { - "indexed": false, - "internalType": "address", - "name": "voter", - "type": "address" + "internalType": "uint256", + "name": "cash", + "type": "uint256" }, { - "indexed": false, "internalType": "uint256", - "name": "proposalId", + "name": "borrows", "type": "uint256" }, { - "indexed": false, - "internalType": "bool", - "name": "support", - "type": "bool" + "internalType": "uint256", + "name": "reserves", + "type": "uint256" }, { - "indexed": false, "internalType": "uint256", - "name": "votes", + "name": "reserveFactorMantissa", "type": "uint256" } ], - "name": "VoteCast", - "type": "event", - "signature": "0x877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c46" + "name": "getSupplyRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xb8168816" }, { "constant": true, "inputs": [], - "name": "BALLOT_TYPEHASH", + "name": "isInterestRateModel", "outputs": [ { - "internalType": "bytes32", + "internalType": "bool", "name": "", - "type": "bytes32" + "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0xdeaaa7cc" + "signature": "0x2191f92a" }, { "constant": true, "inputs": [], - "name": "DOMAIN_TYPEHASH", + "name": "jumpMultiplierPerBlock", "outputs": [ { - "internalType": "bytes32", + "internalType": "uint256", "name": "", - "type": "bytes32" + "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x20606b70" + "signature": "0xb9f9850a" }, { - "constant": false, + "constant": true, "inputs": [], - "name": "__abdicate", - "outputs": [], + "name": "kink", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xfd2da339" + }, + { + "constant": true, + "inputs": [], + "name": "multiplierPerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x8726bb89" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "cash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrows", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserves", + "type": "uint256" + } + ], + "name": "utilizationRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function", + "signature": "0x6e71e2d8" + } + ], + "GovernorAlpha": [ + { + "inputs": [ + { + "internalType": "address", + "name": "timelock_", + "type": "address" + }, + { + "internalType": "address", + "name": "comp_", + "type": "address" + }, + { + "internalType": "address", + "name": "guardian_", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor", + "signature": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "ProposalCanceled", + "type": "event", + "signature": "0x789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "proposer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "string[]", + "name": "signatures", + "type": "string[]" + }, + { + "indexed": false, + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + }, + { + "indexed": false, + "internalType": "string", + "name": "description", + "type": "string" + } + ], + "name": "ProposalCreated", + "type": "event", + "signature": "0xbaab6dcd2ae57433cc1372e25bc5139c3bd664075695546fde8821591a226e38" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "ProposalExecuted", + "type": "event", + "signature": "0x712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "eta", + "type": "uint256" + } + ], + "name": "ProposalQueued", + "type": "event", + "signature": "0x9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "voter", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "support", + "type": "bool" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "votes", + "type": "uint256" + } + ], + "name": "VoteCast", + "type": "event", + "signature": "0x877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c46" + }, + { + "constant": true, + "inputs": [], + "name": "BALLOT_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xdeaaa7cc" + }, + { + "constant": true, + "inputs": [], + "name": "DOMAIN_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x20606b70" + }, + { + "constant": false, + "inputs": [], + "name": "__abdicate", + "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", @@ -8671,265 +8999,281 @@ "signature": "0xdcfbc0c7" } ], - "Comptroller": [ - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor", - "signature": "constructor" - }, + "USDT": [ { "anonymous": false, "inputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "error", - "type": "uint256" + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" }, { - "indexed": false, - "internalType": "uint256", - "name": "info", - "type": "uint256" + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" }, { "indexed": false, "internalType": "uint256", - "name": "detail", + "name": "amount", "type": "uint256" } ], - "name": "Failure", + "name": "Approval", "type": "event", - "signature": "0x45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0" + "signature": "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925" }, { "anonymous": false, "inputs": [ { - "indexed": false, + "indexed": true, "internalType": "address", - "name": "oldAdmin", + "name": "from", "type": "address" }, { - "indexed": false, + "indexed": true, "internalType": "address", - "name": "newAdmin", + "name": "to", "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" } ], - "name": "NewAdmin", + "name": "Transfer", "type": "event", - "signature": "0xf9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc" + "signature": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef" }, { - "anonymous": false, + "constant": true, "inputs": [ { - "indexed": false, "internalType": "address", - "name": "oldImplementation", + "name": "owner", "type": "address" }, { - "indexed": false, "internalType": "address", - "name": "newImplementation", + "name": "spender", "type": "address" } ], - "name": "NewImplementation", - "type": "event", - "signature": "0xd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a" + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "remaining", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xdd62ed3e" }, { - "anonymous": false, + "constant": false, "inputs": [ { - "indexed": false, "internalType": "address", - "name": "oldPendingAdmin", + "name": "spender", "type": "address" }, { - "indexed": false, - "internalType": "address", - "name": "newPendingAdmin", - "type": "address" + "internalType": "uint256", + "name": "amount", + "type": "uint256" } ], - "name": "NewPendingAdmin", - "type": "event", - "signature": "0xca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9" + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x095ea7b3" }, { - "anonymous": false, + "constant": true, "inputs": [ { - "indexed": false, - "internalType": "address", - "name": "oldPendingImplementation", - "type": "address" - }, - { - "indexed": false, "internalType": "address", - "name": "newPendingImplementation", + "name": "owner", "type": "address" } ], - "name": "NewPendingImplementation", - "type": "event", - "signature": "0xe945ccee5d701fc83f9b8aa8ca94ea4219ec1fcbd4f4cab4f0ea57c5c3e1d815" - }, - { - "payable": true, - "stateMutability": "payable", - "type": "fallback" - }, - { - "constant": false, - "inputs": [], - "name": "_acceptAdmin", + "name": "balanceOf", "outputs": [ { "internalType": "uint256", - "name": "", + "name": "balance", "type": "uint256" } ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0xe9c714f2" + "signature": "0x70a08231" }, { - "constant": false, + "constant": true, "inputs": [], - "name": "_acceptImplementation", + "name": "decimals", "outputs": [ { - "internalType": "uint256", + "internalType": "uint8", "name": "", - "type": "uint256" + "type": "uint8" } ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0xc1e80334" + "signature": "0x313ce567" }, { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "newPendingAdmin", - "type": "address" - } - ], - "name": "_setPendingAdmin", + "constant": true, + "inputs": [], + "name": "name", "outputs": [ { - "internalType": "uint256", + "internalType": "string", "name": "", - "type": "uint256" + "type": "string" } ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0xb71d1a0c" + "signature": "0x06fdde03" }, { "constant": false, "inputs": [ { - "internalType": "address", - "name": "newPendingImplementation", - "type": "address" - } - ], - "name": "_setPendingImplementation", - "outputs": [ + "internalType": "uint256", + "name": "newBasisPoints", + "type": "uint256" + }, { "internalType": "uint256", - "name": "", + "name": "newMaxFee", "type": "uint256" } ], + "name": "setParams", + "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xe992a041" + "signature": "0xc0324c77" }, { "constant": true, "inputs": [], - "name": "admin", + "name": "symbol", "outputs": [ { - "internalType": "address", + "internalType": "string", "name": "", - "type": "address" + "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0xf851a440" + "signature": "0x95d89b41" }, { "constant": true, "inputs": [], - "name": "comptrollerImplementation", + "name": "totalSupply", "outputs": [ { - "internalType": "address", + "internalType": "uint256", "name": "", - "type": "address" + "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0xbb82aa5e" + "signature": "0x18160ddd" }, { - "constant": true, - "inputs": [], - "name": "pendingAdmin", - "outputs": [ + "constant": false, + "inputs": [ { "internalType": "address", - "name": "", + "name": "dst", "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0x26782247" + "signature": "0xa9059cbb" }, { - "constant": true, - "inputs": [], - "name": "pendingComptrollerImplementation", - "outputs": [ + "constant": false, + "inputs": [ { "internalType": "address", - "name": "", + "name": "src", + "type": "address" + }, + { + "internalType": "address", + "name": "dst", "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0xdcfbc0c7" - }, + "signature": "0x23b872dd" + } + ], + "Comptroller": [ { "inputs": [], "payable": false, @@ -8968,207 +9312,106 @@ "inputs": [ { "indexed": false, - "internalType": "contract CToken", - "name": "cToken", + "internalType": "address", + "name": "oldAdmin", "type": "address" }, { "indexed": false, "internalType": "address", - "name": "account", + "name": "newAdmin", "type": "address" } ], - "name": "MarketEntered", + "name": "NewAdmin", "type": "event", - "signature": "0x3ab23ab0d51cccc0c3085aec51f99228625aa1a922b3a8ca89a26b0f2027a1a5" + "signature": "0xf9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc" }, { "anonymous": false, "inputs": [ { "indexed": false, - "internalType": "contract CToken", - "name": "cToken", + "internalType": "address", + "name": "oldImplementation", "type": "address" }, { "indexed": false, "internalType": "address", - "name": "account", + "name": "newImplementation", "type": "address" } ], - "name": "MarketExited", + "name": "NewImplementation", "type": "event", - "signature": "0xe699a64c18b07ac5b7301aa273f36a2287239eb9501d81950672794afba29a0d" + "signature": "0xd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a" }, { "anonymous": false, "inputs": [ { "indexed": false, - "internalType": "contract CToken", - "name": "cToken", + "internalType": "address", + "name": "oldPendingAdmin", "type": "address" - } - ], - "name": "MarketListed", - "type": "event", - "signature": "0xcf583bb0c569eb967f806b11601c4cb93c10310485c67add5f8362c2f212321f" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldCloseFactorMantissa", - "type": "uint256" }, { "indexed": false, - "internalType": "uint256", - "name": "newCloseFactorMantissa", - "type": "uint256" - } - ], - "name": "NewCloseFactor", - "type": "event", - "signature": "0x3b9670cf975d26958e754b57098eaa2ac914d8d2a31b83257997b9f346110fd9" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "contract CToken", - "name": "cToken", + "internalType": "address", + "name": "newPendingAdmin", "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldCollateralFactorMantissa", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newCollateralFactorMantissa", - "type": "uint256" - } - ], - "name": "NewCollateralFactor", - "type": "event", - "signature": "0x70483e6592cd5182d45ac970e05bc62cdcc90e9d8ef2c2dbe686cf383bcd7fc5" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldLiquidationIncentiveMantissa", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newLiquidationIncentiveMantissa", - "type": "uint256" - } - ], - "name": "NewLiquidationIncentive", - "type": "event", - "signature": "0xaeba5a6c40a8ac138134bff1aaa65debf25971188a58804bad717f82f0ec1316" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldMaxAssets", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newMaxAssets", - "type": "uint256" } ], - "name": "NewMaxAssets", + "name": "NewPendingAdmin", "type": "event", - "signature": "0x7093cf1eb653f749c3ff531d6df7f92764536a7fa0d13530cd26e070780c32ea" + "signature": "0xca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9" }, { "anonymous": false, "inputs": [ { "indexed": false, - "internalType": "contract PriceOracle", - "name": "oldPriceOracle", + "internalType": "address", + "name": "oldPendingImplementation", "type": "address" }, { "indexed": false, - "internalType": "contract PriceOracle", - "name": "newPriceOracle", + "internalType": "address", + "name": "newPendingImplementation", "type": "address" } ], - "name": "NewPriceOracle", + "name": "NewPendingImplementation", "type": "event", - "signature": "0xd52b2b9b7e9ee655fcb95d2e5b9e0c9f69e7ef2b8e9d2d0ea78402d576d22e22" + "signature": "0xe945ccee5d701fc83f9b8aa8ca94ea4219ec1fcbd4f4cab4f0ea57c5c3e1d815" + }, + { + "payable": true, + "stateMutability": "payable", + "type": "fallback" }, { "constant": false, - "inputs": [ - { - "internalType": "contract Unitroller", - "name": "unitroller", - "type": "address" - }, - { - "internalType": "contract PriceOracle", - "name": "_oracle", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_closeFactorMantissa", - "type": "uint256" - }, + "inputs": [], + "name": "_acceptAdmin", + "outputs": [ { "internalType": "uint256", - "name": "_maxAssets", + "name": "", "type": "uint256" - }, - { - "internalType": "bool", - "name": "reinitializing", - "type": "bool" } ], - "name": "_become", - "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x32000e00" + "signature": "0xe9c714f2" }, { "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "newCloseFactorMantissa", - "type": "uint256" - } - ], - "name": "_setCloseFactor", + "inputs": [], + "name": "_acceptImplementation", "outputs": [ { "internalType": "uint256", @@ -9179,23 +9422,18 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x317b0b77" + "signature": "0xc1e80334" }, { "constant": false, "inputs": [ { - "internalType": "contract CToken", - "name": "cToken", + "internalType": "address", + "name": "newPendingAdmin", "type": "address" - }, - { - "internalType": "uint256", - "name": "newCollateralFactorMantissa", - "type": "uint256" } ], - "name": "_setCollateralFactor", + "name": "_setPendingAdmin", "outputs": [ { "internalType": "uint256", @@ -9206,18 +9444,18 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xe4028eee" + "signature": "0xb71d1a0c" }, { "constant": false, "inputs": [ { - "internalType": "uint256", - "name": "newLiquidationIncentiveMantissa", - "type": "uint256" + "internalType": "address", + "name": "newPendingImplementation", + "type": "address" } ], - "name": "_setLiquidationIncentive", + "name": "_setPendingImplementation", "outputs": [ { "internalType": "uint256", @@ -9228,266 +9466,311 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x4fd42e17" + "signature": "0xe992a041" }, { - "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "newMaxAssets", - "type": "uint256" - } - ], - "name": "_setMaxAssets", + "constant": true, + "inputs": [], + "name": "admin", "outputs": [ { - "internalType": "uint256", + "internalType": "address", "name": "", - "type": "uint256" + "type": "address" } ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0xd9226ced" + "signature": "0xf851a440" }, { - "constant": false, - "inputs": [ - { - "internalType": "contract PriceOracle", - "name": "newOracle", - "type": "address" - } - ], - "name": "_setPriceOracle", + "constant": true, + "inputs": [], + "name": "comptrollerImplementation", "outputs": [ { - "internalType": "uint256", + "internalType": "address", "name": "", - "type": "uint256" + "type": "address" } ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0x55ee1fe1" + "signature": "0xbb82aa5e" }, { - "constant": false, - "inputs": [ - { - "internalType": "contract CToken", - "name": "cToken", - "type": "address" - } - ], - "name": "_supportMarket", + "constant": true, + "inputs": [], + "name": "pendingAdmin", "outputs": [ { - "internalType": "uint256", + "internalType": "address", "name": "", - "type": "uint256" + "type": "address" } ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0xa76b3fda" + "signature": "0x26782247" }, { "constant": true, - "inputs": [ + "inputs": [], + "name": "pendingComptrollerImplementation", + "outputs": [ { "internalType": "address", "name": "", "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "accountAssets", - "outputs": [ - { - "internalType": "contract CToken", - "name": "", - "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0xdce15449" + "signature": "0xdcfbc0c7" }, { - "constant": true, "inputs": [], - "name": "admin", - "outputs": [ + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor", + "signature": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "error", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "info", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "detail", + "type": "uint256" + } + ], + "name": "Failure", + "type": "event", + "signature": "0x45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract CToken", + "name": "cToken", + "type": "address" + }, { + "indexed": false, "internalType": "address", - "name": "", + "name": "account", "type": "address" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0xf851a440" + "name": "MarketEntered", + "type": "event", + "signature": "0x3ab23ab0d51cccc0c3085aec51f99228625aa1a922b3a8ca89a26b0f2027a1a5" }, { - "constant": false, + "anonymous": false, "inputs": [ { - "internalType": "address", + "indexed": false, + "internalType": "contract CToken", "name": "cToken", "type": "address" }, { + "indexed": false, "internalType": "address", - "name": "borrower", + "name": "account", "type": "address" - }, + } + ], + "name": "MarketExited", + "type": "event", + "signature": "0xe699a64c18b07ac5b7301aa273f36a2287239eb9501d81950672794afba29a0d" + }, + { + "anonymous": false, + "inputs": [ { - "internalType": "uint256", - "name": "borrowAmount", - "type": "uint256" + "indexed": false, + "internalType": "contract CToken", + "name": "cToken", + "type": "address" } ], - "name": "borrowAllowed", - "outputs": [ + "name": "MarketListed", + "type": "event", + "signature": "0xcf583bb0c569eb967f806b11601c4cb93c10310485c67add5f8362c2f212321f" + }, + { + "anonymous": false, + "inputs": [ { + "indexed": false, "internalType": "uint256", - "name": "", + "name": "oldCloseFactorMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newCloseFactorMantissa", "type": "uint256" } ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0xda3d454c" + "name": "NewCloseFactor", + "type": "event", + "signature": "0x3b9670cf975d26958e754b57098eaa2ac914d8d2a31b83257997b9f346110fd9" }, { - "constant": false, + "anonymous": false, "inputs": [ { - "internalType": "address", + "indexed": false, + "internalType": "contract CToken", "name": "cToken", "type": "address" }, { - "internalType": "address", - "name": "borrower", - "type": "address" + "indexed": false, + "internalType": "uint256", + "name": "oldCollateralFactorMantissa", + "type": "uint256" }, { + "indexed": false, "internalType": "uint256", - "name": "borrowAmount", + "name": "newCollateralFactorMantissa", "type": "uint256" } ], - "name": "borrowVerify", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0x5c778605" + "name": "NewCollateralFactor", + "type": "event", + "signature": "0x70483e6592cd5182d45ac970e05bc62cdcc90e9d8ef2c2dbe686cf383bcd7fc5" }, { - "constant": true, + "anonymous": false, "inputs": [ { - "internalType": "address", - "name": "account", - "type": "address" + "indexed": false, + "internalType": "uint256", + "name": "oldLiquidationIncentiveMantissa", + "type": "uint256" }, { - "internalType": "contract CToken", - "name": "cToken", - "type": "address" - } - ], - "name": "checkMembership", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" + "indexed": false, + "internalType": "uint256", + "name": "newLiquidationIncentiveMantissa", + "type": "uint256" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0x929fe9a1" + "name": "NewLiquidationIncentive", + "type": "event", + "signature": "0xaeba5a6c40a8ac138134bff1aaa65debf25971188a58804bad717f82f0ec1316" }, { - "constant": true, - "inputs": [], - "name": "closeFactorMantissa", - "outputs": [ + "anonymous": false, + "inputs": [ { + "indexed": false, "internalType": "uint256", - "name": "", + "name": "oldMaxAssets", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxAssets", "type": "uint256" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0xe8755446" + "name": "NewMaxAssets", + "type": "event", + "signature": "0x7093cf1eb653f749c3ff531d6df7f92764536a7fa0d13530cd26e070780c32ea" }, { - "constant": true, - "inputs": [], - "name": "comptrollerImplementation", - "outputs": [ + "anonymous": false, + "inputs": [ { - "internalType": "address", - "name": "", + "indexed": false, + "internalType": "contract PriceOracle", + "name": "oldPriceOracle", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract PriceOracle", + "name": "newPriceOracle", "type": "address" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0xbb82aa5e" + "name": "NewPriceOracle", + "type": "event", + "signature": "0xd52b2b9b7e9ee655fcb95d2e5b9e0c9f69e7ef2b8e9d2d0ea78402d576d22e22" }, { "constant": false, "inputs": [ { - "internalType": "address[]", - "name": "cTokens", - "type": "address[]" - } - ], - "name": "enterMarkets", - "outputs": [ + "internalType": "contract Unitroller", + "name": "unitroller", + "type": "address" + }, { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" + "internalType": "contract PriceOracle", + "name": "_oracle", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_closeFactorMantissa", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_maxAssets", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "reinitializing", + "type": "bool" } ], + "name": "_become", + "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xc2998238" + "signature": "0x32000e00" }, { "constant": false, "inputs": [ { - "internalType": "address", - "name": "cTokenAddress", - "type": "address" + "internalType": "uint256", + "name": "newCloseFactorMantissa", + "type": "uint256" } ], - "name": "exitMarket", + "name": "_setCloseFactor", "outputs": [ { "internalType": "uint256", @@ -9498,108 +9781,45 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xede4edd0" + "signature": "0x317b0b77" }, { - "constant": true, + "constant": false, "inputs": [ { - "internalType": "address", - "name": "account", + "internalType": "contract CToken", + "name": "cToken", "type": "address" - } - ], - "name": "getAccountLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" }, { "internalType": "uint256", - "name": "", + "name": "newCollateralFactorMantissa", "type": "uint256" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0x5ec88c79" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "getAssetsIn", - "outputs": [ - { - "internalType": "contract CToken[]", - "name": "", - "type": "address[]" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0xabfceffc" - }, - { - "constant": true, - "inputs": [], - "name": "isComptroller", + "name": "_setCollateralFactor", "outputs": [ { - "internalType": "bool", + "internalType": "uint256", "name": "", - "type": "bool" + "type": "uint256" } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0x007e3dd2" + "signature": "0xe4028eee" }, { "constant": false, "inputs": [ - { - "internalType": "address", - "name": "cTokenBorrowed", - "type": "address" - }, - { - "internalType": "address", - "name": "cTokenCollateral", - "type": "address" - }, - { - "internalType": "address", - "name": "liquidator", - "type": "address" - }, - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, { "internalType": "uint256", - "name": "repayAmount", + "name": "newLiquidationIncentiveMantissa", "type": "uint256" } ], - "name": "liquidateBorrowAllowed", + "name": "_setLiquidationIncentive", "outputs": [ { "internalType": "uint256", @@ -9610,75 +9830,41 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x5fc7e71e" + "signature": "0x4fd42e17" }, { "constant": false, "inputs": [ - { - "internalType": "address", - "name": "cTokenBorrowed", - "type": "address" - }, - { - "internalType": "address", - "name": "cTokenCollateral", - "type": "address" - }, - { - "internalType": "address", - "name": "liquidator", - "type": "address" - }, - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, { "internalType": "uint256", - "name": "repayAmount", + "name": "newMaxAssets", "type": "uint256" - }, + } + ], + "name": "_setMaxAssets", + "outputs": [ { "internalType": "uint256", - "name": "seizeTokens", + "name": "", "type": "uint256" } ], - "name": "liquidateBorrowVerify", - "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x47ef3b3b" + "signature": "0xd9226ced" }, { - "constant": true, + "constant": false, "inputs": [ { - "internalType": "address", - "name": "cTokenBorrowed", - "type": "address" - }, - { - "internalType": "address", - "name": "cTokenCollateral", + "internalType": "contract PriceOracle", + "name": "newOracle", "type": "address" - }, - { - "internalType": "uint256", - "name": "repayAmount", - "type": "uint256" } ], - "name": "liquidateCalculateSeizeTokens", + "name": "_setPriceOracle", "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, { "internalType": "uint256", "name": "", @@ -9686,14 +9872,20 @@ } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0xc488847b" + "signature": "0x55ee1fe1" }, { - "constant": true, - "inputs": [], - "name": "liquidationIncentiveMantissa", + "constant": false, + "inputs": [ + { + "internalType": "contract CToken", + "name": "cToken", + "type": "address" + } + ], + "name": "_supportMarket", "outputs": [ { "internalType": "uint256", @@ -9702,9 +9894,9 @@ } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0x4ada90af" + "signature": "0xa76b3fda" }, { "constant": true, @@ -9713,41 +9905,41 @@ "internalType": "address", "name": "", "type": "address" - } - ], - "name": "markets", - "outputs": [ - { - "internalType": "bool", - "name": "isListed", - "type": "bool" }, { "internalType": "uint256", - "name": "collateralFactorMantissa", + "name": "", "type": "uint256" } ], + "name": "accountAssets", + "outputs": [ + { + "internalType": "contract CToken", + "name": "", + "type": "address" + } + ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x8e8f294b" + "signature": "0xdce15449" }, { "constant": true, "inputs": [], - "name": "maxAssets", + "name": "admin", "outputs": [ { - "internalType": "uint256", + "internalType": "address", "name": "", - "type": "uint256" + "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x94b2294b" + "signature": "0xf851a440" }, { "constant": false, @@ -9759,16 +9951,16 @@ }, { "internalType": "address", - "name": "minter", + "name": "borrower", "type": "address" }, { "internalType": "uint256", - "name": "mintAmount", + "name": "borrowAmount", "type": "uint256" } ], - "name": "mintAllowed", + "name": "borrowAllowed", "outputs": [ { "internalType": "uint256", @@ -9779,7 +9971,7 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x4ef4c3e1" + "signature": "0xda3d454c" }, { "constant": false, @@ -9791,63 +9983,69 @@ }, { "internalType": "address", - "name": "minter", + "name": "borrower", "type": "address" }, { "internalType": "uint256", - "name": "mintAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "mintTokens", + "name": "borrowAmount", "type": "uint256" } ], - "name": "mintVerify", + "name": "borrowVerify", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x41c728b9" + "signature": "0x5c778605" }, { "constant": true, - "inputs": [], - "name": "oracle", + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "contract CToken", + "name": "cToken", + "type": "address" + } + ], + "name": "checkMembership", "outputs": [ { - "internalType": "contract PriceOracle", + "internalType": "bool", "name": "", - "type": "address" + "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x7dc0d1d0" + "signature": "0x929fe9a1" }, { "constant": true, "inputs": [], - "name": "pendingAdmin", + "name": "closeFactorMantissa", "outputs": [ { - "internalType": "address", + "internalType": "uint256", "name": "", - "type": "address" + "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x26782247" + "signature": "0xe8755446" }, { "constant": true, "inputs": [], - "name": "pendingComptrollerImplementation", + "name": "comptrollerImplementation", "outputs": [ { "internalType": "address", @@ -9858,28 +10056,40 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0xdcfbc0c7" + "signature": "0xbb82aa5e" }, { "constant": false, "inputs": [ { - "internalType": "address", - "name": "cToken", - "type": "address" - }, + "internalType": "address[]", + "name": "cTokens", + "type": "address[]" + } + ], + "name": "enterMarkets", + "outputs": [ { - "internalType": "address", - "name": "redeemer", - "type": "address" - }, + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xc2998238" + }, + { + "constant": false, + "inputs": [ { - "internalType": "uint256", - "name": "redeemTokens", - "type": "uint256" + "internalType": "address", + "name": "cTokenAddress", + "type": "address" } ], - "name": "redeemAllowed", + "name": "exitMarket", "outputs": [ { "internalType": "uint256", @@ -9890,50 +10100,94 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xeabe7d91" + "signature": "0xede4edd0" }, { - "constant": false, + "constant": true, "inputs": [ { "internalType": "address", - "name": "cToken", + "name": "account", "type": "address" - }, + } + ], + "name": "getAccountLiquidity", + "outputs": [ { - "internalType": "address", - "name": "redeemer", - "type": "address" + "internalType": "uint256", + "name": "", + "type": "uint256" }, { "internalType": "uint256", - "name": "redeemAmount", + "name": "", "type": "uint256" }, { "internalType": "uint256", - "name": "redeemTokens", + "name": "", "type": "uint256" } ], - "name": "redeemVerify", - "outputs": [], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0x51dff989" + "signature": "0x5ec88c79" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getAssetsIn", + "outputs": [ + { + "internalType": "contract CToken[]", + "name": "", + "type": "address[]" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xabfceffc" + }, + { + "constant": true, + "inputs": [], + "name": "isComptroller", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x007e3dd2" }, { "constant": false, "inputs": [ { "internalType": "address", - "name": "cToken", + "name": "cTokenBorrowed", "type": "address" }, { "internalType": "address", - "name": "payer", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidator", "type": "address" }, { @@ -9947,7 +10201,7 @@ "type": "uint256" } ], - "name": "repayBorrowAllowed", + "name": "liquidateBorrowAllowed", "outputs": [ { "internalType": "uint256", @@ -9958,19 +10212,24 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x24008a62" + "signature": "0x5fc7e71e" }, { "constant": false, "inputs": [ { "internalType": "address", - "name": "cToken", + "name": "cTokenBorrowed", "type": "address" }, { "internalType": "address", - "name": "payer", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidator", "type": "address" }, { @@ -9985,25 +10244,20 @@ }, { "internalType": "uint256", - "name": "borrowerIndex", + "name": "seizeTokens", "type": "uint256" } ], - "name": "repayBorrowVerify", + "name": "liquidateBorrowVerify", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x1ededc91" + "signature": "0x47ef3b3b" }, { - "constant": false, + "constant": true, "inputs": [ - { - "internalType": "address", - "name": "cTokenCollateral", - "type": "address" - }, { "internalType": "address", "name": "cTokenBorrowed", @@ -10011,21 +10265,37 @@ }, { "internalType": "address", - "name": "liquidator", + "name": "cTokenCollateral", "type": "address" }, { - "internalType": "address", - "name": "borrower", - "type": "address" + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "name": "liquidateCalculateSeizeTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" }, { "internalType": "uint256", - "name": "seizeTokens", + "name": "", "type": "uint256" } ], - "name": "seizeAllowed", + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xc488847b" + }, + { + "constant": true, + "inputs": [], + "name": "liquidationIncentiveMantissa", "outputs": [ { "internalType": "uint256", @@ -10034,45 +10304,52 @@ } ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0xd02f7351" + "signature": "0x4ada90af" }, { - "constant": false, + "constant": true, "inputs": [ { "internalType": "address", - "name": "cTokenCollateral", - "type": "address" - }, - { - "internalType": "address", - "name": "cTokenBorrowed", + "name": "", "type": "address" - }, + } + ], + "name": "markets", + "outputs": [ { - "internalType": "address", - "name": "liquidator", - "type": "address" + "internalType": "bool", + "name": "isListed", + "type": "bool" }, { - "internalType": "address", - "name": "borrower", - "type": "address" - }, + "internalType": "uint256", + "name": "collateralFactorMantissa", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x8e8f294b" + }, + { + "constant": true, + "inputs": [], + "name": "maxAssets", + "outputs": [ { "internalType": "uint256", - "name": "seizeTokens", + "name": "", "type": "uint256" } ], - "name": "seizeVerify", - "outputs": [], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0x6d35bf91" + "signature": "0x94b2294b" }, { "constant": false, @@ -10084,21 +10361,16 @@ }, { "internalType": "address", - "name": "src", - "type": "address" - }, - { - "internalType": "address", - "name": "dst", + "name": "minter", "type": "address" }, { "internalType": "uint256", - "name": "transferTokens", + "name": "mintAmount", "type": "uint256" } ], - "name": "transferAllowed", + "name": "mintAllowed", "outputs": [ { "internalType": "uint256", @@ -10109,7 +10381,7 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xbdcdc258" + "signature": "0x4ef4c3e1" }, { "constant": false, @@ -10121,335 +10393,314 @@ }, { "internalType": "address", - "name": "src", + "name": "minter", "type": "address" }, { - "internalType": "address", - "name": "dst", - "type": "address" + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" }, { "internalType": "uint256", - "name": "transferTokens", + "name": "mintTokens", "type": "uint256" } ], - "name": "transferVerify", + "name": "mintVerify", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x6a56947e" + "signature": "0x41c728b9" }, { + "constant": true, "inputs": [], + "name": "oracle", + "outputs": [ + { + "internalType": "contract PriceOracle", + "name": "", + "type": "address" + } + ], "payable": false, - "stateMutability": "nonpayable", - "type": "constructor", - "signature": "constructor" + "stateMutability": "view", + "type": "function", + "signature": "0x7dc0d1d0" }, { - "anonymous": false, - "inputs": [ + "constant": true, + "inputs": [], + "name": "pendingAdmin", + "outputs": [ { - "indexed": false, - "internalType": "string", - "name": "action", - "type": "string" - }, - { - "indexed": false, - "internalType": "bool", - "name": "pauseState", - "type": "bool" + "internalType": "address", + "name": "", + "type": "address" } ], - "name": "ActionPaused", - "type": "event", - "signature": "0xef159d9a32b2472e32b098f954f3ce62d232939f1c207070b584df1814de2de0" + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x26782247" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "error", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "info", - "type": "uint256" - }, + "constant": true, + "inputs": [], + "name": "pendingComptrollerImplementation", + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "detail", - "type": "uint256" + "internalType": "address", + "name": "", + "type": "address" } ], - "name": "Failure", - "type": "event", - "signature": "0x45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0" + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xdcfbc0c7" }, { - "anonymous": false, + "constant": false, "inputs": [ { - "indexed": false, - "internalType": "contract CToken", + "internalType": "address", "name": "cToken", "type": "address" }, { - "indexed": false, "internalType": "address", - "name": "account", + "name": "redeemer", "type": "address" + }, + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" } ], - "name": "MarketEntered", - "type": "event", - "signature": "0x3ab23ab0d51cccc0c3085aec51f99228625aa1a922b3a8ca89a26b0f2027a1a5" + "name": "redeemAllowed", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xeabe7d91" }, { - "anonymous": false, + "constant": false, "inputs": [ { - "indexed": false, - "internalType": "contract CToken", + "internalType": "address", "name": "cToken", "type": "address" }, { - "indexed": false, "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "MarketExited", - "type": "event", - "signature": "0xe699a64c18b07ac5b7301aa273f36a2287239eb9501d81950672794afba29a0d" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "contract CToken", - "name": "cToken", + "name": "redeemer", "type": "address" - } - ], - "name": "MarketListed", - "type": "event", - "signature": "0xcf583bb0c569eb967f806b11601c4cb93c10310485c67add5f8362c2f212321f" - }, - { - "anonymous": false, - "inputs": [ + }, { - "indexed": false, "internalType": "uint256", - "name": "oldCloseFactorMantissa", + "name": "redeemAmount", "type": "uint256" }, { - "indexed": false, "internalType": "uint256", - "name": "newCloseFactorMantissa", + "name": "redeemTokens", "type": "uint256" } ], - "name": "NewCloseFactor", - "type": "event", - "signature": "0x3b9670cf975d26958e754b57098eaa2ac914d8d2a31b83257997b9f346110fd9" + "name": "redeemVerify", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x51dff989" }, { - "anonymous": false, + "constant": false, "inputs": [ { - "indexed": false, - "internalType": "contract CToken", + "internalType": "address", "name": "cToken", "type": "address" }, { - "indexed": false, - "internalType": "uint256", - "name": "oldCollateralFactorMantissa", - "type": "uint256" + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" }, { - "indexed": false, "internalType": "uint256", - "name": "newCollateralFactorMantissa", + "name": "repayAmount", "type": "uint256" } ], - "name": "NewCollateralFactor", - "type": "event", - "signature": "0x70483e6592cd5182d45ac970e05bc62cdcc90e9d8ef2c2dbe686cf383bcd7fc5" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldLiquidationIncentiveMantissa", - "type": "uint256" - }, + "name": "repayBorrowAllowed", + "outputs": [ { - "indexed": false, "internalType": "uint256", - "name": "newLiquidationIncentiveMantissa", + "name": "", "type": "uint256" } ], - "name": "NewLiquidationIncentive", - "type": "event", - "signature": "0xaeba5a6c40a8ac138134bff1aaa65debf25971188a58804bad717f82f0ec1316" + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x24008a62" }, { - "anonymous": false, + "constant": false, "inputs": [ { - "indexed": false, + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { "internalType": "uint256", - "name": "oldMaxAssets", + "name": "repayAmount", "type": "uint256" }, { - "indexed": false, "internalType": "uint256", - "name": "newMaxAssets", + "name": "borrowerIndex", "type": "uint256" } ], - "name": "NewMaxAssets", - "type": "event", - "signature": "0x7093cf1eb653f749c3ff531d6df7f92764536a7fa0d13530cd26e070780c32ea" + "name": "repayBorrowVerify", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x1ededc91" }, { - "anonymous": false, + "constant": false, "inputs": [ { - "indexed": false, "internalType": "address", - "name": "oldPauseGuardian", + "name": "cTokenCollateral", "type": "address" }, { - "indexed": false, "internalType": "address", - "name": "newPauseGuardian", + "name": "cTokenBorrowed", "type": "address" - } - ], - "name": "NewPauseGuardian", - "type": "event", - "signature": "0x0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e" - }, - { - "anonymous": false, - "inputs": [ + }, { - "indexed": false, - "internalType": "contract PriceOracle", - "name": "oldPriceOracle", + "internalType": "address", + "name": "liquidator", "type": "address" }, { - "indexed": false, - "internalType": "contract PriceOracle", - "name": "newPriceOracle", + "internalType": "address", + "name": "borrower", "type": "address" + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" } ], - "name": "NewPriceOracle", - "type": "event", - "signature": "0xd52b2b9b7e9ee655fcb95d2e5b9e0c9f69e7ef2b8e9d2d0ea78402d576d22e22" - }, - { - "constant": false, - "inputs": [ + "name": "seizeAllowed", + "outputs": [ { - "internalType": "contract Unitroller", - "name": "unitroller", - "type": "address" + "internalType": "uint256", + "name": "", + "type": "uint256" } ], - "name": "_become", - "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x1d504dc6" + "signature": "0xd02f7351" }, { "constant": false, "inputs": [ { - "internalType": "bool", - "name": "state", - "type": "bool" - } - ], - "name": "_setBorrowPaused", - "outputs": [ + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0x56133fc8" - }, - { - "constant": false, - "inputs": [ + "internalType": "address", + "name": "cTokenBorrowed", + "type": "address" + }, { - "internalType": "uint256", - "name": "newCloseFactorMantissa", - "type": "uint256" - } - ], - "name": "_setCloseFactor", - "outputs": [ + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, { "internalType": "uint256", - "name": "", + "name": "seizeTokens", "type": "uint256" } ], + "name": "seizeVerify", + "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x317b0b77" + "signature": "0x6d35bf91" }, { "constant": false, "inputs": [ { - "internalType": "contract CToken", + "internalType": "address", "name": "cToken", "type": "address" }, + { + "internalType": "address", + "name": "src", + "type": "address" + }, + { + "internalType": "address", + "name": "dst", + "type": "address" + }, { "internalType": "uint256", - "name": "newCollateralFactorMantissa", + "name": "transferTokens", "type": "uint256" } ], - "name": "_setCollateralFactor", + "name": "transferAllowed", "outputs": [ { "internalType": "uint256", @@ -10460,263 +10711,298 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xe4028eee" + "signature": "0xbdcdc258" }, { "constant": false, "inputs": [ { - "internalType": "uint256", - "name": "newLiquidationIncentiveMantissa", - "type": "uint256" - } - ], - "name": "_setLiquidationIncentive", - "outputs": [ + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "src", + "type": "address" + }, + { + "internalType": "address", + "name": "dst", + "type": "address" + }, { "internalType": "uint256", - "name": "", + "name": "transferTokens", "type": "uint256" } ], + "name": "transferVerify", + "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x4fd42e17" + "signature": "0x6a56947e" }, { - "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "newMaxAssets", - "type": "uint256" - } - ], - "name": "_setMaxAssets", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], + "inputs": [], "payable": false, "stateMutability": "nonpayable", - "type": "function", - "signature": "0xd9226ced" + "type": "constructor", + "signature": "constructor" }, { - "constant": false, + "anonymous": false, "inputs": [ { - "internalType": "bool", - "name": "state", - "type": "bool" - } - ], - "name": "_setMintPaused", - "outputs": [ + "indexed": false, + "internalType": "string", + "name": "action", + "type": "string" + }, { + "indexed": false, "internalType": "bool", - "name": "", + "name": "pauseState", "type": "bool" } ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0x9845f280" + "name": "ActionPaused", + "type": "event", + "signature": "0xef159d9a32b2472e32b098f954f3ce62d232939f1c207070b584df1814de2de0" }, { - "constant": false, + "anonymous": false, "inputs": [ { - "internalType": "address", - "name": "newPauseGuardian", - "type": "address" - } - ], - "name": "_setPauseGuardian", - "outputs": [ - { + "indexed": false, "internalType": "uint256", - "name": "", + "name": "error", "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0x5f5af1aa" - }, - { - "constant": false, - "inputs": [ + }, { - "internalType": "contract PriceOracle", - "name": "newOracle", - "type": "address" - } - ], - "name": "_setPriceOracle", - "outputs": [ + "indexed": false, + "internalType": "uint256", + "name": "info", + "type": "uint256" + }, { + "indexed": false, "internalType": "uint256", - "name": "", + "name": "detail", "type": "uint256" } ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0x55ee1fe1" + "name": "Failure", + "type": "event", + "signature": "0x45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0" }, { - "constant": false, + "anonymous": false, "inputs": [ { - "internalType": "bool", - "name": "state", - "type": "bool" - } - ], - "name": "_setSeizePaused", - "outputs": [ + "indexed": false, + "internalType": "contract CToken", + "name": "cToken", + "type": "address" + }, { - "internalType": "bool", - "name": "", - "type": "bool" + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" } ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0x2d70db78" + "name": "MarketEntered", + "type": "event", + "signature": "0x3ab23ab0d51cccc0c3085aec51f99228625aa1a922b3a8ca89a26b0f2027a1a5" }, { - "constant": false, + "anonymous": false, "inputs": [ { - "internalType": "bool", - "name": "state", - "type": "bool" - } - ], - "name": "_setTransferPaused", - "outputs": [ + "indexed": false, + "internalType": "contract CToken", + "name": "cToken", + "type": "address" + }, { - "internalType": "bool", - "name": "", - "type": "bool" + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" } ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0x8ebf6364" + "name": "MarketExited", + "type": "event", + "signature": "0xe699a64c18b07ac5b7301aa273f36a2287239eb9501d81950672794afba29a0d" }, { - "constant": false, + "anonymous": false, "inputs": [ { + "indexed": false, "internalType": "contract CToken", "name": "cToken", "type": "address" } ], - "name": "_supportMarket", - "outputs": [ + "name": "MarketListed", + "type": "event", + "signature": "0xcf583bb0c569eb967f806b11601c4cb93c10310485c67add5f8362c2f212321f" + }, + { + "anonymous": false, + "inputs": [ { + "indexed": false, "internalType": "uint256", - "name": "", + "name": "oldCloseFactorMantissa", "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0xa76b3fda" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newCloseFactorMantissa", + "type": "uint256" + } + ], + "name": "NewCloseFactor", + "type": "event", + "signature": "0x3b9670cf975d26958e754b57098eaa2ac914d8d2a31b83257997b9f346110fd9" }, { - "constant": true, + "anonymous": false, "inputs": [ { - "internalType": "address", - "name": "", + "indexed": false, + "internalType": "contract CToken", + "name": "cToken", "type": "address" }, { + "indexed": false, "internalType": "uint256", - "name": "", + "name": "oldCollateralFactorMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newCollateralFactorMantissa", "type": "uint256" } ], - "name": "accountAssets", - "outputs": [ + "name": "NewCollateralFactor", + "type": "event", + "signature": "0x70483e6592cd5182d45ac970e05bc62cdcc90e9d8ef2c2dbe686cf383bcd7fc5" + }, + { + "anonymous": false, + "inputs": [ { - "internalType": "contract CToken", - "name": "", - "type": "address" + "indexed": false, + "internalType": "uint256", + "name": "oldLiquidationIncentiveMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newLiquidationIncentiveMantissa", + "type": "uint256" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0xdce15449" + "name": "NewLiquidationIncentive", + "type": "event", + "signature": "0xaeba5a6c40a8ac138134bff1aaa65debf25971188a58804bad717f82f0ec1316" }, { - "constant": true, - "inputs": [], - "name": "admin", - "outputs": [ + "anonymous": false, + "inputs": [ { - "internalType": "address", - "name": "", - "type": "address" + "indexed": false, + "internalType": "uint256", + "name": "oldMaxAssets", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxAssets", + "type": "uint256" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0xf851a440" + "name": "NewMaxAssets", + "type": "event", + "signature": "0x7093cf1eb653f749c3ff531d6df7f92764536a7fa0d13530cd26e070780c32ea" }, { - "constant": false, + "anonymous": false, "inputs": [ { + "indexed": false, "internalType": "address", - "name": "cToken", + "name": "oldPauseGuardian", "type": "address" }, { + "indexed": false, "internalType": "address", - "name": "borrower", + "name": "newPauseGuardian", + "type": "address" + } + ], + "name": "NewPauseGuardian", + "type": "event", + "signature": "0x0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract PriceOracle", + "name": "oldPriceOracle", "type": "address" }, { - "internalType": "uint256", - "name": "borrowAmount", - "type": "uint256" + "indexed": false, + "internalType": "contract PriceOracle", + "name": "newPriceOracle", + "type": "address" } ], - "name": "borrowAllowed", - "outputs": [ + "name": "NewPriceOracle", + "type": "event", + "signature": "0xd52b2b9b7e9ee655fcb95d2e5b9e0c9f69e7ef2b8e9d2d0ea78402d576d22e22" + }, + { + "constant": false, + "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "internalType": "contract Unitroller", + "name": "unitroller", + "type": "address" } ], + "name": "_become", + "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xda3d454c" + "signature": "0x1d504dc6" }, { - "constant": true, - "inputs": [], - "name": "borrowGuardianPaused", + "constant": false, + "inputs": [ + { + "internalType": "bool", + "name": "state", + "type": "bool" + } + ], + "name": "_setBorrowPaused", "outputs": [ { "internalType": "bool", @@ -10725,67 +11011,69 @@ } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0x9530f644" + "signature": "0x56133fc8" }, { "constant": false, "inputs": [ { - "internalType": "address", - "name": "cToken", - "type": "address" - }, - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, + "internalType": "uint256", + "name": "newCloseFactorMantissa", + "type": "uint256" + } + ], + "name": "_setCloseFactor", + "outputs": [ { "internalType": "uint256", - "name": "borrowAmount", + "name": "", "type": "uint256" } ], - "name": "borrowVerify", - "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x5c778605" + "signature": "0x317b0b77" }, { - "constant": true, + "constant": false, "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, { "internalType": "contract CToken", "name": "cToken", "type": "address" + }, + { + "internalType": "uint256", + "name": "newCollateralFactorMantissa", + "type": "uint256" } ], - "name": "checkMembership", + "name": "_setCollateralFactor", "outputs": [ { - "internalType": "bool", + "internalType": "uint256", "name": "", - "type": "bool" + "type": "uint256" } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0x929fe9a1" + "signature": "0xe4028eee" }, { - "constant": true, - "inputs": [], - "name": "closeFactorMantissa", + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "newLiquidationIncentiveMantissa", + "type": "uint256" + } + ], + "name": "_setLiquidationIncentive", "outputs": [ { "internalType": "uint256", @@ -10794,58 +11082,64 @@ } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0xe8755446" + "signature": "0x4fd42e17" }, { - "constant": true, - "inputs": [], - "name": "comptrollerImplementation", + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "newMaxAssets", + "type": "uint256" + } + ], + "name": "_setMaxAssets", "outputs": [ { - "internalType": "address", + "internalType": "uint256", "name": "", - "type": "address" + "type": "uint256" } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0xbb82aa5e" + "signature": "0xd9226ced" }, { "constant": false, "inputs": [ { - "internalType": "address[]", - "name": "cTokens", - "type": "address[]" + "internalType": "bool", + "name": "state", + "type": "bool" } ], - "name": "enterMarkets", + "name": "_setMintPaused", "outputs": [ { - "internalType": "uint256[]", + "internalType": "bool", "name": "", - "type": "uint256[]" + "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xc2998238" + "signature": "0x9845f280" }, { "constant": false, "inputs": [ { "internalType": "address", - "name": "cTokenAddress", + "name": "newPauseGuardian", "type": "address" } ], - "name": "exitMarket", + "name": "_setPauseGuardian", "outputs": [ { "internalType": "uint256", @@ -10856,29 +11150,19 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xede4edd0" + "signature": "0x5f5af1aa" }, { - "constant": true, + "constant": false, "inputs": [ { - "internalType": "address", - "name": "account", + "internalType": "contract PriceOracle", + "name": "newOracle", "type": "address" } ], - "name": "getAccountLiquidity", + "name": "_setPriceOracle", "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, { "internalType": "uint256", "name": "", @@ -10886,36 +11170,20 @@ } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0x5ec88c79" + "signature": "0x55ee1fe1" }, { - "constant": true, + "constant": false, "inputs": [ { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "getAssetsIn", - "outputs": [ - { - "internalType": "contract CToken[]", - "name": "", - "type": "address[]" + "internalType": "bool", + "name": "state", + "type": "bool" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0xabfceffc" - }, - { - "constant": true, - "inputs": [], - "name": "isComptroller", + "name": "_setSeizePaused", "outputs": [ { "internalType": "bool", @@ -10924,118 +11192,61 @@ } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0x007e3dd2" + "signature": "0x2d70db78" }, { "constant": false, "inputs": [ { - "internalType": "address", - "name": "cTokenBorrowed", - "type": "address" - }, - { - "internalType": "address", - "name": "cTokenCollateral", - "type": "address" - }, - { - "internalType": "address", - "name": "liquidator", - "type": "address" - }, - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "uint256", - "name": "repayAmount", - "type": "uint256" + "internalType": "bool", + "name": "state", + "type": "bool" } ], - "name": "liquidateBorrowAllowed", + "name": "_setTransferPaused", "outputs": [ { - "internalType": "uint256", + "internalType": "bool", "name": "", - "type": "uint256" + "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x5fc7e71e" + "signature": "0x8ebf6364" }, { "constant": false, "inputs": [ { - "internalType": "address", - "name": "cTokenBorrowed", - "type": "address" - }, - { - "internalType": "address", - "name": "cTokenCollateral", - "type": "address" - }, - { - "internalType": "address", - "name": "liquidator", - "type": "address" - }, - { - "internalType": "address", - "name": "borrower", + "internalType": "contract CToken", + "name": "cToken", "type": "address" - }, - { - "internalType": "uint256", - "name": "actualRepayAmount", - "type": "uint256" - }, + } + ], + "name": "_supportMarket", + "outputs": [ { "internalType": "uint256", - "name": "seizeTokens", + "name": "", "type": "uint256" } ], - "name": "liquidateBorrowVerify", - "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x47ef3b3b" + "signature": "0xa76b3fda" }, { "constant": true, "inputs": [ { "internalType": "address", - "name": "cTokenBorrowed", - "type": "address" - }, - { - "internalType": "address", - "name": "cTokenCollateral", - "type": "address" - }, - { - "internalType": "uint256", - "name": "actualRepayAmount", - "type": "uint256" - } - ], - "name": "liquidateCalculateSeizeTokens", - "outputs": [ - { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address" }, { "internalType": "uint256", @@ -11043,69 +11254,34 @@ "type": "uint256" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0xc488847b" - }, - { - "constant": true, - "inputs": [], - "name": "liquidationIncentiveMantissa", + "name": "accountAssets", "outputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0x4ada90af" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", + "internalType": "contract CToken", "name": "", "type": "address" } ], - "name": "markets", - "outputs": [ - { - "internalType": "bool", - "name": "isListed", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "collateralFactorMantissa", - "type": "uint256" - } - ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x8e8f294b" + "signature": "0xdce15449" }, { "constant": true, "inputs": [], - "name": "maxAssets", + "name": "admin", "outputs": [ { - "internalType": "uint256", + "internalType": "address", "name": "", - "type": "uint256" + "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x94b2294b" + "signature": "0xf851a440" }, { "constant": false, @@ -11117,16 +11293,16 @@ }, { "internalType": "address", - "name": "minter", + "name": "borrower", "type": "address" }, { "internalType": "uint256", - "name": "mintAmount", + "name": "borrowAmount", "type": "uint256" } ], - "name": "mintAllowed", + "name": "borrowAllowed", "outputs": [ { "internalType": "uint256", @@ -11137,12 +11313,12 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x4ef4c3e1" + "signature": "0xda3d454c" }, { "constant": true, "inputs": [], - "name": "mintGuardianPaused", + "name": "borrowGuardianPaused", "outputs": [ { "internalType": "bool", @@ -11153,7 +11329,7 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x5dce0515" + "signature": "0x9530f644" }, { "constant": false, @@ -11165,79 +11341,69 @@ }, { "internalType": "address", - "name": "minter", + "name": "borrower", "type": "address" }, { "internalType": "uint256", - "name": "actualMintAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "mintTokens", + "name": "borrowAmount", "type": "uint256" } ], - "name": "mintVerify", + "name": "borrowVerify", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x41c728b9" + "signature": "0x5c778605" }, { "constant": true, - "inputs": [], - "name": "oracle", - "outputs": [ + "inputs": [ { - "internalType": "contract PriceOracle", - "name": "", + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "contract CToken", + "name": "cToken", "type": "address" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0x7dc0d1d0" - }, - { - "constant": true, - "inputs": [], - "name": "pauseGuardian", + "name": "checkMembership", "outputs": [ { - "internalType": "address", + "internalType": "bool", "name": "", - "type": "address" + "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x24a3d622" + "signature": "0x929fe9a1" }, { "constant": true, "inputs": [], - "name": "pendingAdmin", + "name": "closeFactorMantissa", "outputs": [ { - "internalType": "address", + "internalType": "uint256", "name": "", - "type": "address" + "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x26782247" + "signature": "0xe8755446" }, { "constant": true, "inputs": [], - "name": "pendingComptrollerImplementation", + "name": "comptrollerImplementation", "outputs": [ { "internalType": "address", @@ -11248,82 +11414,138 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0xdcfbc0c7" + "signature": "0xbb82aa5e" }, { "constant": false, "inputs": [ { - "internalType": "address", - "name": "cToken", - "type": "address" - }, - { - "internalType": "address", - "name": "redeemer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "redeemTokens", - "type": "uint256" + "internalType": "address[]", + "name": "cTokens", + "type": "address[]" } ], - "name": "redeemAllowed", + "name": "enterMarkets", "outputs": [ { - "internalType": "uint256", + "internalType": "uint256[]", "name": "", - "type": "uint256" + "type": "uint256[]" } ], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xeabe7d91" + "signature": "0xc2998238" }, { "constant": false, "inputs": [ { "internalType": "address", - "name": "cToken", + "name": "cTokenAddress", "type": "address" - }, + } + ], + "name": "exitMarket", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xede4edd0" + }, + { + "constant": true, + "inputs": [ { "internalType": "address", - "name": "redeemer", + "name": "account", "type": "address" + } + ], + "name": "getAccountLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" }, { "internalType": "uint256", - "name": "redeemAmount", + "name": "", "type": "uint256" }, { "internalType": "uint256", - "name": "redeemTokens", + "name": "", "type": "uint256" } ], - "name": "redeemVerify", - "outputs": [], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0x51dff989" + "signature": "0x5ec88c79" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getAssetsIn", + "outputs": [ + { + "internalType": "contract CToken[]", + "name": "", + "type": "address[]" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xabfceffc" + }, + { + "constant": true, + "inputs": [], + "name": "isComptroller", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x007e3dd2" }, { "constant": false, "inputs": [ { "internalType": "address", - "name": "cToken", + "name": "cTokenBorrowed", "type": "address" }, { "internalType": "address", - "name": "payer", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidator", "type": "address" }, { @@ -11337,7 +11559,7 @@ "type": "uint256" } ], - "name": "repayBorrowAllowed", + "name": "liquidateBorrowAllowed", "outputs": [ { "internalType": "uint256", @@ -11348,19 +11570,24 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x24008a62" + "signature": "0x5fc7e71e" }, { "constant": false, "inputs": [ { "internalType": "address", - "name": "cToken", + "name": "cTokenBorrowed", "type": "address" }, { "internalType": "address", - "name": "payer", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidator", "type": "address" }, { @@ -11375,25 +11602,20 @@ }, { "internalType": "uint256", - "name": "borrowerIndex", + "name": "seizeTokens", "type": "uint256" } ], - "name": "repayBorrowVerify", + "name": "liquidateBorrowVerify", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x1ededc91" + "signature": "0x47ef3b3b" }, { - "constant": false, + "constant": true, "inputs": [ - { - "internalType": "address", - "name": "cTokenCollateral", - "type": "address" - }, { "internalType": "address", "name": "cTokenBorrowed", @@ -11401,22 +11623,22 @@ }, { "internalType": "address", - "name": "liquidator", - "type": "address" - }, - { - "internalType": "address", - "name": "borrower", + "name": "cTokenCollateral", "type": "address" }, { "internalType": "uint256", - "name": "seizeTokens", + "name": "actualRepayAmount", "type": "uint256" } ], - "name": "seizeAllowed", + "name": "liquidateCalculateSeizeTokens", "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, { "internalType": "uint256", "name": "", @@ -11424,61 +11646,68 @@ } ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0xd02f7351" + "signature": "0xc488847b" }, { "constant": true, "inputs": [], - "name": "seizeGuardianPaused", + "name": "liquidationIncentiveMantissa", "outputs": [ { - "internalType": "bool", + "internalType": "uint256", "name": "", - "type": "bool" + "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0xac0b0bb7" + "signature": "0x4ada90af" }, { - "constant": false, + "constant": true, "inputs": [ { "internalType": "address", - "name": "cTokenCollateral", - "type": "address" - }, - { - "internalType": "address", - "name": "cTokenBorrowed", + "name": "", "type": "address" - }, + } + ], + "name": "markets", + "outputs": [ { - "internalType": "address", - "name": "liquidator", - "type": "address" + "internalType": "bool", + "name": "isListed", + "type": "bool" }, { - "internalType": "address", - "name": "borrower", - "type": "address" - }, + "internalType": "uint256", + "name": "collateralFactorMantissa", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x8e8f294b" + }, + { + "constant": true, + "inputs": [], + "name": "maxAssets", + "outputs": [ { "internalType": "uint256", - "name": "seizeTokens", + "name": "", "type": "uint256" } ], - "name": "seizeVerify", - "outputs": [], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0x6d35bf91" + "signature": "0x94b2294b" }, { "constant": false, @@ -11490,21 +11719,16 @@ }, { "internalType": "address", - "name": "src", - "type": "address" - }, - { - "internalType": "address", - "name": "dst", + "name": "minter", "type": "address" }, { "internalType": "uint256", - "name": "transferTokens", + "name": "mintAmount", "type": "uint256" } ], - "name": "transferAllowed", + "name": "mintAllowed", "outputs": [ { "internalType": "uint256", @@ -11515,12 +11739,12 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xbdcdc258" + "signature": "0x4ef4c3e1" }, { "constant": true, "inputs": [], - "name": "transferGuardianPaused", + "name": "mintGuardianPaused", "outputs": [ { "internalType": "bool", @@ -11531,7 +11755,7 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x87f76303" + "signature": "0x5dce0515" }, { "constant": false, @@ -11543,456 +11767,571 @@ }, { "internalType": "address", - "name": "src", + "name": "minter", "type": "address" }, { - "internalType": "address", - "name": "dst", - "type": "address" + "internalType": "uint256", + "name": "actualMintAmount", + "type": "uint256" }, { "internalType": "uint256", - "name": "transferTokens", + "name": "mintTokens", "type": "uint256" } ], - "name": "transferVerify", + "name": "mintVerify", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x6a56947e" - } - ], - "Comp": [ + "signature": "0x41c728b9" + }, { - "inputs": [ + "constant": true, + "inputs": [], + "name": "oracle", + "outputs": [ { - "internalType": "address", - "name": "account", + "internalType": "contract PriceOracle", + "name": "", "type": "address" } ], "payable": false, - "stateMutability": "nonpayable", - "type": "constructor", - "signature": "constructor" + "stateMutability": "view", + "type": "function", + "signature": "0x7dc0d1d0" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, + "constant": true, + "inputs": [], + "name": "pauseGuardian", + "outputs": [ { - "indexed": true, "internalType": "address", - "name": "spender", + "name": "", "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" } ], - "name": "Approval", - "type": "event", - "signature": "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925" + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x24a3d622" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fromDelegate", - "type": "address" - }, + "constant": true, + "inputs": [], + "name": "pendingAdmin", + "outputs": [ { - "indexed": true, "internalType": "address", - "name": "toDelegate", + "name": "", "type": "address" } ], - "name": "DelegateChanged", - "type": "event", - "signature": "0x3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f" + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x26782247" }, { - "anonymous": false, - "inputs": [ + "constant": true, + "inputs": [], + "name": "pendingComptrollerImplementation", + "outputs": [ { - "indexed": true, "internalType": "address", - "name": "delegate", + "name": "", "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "previousBalance", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newBalance", - "type": "uint256" } ], - "name": "DelegateVotesChanged", - "type": "event", - "signature": "0xdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724" + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xdcfbc0c7" }, { - "anonymous": false, + "constant": false, "inputs": [ { - "indexed": true, "internalType": "address", - "name": "from", + "name": "cToken", "type": "address" }, { - "indexed": true, "internalType": "address", - "name": "to", + "name": "redeemer", "type": "address" }, { - "indexed": false, "internalType": "uint256", - "name": "amount", + "name": "redeemTokens", "type": "uint256" } ], - "name": "Transfer", - "type": "event", - "signature": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef" - }, - { - "constant": true, - "inputs": [], - "name": "DELEGATION_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0xe7a324dc" - }, - { - "constant": true, - "inputs": [], - "name": "DOMAIN_TYPEHASH", + "name": "redeemAllowed", "outputs": [ { - "internalType": "bytes32", + "internalType": "uint256", "name": "", - "type": "bytes32" + "type": "uint256" } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0x20606b70" + "signature": "0xeabe7d91" }, { - "constant": true, + "constant": false, "inputs": [ { "internalType": "address", - "name": "account", + "name": "cToken", "type": "address" }, { "internalType": "address", - "name": "spender", + "name": "redeemer", "type": "address" - } - ], - "name": "allowance", - "outputs": [ + }, { "internalType": "uint256", - "name": "", + "name": "redeemAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "redeemTokens", "type": "uint256" } ], + "name": "redeemVerify", + "outputs": [], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0xdd62ed3e" + "signature": "0x51dff989" }, { "constant": false, "inputs": [ { "internalType": "address", - "name": "spender", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", "type": "address" }, { "internalType": "uint256", - "name": "rawAmount", + "name": "repayAmount", "type": "uint256" } ], - "name": "approve", + "name": "repayBorrowAllowed", "outputs": [ { - "internalType": "bool", + "internalType": "uint256", "name": "", - "type": "bool" + "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x095ea7b3" + "signature": "0x24008a62" }, { - "constant": true, + "constant": false, "inputs": [ { "internalType": "address", - "name": "account", + "name": "cToken", "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ + }, + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, { "internalType": "uint256", - "name": "", + "name": "actualRepayAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowerIndex", "type": "uint256" } ], + "name": "repayBorrowVerify", + "outputs": [], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0x70a08231" + "signature": "0x1ededc91" }, { - "constant": true, + "constant": false, "inputs": [ { "internalType": "address", - "name": "", + "name": "cTokenCollateral", "type": "address" }, { - "internalType": "uint32", - "name": "", - "type": "uint32" + "internalType": "address", + "name": "cTokenBorrowed", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" } ], - "name": "checkpoints", + "name": "seizeAllowed", "outputs": [ { - "internalType": "uint32", - "name": "fromBlock", - "type": "uint32" - }, - { - "internalType": "uint96", - "name": "votes", - "type": "uint96" + "internalType": "uint256", + "name": "", + "type": "uint256" } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0xf1127ed8" + "signature": "0xd02f7351" }, { "constant": true, "inputs": [], - "name": "decimals", + "name": "seizeGuardianPaused", "outputs": [ { - "internalType": "uint8", + "internalType": "bool", "name": "", - "type": "uint8" + "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x313ce567" + "signature": "0xac0b0bb7" }, { "constant": false, "inputs": [ { "internalType": "address", - "name": "delegatee", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenBorrowed", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", "type": "address" + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" } ], - "name": "delegate", + "name": "seizeVerify", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x5c19a95c" + "signature": "0x6d35bf91" }, { "constant": false, "inputs": [ { "internalType": "address", - "name": "delegatee", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "src", + "type": "address" + }, + { + "internalType": "address", + "name": "dst", "type": "address" }, { "internalType": "uint256", - "name": "nonce", + "name": "transferTokens", "type": "uint256" - }, + } + ], + "name": "transferAllowed", + "outputs": [ { "internalType": "uint256", - "name": "expiry", + "name": "", "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xbdcdc258" + }, + { + "constant": true, + "inputs": [], + "name": "transferGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x87f76303" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" }, { - "internalType": "uint8", - "name": "v", - "type": "uint8" + "internalType": "address", + "name": "src", + "type": "address" }, { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" + "internalType": "address", + "name": "dst", + "type": "address" }, { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" + "internalType": "uint256", + "name": "transferTokens", + "type": "uint256" } ], - "name": "delegateBySig", + "name": "transferVerify", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xc3cda520" - }, + "signature": "0x6a56947e" + } + ], + "Comp": [ { - "constant": true, "inputs": [ { "internalType": "address", - "name": "", + "name": "account", "type": "address" } ], - "name": "delegates", - "outputs": [ + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor", + "signature": "constructor" + }, + { + "anonymous": false, + "inputs": [ { + "indexed": true, "internalType": "address", - "name": "", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0x587cde1e" + "name": "Approval", + "type": "event", + "signature": "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925" }, { - "constant": true, + "anonymous": false, "inputs": [ { + "indexed": true, "internalType": "address", - "name": "account", + "name": "delegator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fromDelegate", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "toDelegate", "type": "address" } ], - "name": "getCurrentVotes", - "outputs": [ + "name": "DelegateChanged", + "type": "event", + "signature": "0x3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f" + }, + { + "anonymous": false, + "inputs": [ { - "internalType": "uint96", - "name": "", - "type": "uint96" + "indexed": true, + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "previousBalance", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newBalance", + "type": "uint256" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0xb4b5ea57" + "name": "DelegateVotesChanged", + "type": "event", + "signature": "0xdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724" }, { - "constant": true, + "anonymous": false, "inputs": [ { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, "internalType": "address", - "name": "account", + "name": "to", "type": "address" }, { + "indexed": false, "internalType": "uint256", - "name": "blockNumber", + "name": "amount", "type": "uint256" } ], - "name": "getPriorVotes", + "name": "Transfer", + "type": "event", + "signature": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef" + }, + { + "constant": true, + "inputs": [], + "name": "DELEGATION_TYPEHASH", "outputs": [ { - "internalType": "uint96", + "internalType": "bytes32", "name": "", - "type": "uint96" + "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x782d6fe1" + "signature": "0xe7a324dc" }, { "constant": true, "inputs": [], - "name": "name", + "name": "DOMAIN_TYPEHASH", "outputs": [ { - "internalType": "string", + "internalType": "bytes32", "name": "", - "type": "string" + "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x06fdde03" + "signature": "0x20606b70" }, { "constant": true, "inputs": [ { "internalType": "address", - "name": "", + "name": "account", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", "type": "address" } ], - "name": "nonces", + "name": "allowance", "outputs": [ { "internalType": "uint256", @@ -12003,50 +12342,45 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x7ecebe00" + "signature": "0xdd62ed3e" }, { - "constant": true, + "constant": false, "inputs": [ { "internalType": "address", - "name": "", + "name": "spender", "type": "address" + }, + { + "internalType": "uint256", + "name": "rawAmount", + "type": "uint256" } ], - "name": "numCheckpoints", + "name": "approve", "outputs": [ { - "internalType": "uint32", + "internalType": "bool", "name": "", - "type": "uint32" + "type": "bool" } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0x6fcfff45" + "signature": "0x095ea7b3" }, { "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ + "inputs": [ { - "internalType": "string", - "name": "", - "type": "string" + "internalType": "address", + "name": "account", + "type": "address" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0x95d89b41" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", + "name": "balanceOf", "outputs": [ { "internalType": "uint256", @@ -12057,376 +12391,394 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x18160ddd" + "signature": "0x70a08231" }, { - "constant": false, + "constant": true, "inputs": [ { "internalType": "address", - "name": "dst", + "name": "", "type": "address" }, { - "internalType": "uint256", - "name": "rawAmount", - "type": "uint256" + "internalType": "uint32", + "name": "", + "type": "uint32" } ], - "name": "transfer", + "name": "checkpoints", "outputs": [ { - "internalType": "bool", + "internalType": "uint32", + "name": "fromBlock", + "type": "uint32" + }, + { + "internalType": "uint96", + "name": "votes", + "type": "uint96" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xf1127ed8" + }, + { + "constant": true, + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", "name": "", - "type": "bool" + "type": "uint8" } ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0xa9059cbb" + "signature": "0x313ce567" }, { "constant": false, "inputs": [ { "internalType": "address", - "name": "src", - "type": "address" - }, - { - "internalType": "address", - "name": "dst", + "name": "delegatee", "type": "address" - }, - { - "internalType": "uint256", - "name": "rawAmount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" } ], + "name": "delegate", + "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x23b872dd" - } - ], - "cBAT": [ + "signature": "0x5c19a95c" + }, { + "constant": false, "inputs": [ { "internalType": "address", - "name": "underlying_", - "type": "address" - }, - { - "internalType": "contract ComptrollerInterface", - "name": "comptroller_", - "type": "address" - }, - { - "internalType": "contract InterestRateModel", - "name": "interestRateModel_", + "name": "delegatee", "type": "address" }, { "internalType": "uint256", - "name": "initialExchangeRateMantissa_", + "name": "nonce", "type": "uint256" }, { - "internalType": "string", - "name": "name_", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol_", - "type": "string" + "internalType": "uint256", + "name": "expiry", + "type": "uint256" }, { "internalType": "uint8", - "name": "decimals_", + "name": "v", "type": "uint8" }, { - "internalType": "address payable", - "name": "admin_", - "type": "address" + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" } ], + "name": "delegateBySig", + "outputs": [], "payable": false, "stateMutability": "nonpayable", - "type": "constructor", - "signature": "constructor" + "type": "function", + "signature": "0xc3cda520" }, { - "anonymous": false, + "constant": true, "inputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "cashPrior", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "interestAccumulated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "borrowIndex", - "type": "uint256" - }, + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "delegates", + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "totalBorrows", - "type": "uint256" + "internalType": "address", + "name": "", + "type": "address" } ], - "name": "AccrueInterest", - "type": "event", - "signature": "0x4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc04" + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x587cde1e" }, { - "anonymous": false, + "constant": true, "inputs": [ { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, "internalType": "address", - "name": "spender", + "name": "account", "type": "address" - }, + } + ], + "name": "getCurrentVotes", + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "internalType": "uint96", + "name": "", + "type": "uint96" } ], - "name": "Approval", - "type": "event", - "signature": "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925" + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xb4b5ea57" }, { - "anonymous": false, + "constant": true, "inputs": [ { - "indexed": false, "internalType": "address", - "name": "borrower", + "name": "account", "type": "address" }, { - "indexed": false, "internalType": "uint256", - "name": "borrowAmount", + "name": "blockNumber", "type": "uint256" - }, + } + ], + "name": "getPriorVotes", + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "accountBorrows", - "type": "uint256" - }, + "internalType": "uint96", + "name": "", + "type": "uint96" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x782d6fe1" + }, + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "totalBorrows", - "type": "uint256" + "internalType": "string", + "name": "", + "type": "string" } ], - "name": "Borrow", - "type": "event", - "signature": "0x13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab80" + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x06fdde03" }, { - "anonymous": false, + "constant": true, "inputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "error", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "info", - "type": "uint256" - }, + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ { - "indexed": false, "internalType": "uint256", - "name": "detail", + "name": "", "type": "uint256" } ], - "name": "Failure", - "type": "event", - "signature": "0x45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0" + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x7ecebe00" }, { - "anonymous": false, + "constant": true, "inputs": [ { - "indexed": false, - "internalType": "address", - "name": "liquidator", - "type": "address" - }, - { - "indexed": false, "internalType": "address", - "name": "borrower", + "name": "", "type": "address" - }, + } + ], + "name": "numCheckpoints", + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "repayAmount", - "type": "uint256" - }, + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x6fcfff45" + }, + { + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ { - "indexed": false, - "internalType": "address", - "name": "cTokenCollateral", - "type": "address" - }, + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x95d89b41" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ { - "indexed": false, "internalType": "uint256", - "name": "seizeTokens", + "name": "", "type": "uint256" } ], - "name": "LiquidateBorrow", - "type": "event", - "signature": "0x298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb52" + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x18160ddd" }, { - "anonymous": false, + "constant": false, "inputs": [ { - "indexed": false, "internalType": "address", - "name": "minter", + "name": "dst", "type": "address" }, { - "indexed": false, "internalType": "uint256", - "name": "mintAmount", + "name": "rawAmount", "type": "uint256" - }, + } + ], + "name": "transfer", + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "mintTokens", - "type": "uint256" + "internalType": "bool", + "name": "", + "type": "bool" } ], - "name": "Mint", - "type": "event", - "signature": "0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f" + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xa9059cbb" }, { - "anonymous": false, + "constant": false, "inputs": [ { - "indexed": false, "internalType": "address", - "name": "oldAdmin", + "name": "src", "type": "address" }, { - "indexed": false, "internalType": "address", - "name": "newAdmin", + "name": "dst", "type": "address" + }, + { + "internalType": "uint256", + "name": "rawAmount", + "type": "uint256" } ], - "name": "NewAdmin", - "type": "event", - "signature": "0xf9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc" - }, + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x23b872dd" + } + ], + "cUSDT": [ { - "anonymous": false, "inputs": [ { - "indexed": false, - "internalType": "contract ComptrollerInterface", - "name": "oldComptroller", + "internalType": "address", + "name": "underlying_", "type": "address" }, { - "indexed": false, "internalType": "contract ComptrollerInterface", - "name": "newComptroller", + "name": "comptroller_", "type": "address" - } - ], - "name": "NewComptroller", - "type": "event", - "signature": "0x7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d" - }, - { - "anonymous": false, - "inputs": [ + }, { - "indexed": false, "internalType": "contract InterestRateModel", - "name": "oldInterestRateModel", + "name": "interestRateModel_", "type": "address" }, { - "indexed": false, - "internalType": "contract InterestRateModel", - "name": "newInterestRateModel", - "type": "address" - } - ], - "name": "NewMarketInterestRateModel", - "type": "event", - "signature": "0xedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f926" - }, - { - "anonymous": false, - "inputs": [ + "internalType": "uint256", + "name": "initialExchangeRateMantissa_", + "type": "uint256" + }, { - "indexed": false, - "internalType": "address", - "name": "oldPendingAdmin", + "internalType": "string", + "name": "name_", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol_", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals_", + "type": "uint8" + }, + { + "internalType": "address payable", + "name": "admin_", "type": "address" }, { - "indexed": false, "internalType": "address", - "name": "newPendingAdmin", + "name": "implementation_", "type": "address" + }, + { + "internalType": "bytes", + "name": "becomeImplementationData", + "type": "bytes" } ], - "name": "NewPendingAdmin", - "type": "event", - "signature": "0xca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9" + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor", + "signature": "constructor" }, { "anonymous": false, @@ -12434,57 +12786,63 @@ { "indexed": false, "internalType": "uint256", - "name": "oldReserveFactorMantissa", + "name": "cashPrior", "type": "uint256" }, { "indexed": false, "internalType": "uint256", - "name": "newReserveFactorMantissa", + "name": "interestAccumulated", "type": "uint256" - } - ], - "name": "NewReserveFactor", - "type": "event", - "signature": "0xaaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f821460" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "redeemer", - "type": "address" }, { "indexed": false, "internalType": "uint256", - "name": "redeemAmount", + "name": "borrowIndex", "type": "uint256" }, { "indexed": false, "internalType": "uint256", - "name": "redeemTokens", + "name": "totalBorrows", "type": "uint256" } ], - "name": "Redeem", + "name": "AccrueInterest", "type": "event", - "signature": "0xe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929" + "signature": "0x4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc04" }, { "anonymous": false, "inputs": [ { - "indexed": false, + "indexed": true, "internalType": "address", - "name": "payer", + "name": "owner", "type": "address" }, { - "indexed": false, + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event", + "signature": "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, "internalType": "address", "name": "borrower", "type": "address" @@ -12492,7 +12850,7 @@ { "indexed": false, "internalType": "uint256", - "name": "repayAmount", + "name": "borrowAmount", "type": "uint256" }, { @@ -12508,35 +12866,35 @@ "type": "uint256" } ], - "name": "RepayBorrow", + "name": "Borrow", "type": "event", - "signature": "0x1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1" + "signature": "0x13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab80" }, { "anonymous": false, "inputs": [ { "indexed": false, - "internalType": "address", - "name": "benefactor", - "type": "address" + "internalType": "uint256", + "name": "error", + "type": "uint256" }, { "indexed": false, "internalType": "uint256", - "name": "addAmount", + "name": "info", "type": "uint256" }, { "indexed": false, "internalType": "uint256", - "name": "newTotalReserves", + "name": "detail", "type": "uint256" } ], - "name": "ReservesAdded", + "name": "Failure", "type": "event", - "signature": "0xa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc5" + "signature": "0x45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0" }, { "anonymous": false, @@ -12544,312 +12902,357 @@ { "indexed": false, "internalType": "address", - "name": "admin", + "name": "liquidator", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "borrower", "type": "address" }, { "indexed": false, "internalType": "uint256", - "name": "reduceAmount", + "name": "repayAmount", "type": "uint256" }, + { + "indexed": false, + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, { "indexed": false, "internalType": "uint256", - "name": "newTotalReserves", + "name": "seizeTokens", "type": "uint256" } ], - "name": "ReservesReduced", + "name": "LiquidateBorrow", "type": "event", - "signature": "0x3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e" + "signature": "0x298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb52" }, { "anonymous": false, "inputs": [ { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, + "indexed": false, "internalType": "address", - "name": "to", + "name": "minter", "type": "address" }, { "indexed": false, "internalType": "uint256", - "name": "amount", + "name": "mintAmount", "type": "uint256" - } - ], - "name": "Transfer", - "type": "event", - "signature": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef" - }, - { - "constant": false, - "inputs": [], - "name": "_acceptAdmin", - "outputs": [ + }, { + "indexed": false, "internalType": "uint256", - "name": "", + "name": "mintTokens", "type": "uint256" } ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0xe9c714f2" + "name": "Mint", + "type": "event", + "signature": "0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f" }, { - "constant": false, + "anonymous": false, "inputs": [ { - "internalType": "uint256", - "name": "addAmount", - "type": "uint256" - } - ], - "name": "_addReserves", - "outputs": [ + "indexed": false, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, { - "internalType": "uint256", - "name": "", - "type": "uint256" + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" } ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0x3e941010" + "name": "NewAdmin", + "type": "event", + "signature": "0xf9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc" }, { - "constant": false, + "anonymous": false, "inputs": [ { - "internalType": "uint256", - "name": "reduceAmount", - "type": "uint256" - } - ], - "name": "_reduceReserves", - "outputs": [ + "indexed": false, + "internalType": "contract ComptrollerInterface", + "name": "oldComptroller", + "type": "address" + }, { - "internalType": "uint256", - "name": "", - "type": "uint256" + "indexed": false, + "internalType": "contract ComptrollerInterface", + "name": "newComptroller", + "type": "address" } ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0x601a0bf1" + "name": "NewComptroller", + "type": "event", + "signature": "0x7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d" }, { - "constant": false, + "anonymous": false, "inputs": [ { - "internalType": "contract ComptrollerInterface", - "name": "newComptroller", + "indexed": false, + "internalType": "address", + "name": "oldImplementation", "type": "address" - } - ], - "name": "_setComptroller", - "outputs": [ + }, { - "internalType": "uint256", - "name": "", - "type": "uint256" + "indexed": false, + "internalType": "address", + "name": "newImplementation", + "type": "address" } ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0x4576b5db" + "name": "NewImplementation", + "type": "event", + "signature": "0xd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a" }, { - "constant": false, + "anonymous": false, "inputs": [ { + "indexed": false, "internalType": "contract InterestRateModel", - "name": "newInterestRateModel", + "name": "oldInterestRateModel", "type": "address" - } - ], - "name": "_setInterestRateModel", - "outputs": [ + }, { - "internalType": "uint256", - "name": "", - "type": "uint256" + "indexed": false, + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address" } ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0xf2b3abbd" + "name": "NewMarketInterestRateModel", + "type": "event", + "signature": "0xedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f926" }, { - "constant": false, + "anonymous": false, "inputs": [ { - "internalType": "address payable", - "name": "newPendingAdmin", + "indexed": false, + "internalType": "address", + "name": "oldPendingAdmin", "type": "address" - } - ], - "name": "_setPendingAdmin", - "outputs": [ + }, { - "internalType": "uint256", - "name": "", - "type": "uint256" + "indexed": false, + "internalType": "address", + "name": "newPendingAdmin", + "type": "address" } ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0xb71d1a0c" + "name": "NewPendingAdmin", + "type": "event", + "signature": "0xca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9" }, { - "constant": false, + "anonymous": false, "inputs": [ { + "indexed": false, "internalType": "uint256", - "name": "newReserveFactorMantissa", + "name": "oldReserveFactorMantissa", "type": "uint256" - } - ], - "name": "_setReserveFactor", - "outputs": [ + }, { + "indexed": false, "internalType": "uint256", - "name": "", + "name": "newReserveFactorMantissa", "type": "uint256" } ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0xfca7820b" + "name": "NewReserveFactor", + "type": "event", + "signature": "0xaaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f821460" }, { - "constant": true, - "inputs": [], - "name": "accrualBlockNumber", - "outputs": [ + "anonymous": false, + "inputs": [ { - "internalType": "uint256", - "name": "", + "indexed": false, + "internalType": "address", + "name": "redeemer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "redeemTokens", "type": "uint256" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0x6c540baf" + "name": "Redeem", + "type": "event", + "signature": "0xe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929" }, { - "constant": false, - "inputs": [], - "name": "accrueInterest", - "outputs": [ + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "borrower", + "type": "address" + }, { + "indexed": false, "internalType": "uint256", - "name": "", + "name": "repayAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", "type": "uint256" } ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0xa6afed95" + "name": "RepayBorrow", + "type": "event", + "signature": "0x1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1" }, { - "constant": true, - "inputs": [], - "name": "admin", - "outputs": [ + "anonymous": false, + "inputs": [ { - "internalType": "address payable", - "name": "", + "indexed": false, + "internalType": "address", + "name": "benefactor", "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "addAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0xf851a440" + "name": "ReservesAdded", + "type": "event", + "signature": "0xa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc5" }, { - "constant": true, + "anonymous": false, "inputs": [ { + "indexed": false, "internalType": "address", - "name": "owner", + "name": "admin", "type": "address" }, { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ + "indexed": false, + "internalType": "uint256", + "name": "reduceAmount", + "type": "uint256" + }, { + "indexed": false, "internalType": "uint256", - "name": "", + "name": "newTotalReserves", "type": "uint256" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0xdd62ed3e" + "name": "ReservesReduced", + "type": "event", + "signature": "0x3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e" }, { - "constant": false, + "anonymous": false, "inputs": [ { + "indexed": true, "internalType": "address", - "name": "spender", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", "type": "address" }, { + "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], - "name": "approve", + "name": "Transfer", + "type": "event", + "signature": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef" + }, + { + "payable": true, + "stateMutability": "payable", + "type": "fallback" + }, + { + "constant": false, + "inputs": [], + "name": "_acceptAdmin", "outputs": [ { - "internalType": "bool", + "internalType": "uint256", "name": "", - "type": "bool" + "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x095ea7b3" + "signature": "0xe9c714f2" }, { - "constant": true, + "constant": false, "inputs": [ { - "internalType": "address", - "name": "owner", - "type": "address" + "internalType": "uint256", + "name": "addAmount", + "type": "uint256" } ], - "name": "balanceOf", + "name": "_addReserves", "outputs": [ { "internalType": "uint256", @@ -12858,20 +13261,20 @@ } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0x70a08231" + "signature": "0x3e941010" }, { "constant": false, "inputs": [ { - "internalType": "address", - "name": "owner", - "type": "address" + "internalType": "uint256", + "name": "reduceAmount", + "type": "uint256" } ], - "name": "balanceOfUnderlying", + "name": "_reduceReserves", "outputs": [ { "internalType": "uint256", @@ -12882,18 +13285,18 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x3af9e669" + "signature": "0x601a0bf1" }, { "constant": false, "inputs": [ { - "internalType": "uint256", - "name": "borrowAmount", - "type": "uint256" + "internalType": "contract ComptrollerInterface", + "name": "newComptroller", + "type": "address" } ], - "name": "borrow", + "name": "_setComptroller", "outputs": [ { "internalType": "uint256", @@ -12904,18 +13307,44 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xc5ebeaec" + "signature": "0x4576b5db" }, { "constant": false, "inputs": [ { "internalType": "address", - "name": "account", + "name": "implementation_", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowResign", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "becomeImplementationData", + "type": "bytes" + } + ], + "name": "_setImplementation", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x555bcc40" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", "type": "address" } ], - "name": "borrowBalanceCurrent", + "name": "_setInterestRateModel", "outputs": [ { "internalType": "uint256", @@ -12926,18 +13355,18 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x17bfdfbc" + "signature": "0xf2b3abbd" }, { - "constant": true, + "constant": false, "inputs": [ { - "internalType": "address", - "name": "account", + "internalType": "address payable", + "name": "newPendingAdmin", "type": "address" } ], - "name": "borrowBalanceStored", + "name": "_setPendingAdmin", "outputs": [ { "internalType": "uint256", @@ -12946,14 +13375,20 @@ } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0x95dd9193" + "signature": "0xb71d1a0c" }, { - "constant": true, - "inputs": [], - "name": "borrowIndex", + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256" + } + ], + "name": "_setReserveFactor", "outputs": [ { "internalType": "uint256", @@ -12962,14 +13397,14 @@ } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0xaa5af0fd" + "signature": "0xfca7820b" }, { "constant": true, "inputs": [], - "name": "borrowRatePerBlock", + "name": "accrualBlockNumber", "outputs": [ { "internalType": "uint256", @@ -12980,44 +13415,55 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0xf8f9da28" + "signature": "0x6c540baf" }, { - "constant": true, + "constant": false, "inputs": [], - "name": "comptroller", + "name": "accrueInterest", "outputs": [ { - "internalType": "contract ComptrollerInterface", + "internalType": "uint256", "name": "", - "type": "address" + "type": "uint256" } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0x5fe3b567" + "signature": "0xa6afed95" }, { "constant": true, "inputs": [], - "name": "decimals", + "name": "admin", "outputs": [ { - "internalType": "uint8", + "internalType": "address payable", "name": "", - "type": "uint8" + "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x313ce567" + "signature": "0xf851a440" }, { - "constant": false, - "inputs": [], - "name": "exchangeRateCurrent", + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", "outputs": [ { "internalType": "uint256", @@ -13026,14 +13472,47 @@ } ], "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xdd62ed3e" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xbd6d894d" + "signature": "0x095ea7b3" }, { "constant": true, - "inputs": [], - "name": "exchangeRateStored", + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", "outputs": [ { "internalType": "uint256", @@ -13044,34 +13523,85 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x182df0f5" + "signature": "0x70a08231" }, { - "constant": true, + "constant": false, "inputs": [ { "internalType": "address", - "name": "account", + "name": "owner", "type": "address" } ], - "name": "getAccountSnapshot", + "name": "balanceOfUnderlying", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" - }, + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x3af9e669" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + } + ], + "name": "borrow", + "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" - }, + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xc5ebeaec" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "borrowBalanceCurrent", + "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" - }, + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x17bfdfbc" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "borrowBalanceStored", + "outputs": [ { "internalType": "uint256", "name": "", @@ -13081,12 +13611,12 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0xc37f68e2" + "signature": "0x95dd9193" }, { "constant": true, "inputs": [], - "name": "getCash", + "name": "borrowIndex", "outputs": [ { "internalType": "uint256", @@ -13097,223 +13627,3100 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x3b1d21a2" + "signature": "0xaa5af0fd" + }, + { + "constant": true, + "inputs": [], + "name": "borrowRatePerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xf8f9da28" + }, + { + "constant": true, + "inputs": [], + "name": "comptroller", + "outputs": [ + { + "internalType": "contract ComptrollerInterface", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x5fe3b567" + }, + { + "constant": true, + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x313ce567" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "delegateToImplementation", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x0933c1ed" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "delegateToViewImplementation", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x4487152f" + }, + { + "constant": false, + "inputs": [], + "name": "exchangeRateCurrent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xbd6d894d" + }, + { + "constant": true, + "inputs": [], + "name": "exchangeRateStored", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x182df0f5" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getAccountSnapshot", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xc37f68e2" + }, + { + "constant": true, + "inputs": [], + "name": "getCash", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x3b1d21a2" + }, + { + "constant": true, + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x5c60da1b" + }, + { + "constant": true, + "inputs": [], + "name": "interestRateModel", + "outputs": [ + { + "internalType": "contract InterestRateModel", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xf3fdb15a" + }, + { + "constant": true, + "inputs": [], + "name": "isCToken", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xfe9c44ae" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "contract CTokenInterface", + "name": "cTokenCollateral", + "type": "address" + } + ], + "name": "liquidateBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xf5e3c462" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xa0712d68" + }, + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x06fdde03" + }, + { + "constant": true, + "inputs": [], + "name": "pendingAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x26782247" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "name": "redeem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xdb006a75" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + } + ], + "name": "redeemUnderlying", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x852a12e3" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "name": "repayBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x0e752702" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "name": "repayBorrowBehalf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x2608f818" + }, + { + "constant": true, + "inputs": [], + "name": "reserveFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x173b9904" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "name": "seize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xb2a02ff1" + }, + { + "constant": true, + "inputs": [], + "name": "supplyRatePerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xae9d70b0" + }, + { + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x95d89b41" + }, + { + "constant": true, + "inputs": [], + "name": "totalBorrows", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x47bd3718" + }, + { + "constant": false, + "inputs": [], + "name": "totalBorrowsCurrent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x73acee98" + }, + { + "constant": true, + "inputs": [], + "name": "totalReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x8f840ddd" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x18160ddd" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xa9059cbb" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "src", + "type": "address" + }, + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x23b872dd" + }, + { + "constant": true, + "inputs": [], + "name": "underlying", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x6f307dc3" + } + ], + "cBAT": [ + { + "inputs": [ + { + "internalType": "address", + "name": "underlying_", + "type": "address" + }, + { + "internalType": "contract ComptrollerInterface", + "name": "comptroller_", + "type": "address" + }, + { + "internalType": "contract InterestRateModel", + "name": "interestRateModel_", + "type": "address" + }, + { + "internalType": "uint256", + "name": "initialExchangeRateMantissa_", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name_", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol_", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals_", + "type": "uint8" + }, + { + "internalType": "address payable", + "name": "admin_", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor", + "signature": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "cashPrior", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "interestAccumulated", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "borrowIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" + } + ], + "name": "AccrueInterest", + "type": "event", + "signature": "0x4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc04" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event", + "signature": "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" + } + ], + "name": "Borrow", + "type": "event", + "signature": "0x13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab80" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "error", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "info", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "detail", + "type": "uint256" + } + ], + "name": "Failure", + "type": "event", + "signature": "0x45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "name": "LiquidateBorrow", + "type": "event", + "signature": "0x298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb52" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "mintTokens", + "type": "uint256" + } + ], + "name": "Mint", + "type": "event", + "signature": "0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "NewAdmin", + "type": "event", + "signature": "0xf9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract ComptrollerInterface", + "name": "oldComptroller", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract ComptrollerInterface", + "name": "newComptroller", + "type": "address" + } + ], + "name": "NewComptroller", + "type": "event", + "signature": "0x7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract InterestRateModel", + "name": "oldInterestRateModel", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address" + } + ], + "name": "NewMarketInterestRateModel", + "type": "event", + "signature": "0xedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f926" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldPendingAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newPendingAdmin", + "type": "address" + } + ], + "name": "NewPendingAdmin", + "type": "event", + "signature": "0xca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldReserveFactorMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256" + } + ], + "name": "NewReserveFactor", + "type": "event", + "signature": "0xaaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f821460" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "redeemer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "name": "Redeem", + "type": "event", + "signature": "0xe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" + } + ], + "name": "RepayBorrow", + "type": "event", + "signature": "0x1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "benefactor", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "addAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256" + } + ], + "name": "ReservesAdded", + "type": "event", + "signature": "0xa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc5" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "admin", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "reduceAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256" + } + ], + "name": "ReservesReduced", + "type": "event", + "signature": "0x3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event", + "signature": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef" + }, + { + "constant": false, + "inputs": [], + "name": "_acceptAdmin", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xe9c714f2" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "addAmount", + "type": "uint256" + } + ], + "name": "_addReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x3e941010" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "reduceAmount", + "type": "uint256" + } + ], + "name": "_reduceReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x601a0bf1" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "contract ComptrollerInterface", + "name": "newComptroller", + "type": "address" + } + ], + "name": "_setComptroller", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x4576b5db" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address" + } + ], + "name": "_setInterestRateModel", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xf2b3abbd" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "newPendingAdmin", + "type": "address" + } + ], + "name": "_setPendingAdmin", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xb71d1a0c" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256" + } + ], + "name": "_setReserveFactor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xfca7820b" + }, + { + "constant": true, + "inputs": [], + "name": "accrualBlockNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x6c540baf" + }, + { + "constant": false, + "inputs": [], + "name": "accrueInterest", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xa6afed95" + }, + { + "constant": true, + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xf851a440" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xdd62ed3e" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x095ea7b3" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x70a08231" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOfUnderlying", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x3af9e669" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + } + ], + "name": "borrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xc5ebeaec" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "borrowBalanceCurrent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x17bfdfbc" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "borrowBalanceStored", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x95dd9193" + }, + { + "constant": true, + "inputs": [], + "name": "borrowIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xaa5af0fd" + }, + { + "constant": true, + "inputs": [], + "name": "borrowRatePerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xf8f9da28" + }, + { + "constant": true, + "inputs": [], + "name": "comptroller", + "outputs": [ + { + "internalType": "contract ComptrollerInterface", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x5fe3b567" + }, + { + "constant": true, + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x313ce567" + }, + { + "constant": false, + "inputs": [], + "name": "exchangeRateCurrent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xbd6d894d" + }, + { + "constant": true, + "inputs": [], + "name": "exchangeRateStored", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x182df0f5" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getAccountSnapshot", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xc37f68e2" + }, + { + "constant": true, + "inputs": [], + "name": "getCash", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x3b1d21a2" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "underlying_", + "type": "address" + }, + { + "internalType": "contract ComptrollerInterface", + "name": "comptroller_", + "type": "address" + }, + { + "internalType": "contract InterestRateModel", + "name": "interestRateModel_", + "type": "address" + }, + { + "internalType": "uint256", + "name": "initialExchangeRateMantissa_", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name_", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol_", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals_", + "type": "uint8" + } + ], + "name": "initialize", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x1a31d465" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "contract ComptrollerInterface", + "name": "comptroller_", + "type": "address" + }, + { + "internalType": "contract InterestRateModel", + "name": "interestRateModel_", + "type": "address" + }, + { + "internalType": "uint256", + "name": "initialExchangeRateMantissa_", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name_", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol_", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals_", + "type": "uint8" + } + ], + "name": "initialize", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x99d8c1b4" + }, + { + "constant": true, + "inputs": [], + "name": "interestRateModel", + "outputs": [ + { + "internalType": "contract InterestRateModel", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xf3fdb15a" + }, + { + "constant": true, + "inputs": [], + "name": "isCToken", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xfe9c44ae" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "contract CTokenInterface", + "name": "cTokenCollateral", + "type": "address" + } + ], + "name": "liquidateBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xf5e3c462" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xa0712d68" + }, + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x06fdde03" + }, + { + "constant": true, + "inputs": [], + "name": "pendingAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x26782247" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "name": "redeem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xdb006a75" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + } + ], + "name": "redeemUnderlying", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x852a12e3" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "name": "repayBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x0e752702" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "name": "repayBorrowBehalf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x2608f818" + }, + { + "constant": true, + "inputs": [], + "name": "reserveFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x173b9904" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "name": "seize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xb2a02ff1" + }, + { + "constant": true, + "inputs": [], + "name": "supplyRatePerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xae9d70b0" + }, + { + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x95d89b41" + }, + { + "constant": true, + "inputs": [], + "name": "totalBorrows", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x47bd3718" + }, + { + "constant": false, + "inputs": [], + "name": "totalBorrowsCurrent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x73acee98" + }, + { + "constant": true, + "inputs": [], + "name": "totalReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x8f840ddd" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x18160ddd" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xa9059cbb" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "src", + "type": "address" + }, + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x23b872dd" + }, + { + "constant": true, + "inputs": [], + "name": "underlying", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x6f307dc3" + } + ], + "Base0bps_Slope2000bps": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "baseRatePerYear", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "multiplierPerYear", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor", + "signature": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "baseRatePerBlock", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "multiplierPerBlock", + "type": "uint256" + } + ], + "name": "NewInterestParams", + "type": "event", + "signature": "0xf35fa19c15e9ba782633a5df62a98b20217151addc68e3ff2cd623a48d37ec27" + }, + { + "constant": true, + "inputs": [], + "name": "baseRatePerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xf14039de" + }, + { + "constant": true, + "inputs": [], + "name": "blocksPerYear", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xa385fb96" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "cash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrows", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserves", + "type": "uint256" + } + ], + "name": "getBorrowRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x15f24053" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "cash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrows", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserves", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveFactorMantissa", + "type": "uint256" + } + ], + "name": "getSupplyRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xb8168816" + }, + { + "constant": true, + "inputs": [], + "name": "isInterestRateModel", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x2191f92a" + }, + { + "constant": true, + "inputs": [], + "name": "multiplierPerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x8726bb89" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "cash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrows", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserves", + "type": "uint256" + } + ], + "name": "utilizationRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function", + "signature": "0x6e71e2d8" + } + ], + "BAT": [ + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x06fdde03" + }, + { + "constant": false, + "inputs": [ + { + "name": "_owner", + "type": "address" + }, + { + "name": "value", + "type": "uint256" + } + ], + "name": "allocateTo", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x08bca566" + }, + { + "constant": false, + "inputs": [ + { + "name": "_spender", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x095ea7b3" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x18160ddd" + }, + { + "constant": false, + "inputs": [ + { + "name": "_from", + "type": "address" + }, + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x23b872dd" + }, + { + "constant": true, + "inputs": [], + "name": "decimals", + "outputs": [ + { + "name": "", + "type": "uint8" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x313ce567" + }, + { + "constant": false, + "inputs": [ + { + "name": "_spender", + "type": "address" + }, + { + "name": "_subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseApproval", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x66188463" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x70a08231" + }, + { + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ + { + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x95d89b41" + }, + { + "constant": false, + "inputs": [ + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xa9059cbb" + }, + { + "constant": false, + "inputs": [ + { + "name": "_spender", + "type": "address" + }, + { + "name": "_addedValue", + "type": "uint256" + } + ], + "name": "increaseApproval", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xd73dd623" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + }, + { + "name": "_spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xdd62ed3e" + }, + { + "inputs": [ + { + "name": "_initialAmount", + "type": "uint256" + }, + { + "name": "_tokenName", + "type": "string" + }, + { + "name": "_decimalUnits", + "type": "uint8" + }, + { + "name": "_tokenSymbol", + "type": "string" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor", + "signature": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event", + "signature": "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "from", + "type": "address" + }, + { + "indexed": true, + "name": "to", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event", + "signature": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef" + } + ], + "cErc20Delegate": [ + { + "inputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor", + "signature": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "cashPrior", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "interestAccumulated", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "borrowIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" + } + ], + "name": "AccrueInterest", + "type": "event", + "signature": "0x4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc04" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event", + "signature": "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" + } + ], + "name": "Borrow", + "type": "event", + "signature": "0x13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab80" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "error", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "info", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "detail", + "type": "uint256" + } + ], + "name": "Failure", + "type": "event", + "signature": "0x45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "name": "LiquidateBorrow", + "type": "event", + "signature": "0x298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb52" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "mintTokens", + "type": "uint256" + } + ], + "name": "Mint", + "type": "event", + "signature": "0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "NewAdmin", + "type": "event", + "signature": "0xf9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract ComptrollerInterface", + "name": "oldComptroller", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract ComptrollerInterface", + "name": "newComptroller", + "type": "address" + } + ], + "name": "NewComptroller", + "type": "event", + "signature": "0x7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract InterestRateModel", + "name": "oldInterestRateModel", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address" + } + ], + "name": "NewMarketInterestRateModel", + "type": "event", + "signature": "0xedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f926" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldPendingAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newPendingAdmin", + "type": "address" + } + ], + "name": "NewPendingAdmin", + "type": "event", + "signature": "0xca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldReserveFactorMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256" + } + ], + "name": "NewReserveFactor", + "type": "event", + "signature": "0xaaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f821460" }, { - "constant": false, + "anonymous": false, "inputs": [ { + "indexed": false, "internalType": "address", - "name": "underlying_", - "type": "address" - }, - { - "internalType": "contract ComptrollerInterface", - "name": "comptroller_", - "type": "address" - }, - { - "internalType": "contract InterestRateModel", - "name": "interestRateModel_", + "name": "redeemer", "type": "address" }, { + "indexed": false, "internalType": "uint256", - "name": "initialExchangeRateMantissa_", + "name": "redeemAmount", "type": "uint256" }, { - "internalType": "string", - "name": "name_", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol_", - "type": "string" - }, - { - "internalType": "uint8", - "name": "decimals_", - "type": "uint8" + "indexed": false, + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" } ], - "name": "initialize", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0x1a31d465" + "name": "Redeem", + "type": "event", + "signature": "0xe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929" }, { - "constant": false, + "anonymous": false, "inputs": [ { - "internalType": "contract ComptrollerInterface", - "name": "comptroller_", + "indexed": false, + "internalType": "address", + "name": "payer", "type": "address" }, { - "internalType": "contract InterestRateModel", - "name": "interestRateModel_", + "indexed": false, + "internalType": "address", + "name": "borrower", "type": "address" }, { + "indexed": false, "internalType": "uint256", - "name": "initialExchangeRateMantissa_", + "name": "repayAmount", "type": "uint256" }, { - "internalType": "string", - "name": "name_", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol_", - "type": "string" + "indexed": false, + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256" }, { - "internalType": "uint8", - "name": "decimals_", - "type": "uint8" - } - ], - "name": "initialize", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0x99d8c1b4" - }, - { - "constant": true, - "inputs": [], - "name": "interestRateModel", - "outputs": [ - { - "internalType": "contract InterestRateModel", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0xf3fdb15a" - }, - { - "constant": true, - "inputs": [], - "name": "isCToken", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0xfe9c44ae" + "name": "RepayBorrow", + "type": "event", + "signature": "0x1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1" }, { - "constant": false, + "anonymous": false, "inputs": [ { + "indexed": false, "internalType": "address", - "name": "borrower", + "name": "benefactor", "type": "address" }, { + "indexed": false, "internalType": "uint256", - "name": "repayAmount", + "name": "addAmount", "type": "uint256" }, { - "internalType": "contract CTokenInterface", - "name": "cTokenCollateral", - "type": "address" - } - ], - "name": "liquidateBorrow", - "outputs": [ - { + "indexed": false, "internalType": "uint256", - "name": "", + "name": "newTotalReserves", "type": "uint256" } ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0xf5e3c462" + "name": "ReservesAdded", + "type": "event", + "signature": "0xa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc5" }, { - "constant": false, + "anonymous": false, "inputs": [ { + "indexed": false, + "internalType": "address", + "name": "admin", + "type": "address" + }, + { + "indexed": false, "internalType": "uint256", - "name": "mintAmount", + "name": "reduceAmount", "type": "uint256" - } - ], - "name": "mint", - "outputs": [ + }, { + "indexed": false, "internalType": "uint256", - "name": "", + "name": "newTotalReserves", "type": "uint256" } ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0xa0712d68" + "name": "ReservesReduced", + "type": "event", + "signature": "0x3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e" }, { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ + "anonymous": false, + "inputs": [ { - "internalType": "string", - "name": "", - "type": "string" + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0x06fdde03" + "name": "Transfer", + "type": "event", + "signature": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef" }, { - "constant": true, + "constant": false, "inputs": [], - "name": "pendingAdmin", + "name": "_acceptAdmin", "outputs": [ { - "internalType": "address payable", + "internalType": "uint256", "name": "", - "type": "address" + "type": "uint256" } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0x26782247" + "signature": "0xe9c714f2" }, { "constant": false, "inputs": [ { "internalType": "uint256", - "name": "redeemTokens", + "name": "addAmount", "type": "uint256" } ], - "name": "redeem", + "name": "_addReserves", "outputs": [ { "internalType": "uint256", @@ -13324,40 +16731,34 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xdb006a75" + "signature": "0x3e941010" }, { "constant": false, "inputs": [ { - "internalType": "uint256", - "name": "redeemAmount", - "type": "uint256" - } - ], - "name": "redeemUnderlying", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" + "internalType": "bytes", + "name": "data", + "type": "bytes" } ], + "name": "_becomeImplementation", + "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x852a12e3" + "signature": "0x56e67728" }, { "constant": false, "inputs": [ { "internalType": "uint256", - "name": "repayAmount", + "name": "reduceAmount", "type": "uint256" } ], - "name": "repayBorrow", + "name": "_reduceReserves", "outputs": [ { "internalType": "uint256", @@ -13368,23 +16769,28 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x0e752702" + "signature": "0x601a0bf1" + }, + { + "constant": false, + "inputs": [], + "name": "_resignImplementation", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x153ab505" }, { "constant": false, "inputs": [ { - "internalType": "address", - "name": "borrower", + "internalType": "contract ComptrollerInterface", + "name": "newComptroller", "type": "address" - }, - { - "internalType": "uint256", - "name": "repayAmount", - "type": "uint256" } ], - "name": "repayBorrowBehalf", + "name": "_setComptroller", "outputs": [ { "internalType": "uint256", @@ -13395,12 +16801,18 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x2608f818" + "signature": "0x4576b5db" }, { - "constant": true, - "inputs": [], - "name": "reserveFactorMantissa", + "constant": false, + "inputs": [ + { + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address" + } + ], + "name": "_setInterestRateModel", "outputs": [ { "internalType": "uint256", @@ -13409,30 +16821,20 @@ } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0x173b9904" + "signature": "0xf2b3abbd" }, { "constant": false, "inputs": [ { - "internalType": "address", - "name": "liquidator", - "type": "address" - }, - { - "internalType": "address", - "name": "borrower", + "internalType": "address payable", + "name": "newPendingAdmin", "type": "address" - }, - { - "internalType": "uint256", - "name": "seizeTokens", - "type": "uint256" } ], - "name": "seize", + "name": "_setPendingAdmin", "outputs": [ { "internalType": "uint256", @@ -13443,44 +16845,34 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xb2a02ff1" + "signature": "0xb71d1a0c" }, { - "constant": true, - "inputs": [], - "name": "supplyRatePerBlock", - "outputs": [ + "constant": false, + "inputs": [ { "internalType": "uint256", - "name": "", + "name": "newReserveFactorMantissa", "type": "uint256" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0xae9d70b0" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", + "name": "_setReserveFactor", "outputs": [ { - "internalType": "string", + "internalType": "uint256", "name": "", - "type": "string" + "type": "uint256" } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0x95d89b41" + "signature": "0xfca7820b" }, { "constant": true, "inputs": [], - "name": "totalBorrows", + "name": "accrualBlockNumber", "outputs": [ { "internalType": "uint256", @@ -13491,12 +16883,12 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x47bd3718" + "signature": "0x6c540baf" }, { "constant": false, "inputs": [], - "name": "totalBorrowsCurrent", + "name": "accrueInterest", "outputs": [ { "internalType": "uint256", @@ -13507,28 +16899,39 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x73acee98" + "signature": "0xa6afed95" }, { "constant": true, "inputs": [], - "name": "totalReserves", + "name": "admin", "outputs": [ { - "internalType": "uint256", + "internalType": "address payable", "name": "", - "type": "uint256" + "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x8f840ddd" + "signature": "0xf851a440" }, { "constant": true, - "inputs": [], - "name": "totalSupply", + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", "outputs": [ { "internalType": "uint256", @@ -13539,14 +16942,14 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x18160ddd" + "signature": "0xdd62ed3e" }, { "constant": false, "inputs": [ { "internalType": "address", - "name": "dst", + "name": "spender", "type": "address" }, { @@ -13555,7 +16958,7 @@ "type": "uint256" } ], - "name": "transfer", + "name": "approve", "outputs": [ { "internalType": "bool", @@ -13566,100 +16969,62 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xa9059cbb" + "signature": "0x095ea7b3" }, { - "constant": false, + "constant": true, "inputs": [ { "internalType": "address", - "name": "src", - "type": "address" - }, - { - "internalType": "address", - "name": "dst", + "name": "owner", "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" } ], - "name": "transferFrom", + "name": "balanceOf", "outputs": [ { - "internalType": "bool", + "internalType": "uint256", "name": "", - "type": "bool" + "type": "uint256" } ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0x23b872dd" + "signature": "0x70a08231" }, { - "constant": true, - "inputs": [], - "name": "underlying", - "outputs": [ + "constant": false, + "inputs": [ { "internalType": "address", - "name": "", + "name": "owner", "type": "address" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0x6f307dc3" - } - ], - "Base0bps_Slope2000bps": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "baseRatePerYear", - "type": "uint256" - }, + "name": "balanceOfUnderlying", + "outputs": [ { "internalType": "uint256", - "name": "multiplierPerYear", + "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", - "type": "constructor", - "signature": "constructor" + "type": "function", + "signature": "0x3af9e669" }, { - "anonymous": false, + "constant": false, "inputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "baseRatePerBlock", - "type": "uint256" - }, - { - "indexed": false, "internalType": "uint256", - "name": "multiplierPerBlock", + "name": "borrowAmount", "type": "uint256" } ], - "name": "NewInterestParams", - "type": "event", - "signature": "0xf35fa19c15e9ba782633a5df62a98b20217151addc68e3ff2cd623a48d37ec27" - }, - { - "constant": true, - "inputs": [], - "name": "baseRatePerBlock", + "name": "borrow", "outputs": [ { "internalType": "uint256", @@ -13668,14 +17033,20 @@ } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0xf14039de" + "signature": "0xc5ebeaec" }, { - "constant": true, - "inputs": [], - "name": "blocksPerYear", + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "borrowBalanceCurrent", "outputs": [ { "internalType": "uint256", @@ -13684,30 +17055,20 @@ } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0xa385fb96" + "signature": "0x17bfdfbc" }, { "constant": true, "inputs": [ { - "internalType": "uint256", - "name": "cash", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "borrows", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "reserves", - "type": "uint256" + "internalType": "address", + "name": "account", + "type": "address" } ], - "name": "getBorrowRate", + "name": "borrowBalanceStored", "outputs": [ { "internalType": "uint256", @@ -13718,65 +17079,92 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x15f24053" + "signature": "0x95dd9193" }, { "constant": true, - "inputs": [ - { - "internalType": "uint256", - "name": "cash", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "borrows", - "type": "uint256" - }, + "inputs": [], + "name": "borrowIndex", + "outputs": [ { "internalType": "uint256", - "name": "reserves", + "name": "", "type": "uint256" - }, + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xaa5af0fd" + }, + { + "constant": true, + "inputs": [], + "name": "borrowRatePerBlock", + "outputs": [ { "internalType": "uint256", - "name": "reserveFactorMantissa", + "name": "", "type": "uint256" } ], - "name": "getSupplyRate", + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xf8f9da28" + }, + { + "constant": true, + "inputs": [], + "name": "comptroller", "outputs": [ { - "internalType": "uint256", + "internalType": "contract ComptrollerInterface", "name": "", - "type": "uint256" + "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0xb8168816" + "signature": "0x5fe3b567" }, { "constant": true, "inputs": [], - "name": "isInterestRateModel", + "name": "decimals", "outputs": [ { - "internalType": "bool", + "internalType": "uint8", "name": "", - "type": "bool" + "type": "uint8" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x2191f92a" + "signature": "0x313ce567" + }, + { + "constant": false, + "inputs": [], + "name": "exchangeRateCurrent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xbd6d894d" }, { "constant": true, "inputs": [], - "name": "multiplierPerBlock", + "name": "exchangeRateStored", "outputs": [ { "internalType": "uint256", @@ -13787,28 +17175,49 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x8726bb89" + "signature": "0x182df0f5" }, { "constant": true, "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getAccountSnapshot", + "outputs": [ { "internalType": "uint256", - "name": "cash", + "name": "", "type": "uint256" }, { "internalType": "uint256", - "name": "borrows", + "name": "", "type": "uint256" }, { "internalType": "uint256", - "name": "reserves", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", "type": "uint256" } ], - "name": "utilizationRate", + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xc37f68e2" + }, + { + "constant": true, + "inputs": [], + "name": "getCash", "outputs": [ { "internalType": "uint256", @@ -13817,587 +17226,551 @@ } ], "payable": false, - "stateMutability": "pure", + "stateMutability": "view", "type": "function", - "signature": "0x6e71e2d8" - } - ], - "BAT": [ + "signature": "0x3b1d21a2" + }, { "constant": true, "inputs": [], - "name": "name", + "name": "implementation", "outputs": [ { + "internalType": "address", "name": "", - "type": "string" + "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x06fdde03" + "signature": "0x5c60da1b" }, { "constant": false, "inputs": [ { - "name": "_owner", + "internalType": "address", + "name": "underlying_", "type": "address" }, { - "name": "value", + "internalType": "contract ComptrollerInterface", + "name": "comptroller_", + "type": "address" + }, + { + "internalType": "contract InterestRateModel", + "name": "interestRateModel_", + "type": "address" + }, + { + "internalType": "uint256", + "name": "initialExchangeRateMantissa_", "type": "uint256" + }, + { + "internalType": "string", + "name": "name_", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol_", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals_", + "type": "uint8" } ], - "name": "allocateTo", + "name": "initialize", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x08bca566" + "signature": "0x1a31d465" }, { "constant": false, "inputs": [ { - "name": "_spender", + "internalType": "contract ComptrollerInterface", + "name": "comptroller_", "type": "address" }, { - "name": "_value", + "internalType": "contract InterestRateModel", + "name": "interestRateModel_", + "type": "address" + }, + { + "internalType": "uint256", + "name": "initialExchangeRateMantissa_", "type": "uint256" + }, + { + "internalType": "string", + "name": "name_", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol_", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals_", + "type": "uint8" } ], - "name": "approve", + "name": "initialize", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x99d8c1b4" + }, + { + "constant": true, + "inputs": [], + "name": "interestRateModel", "outputs": [ { + "internalType": "contract InterestRateModel", "name": "", - "type": "bool" + "type": "address" } ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0x095ea7b3" + "signature": "0xf3fdb15a" }, { "constant": true, "inputs": [], - "name": "totalSupply", + "name": "isCToken", "outputs": [ { + "internalType": "bool", "name": "", - "type": "uint256" + "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x18160ddd" + "signature": "0xfe9c44ae" }, { "constant": false, "inputs": [ { - "name": "_from", + "internalType": "address", + "name": "borrower", "type": "address" }, { - "name": "_to", - "type": "address" + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" }, { - "name": "_value", - "type": "uint256" + "internalType": "contract CTokenInterface", + "name": "cTokenCollateral", + "type": "address" } ], - "name": "transferFrom", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0x23b872dd" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", + "name": "liquidateBorrow", "outputs": [ { + "internalType": "uint256", "name": "", - "type": "uint8" + "type": "uint256" } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0x313ce567" + "signature": "0xf5e3c462" }, { "constant": false, "inputs": [ { - "name": "_spender", - "type": "address" - }, - { - "name": "_subtractedValue", + "internalType": "uint256", + "name": "mintAmount", "type": "uint256" } ], - "name": "decreaseApproval", + "name": "mint", "outputs": [ { + "internalType": "uint256", "name": "", - "type": "bool" + "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x66188463" + "signature": "0xa0712d68" }, { "constant": true, - "inputs": [ + "inputs": [], + "name": "name", + "outputs": [ { - "name": "_owner", - "type": "address" + "internalType": "string", + "name": "", + "type": "string" } ], - "name": "balanceOf", + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x06fdde03" + }, + { + "constant": true, + "inputs": [], + "name": "pendingAdmin", "outputs": [ { + "internalType": "address payable", "name": "", - "type": "uint256" + "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x70a08231" + "signature": "0x26782247" }, { - "constant": true, - "inputs": [], - "name": "symbol", + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "name": "redeem", "outputs": [ { + "internalType": "uint256", "name": "", - "type": "string" + "type": "uint256" } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0x95d89b41" + "signature": "0xdb006a75" }, { "constant": false, "inputs": [ { - "name": "_to", - "type": "address" - }, + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + } + ], + "name": "redeemUnderlying", + "outputs": [ { - "name": "_value", + "internalType": "uint256", + "name": "", "type": "uint256" } ], - "name": "transfer", - "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xa9059cbb" + "signature": "0x852a12e3" }, { "constant": false, "inputs": [ { - "name": "_spender", - "type": "address" - }, - { - "name": "_addedValue", + "internalType": "uint256", + "name": "repayAmount", "type": "uint256" } ], - "name": "increaseApproval", + "name": "repayBorrow", "outputs": [ { + "internalType": "uint256", "name": "", - "type": "bool" + "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xd73dd623" + "signature": "0x0e752702" }, { - "constant": true, + "constant": false, "inputs": [ { - "name": "_owner", + "internalType": "address", + "name": "borrower", "type": "address" }, { - "name": "_spender", - "type": "address" + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" } ], - "name": "allowance", + "name": "repayBorrowBehalf", "outputs": [ { + "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0xdd62ed3e" + "signature": "0x2608f818" }, { - "inputs": [ + "constant": true, + "inputs": [], + "name": "reserveFactorMantissa", + "outputs": [ { - "name": "_initialAmount", + "internalType": "uint256", + "name": "", "type": "uint256" - }, - { - "name": "_tokenName", - "type": "string" - }, - { - "name": "_decimalUnits", - "type": "uint8" - }, - { - "name": "_tokenSymbol", - "type": "string" } ], "payable": false, - "stateMutability": "nonpayable", - "type": "constructor", - "signature": "constructor" + "stateMutability": "view", + "type": "function", + "signature": "0x173b9904" }, { - "anonymous": false, + "constant": false, "inputs": [ { - "indexed": true, - "name": "owner", + "internalType": "address", + "name": "liquidator", "type": "address" }, { - "indexed": true, - "name": "spender", + "internalType": "address", + "name": "borrower", "type": "address" }, { - "indexed": false, - "name": "value", + "internalType": "uint256", + "name": "seizeTokens", "type": "uint256" } ], - "name": "Approval", - "type": "event", - "signature": "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, + "name": "seize", + "outputs": [ { - "indexed": false, - "name": "value", + "internalType": "uint256", + "name": "", "type": "uint256" } ], - "name": "Transfer", - "type": "event", - "signature": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef" - } - ], - "cErc20Delegate": [ - { - "inputs": [], "payable": false, "stateMutability": "nonpayable", - "type": "constructor", - "signature": "constructor" + "type": "function", + "signature": "0xb2a02ff1" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "cashPrior", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "interestAccumulated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "borrowIndex", - "type": "uint256" - }, + "constant": true, + "inputs": [], + "name": "supplyRatePerBlock", + "outputs": [ { - "indexed": false, "internalType": "uint256", - "name": "totalBorrows", + "name": "", "type": "uint256" } ], - "name": "AccrueInterest", - "type": "event", - "signature": "0x4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc04" + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xae9d70b0" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "internalType": "string", + "name": "", + "type": "string" } ], - "name": "Approval", - "type": "event", - "signature": "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925" + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x95d89b41" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "borrowAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "accountBorrows", - "type": "uint256" - }, + "constant": true, + "inputs": [], + "name": "totalBorrows", + "outputs": [ { - "indexed": false, "internalType": "uint256", - "name": "totalBorrows", + "name": "", "type": "uint256" } ], - "name": "Borrow", - "type": "event", - "signature": "0x13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab80" + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x47bd3718" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "error", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "info", - "type": "uint256" - }, + "constant": false, + "inputs": [], + "name": "totalBorrowsCurrent", + "outputs": [ { - "indexed": false, "internalType": "uint256", - "name": "detail", + "name": "", "type": "uint256" } ], - "name": "Failure", - "type": "event", - "signature": "0x45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0" + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x73acee98" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "liquidator", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "borrower", - "type": "address" - }, + "constant": true, + "inputs": [], + "name": "totalReserves", + "outputs": [ { - "indexed": false, "internalType": "uint256", - "name": "repayAmount", + "name": "", "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "cTokenCollateral", - "type": "address" - }, + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x8f840ddd" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ { - "indexed": false, "internalType": "uint256", - "name": "seizeTokens", + "name": "", "type": "uint256" } ], - "name": "LiquidateBorrow", - "type": "event", - "signature": "0x298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb52" + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x18160ddd" }, { - "anonymous": false, + "constant": false, "inputs": [ { - "indexed": false, "internalType": "address", - "name": "minter", + "name": "dst", "type": "address" }, { - "indexed": false, "internalType": "uint256", - "name": "mintAmount", + "name": "amount", "type": "uint256" - }, + } + ], + "name": "transfer", + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "mintTokens", - "type": "uint256" + "internalType": "bool", + "name": "", + "type": "bool" } ], - "name": "Mint", - "type": "event", - "signature": "0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f" + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0xa9059cbb" }, { - "anonymous": false, + "constant": false, "inputs": [ { - "indexed": false, "internalType": "address", - "name": "oldAdmin", + "name": "src", "type": "address" }, { - "indexed": false, "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "NewAdmin", - "type": "event", - "signature": "0xf9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "contract ComptrollerInterface", - "name": "oldComptroller", + "name": "dst", "type": "address" }, { - "indexed": false, - "internalType": "contract ComptrollerInterface", - "name": "newComptroller", - "type": "address" + "internalType": "uint256", + "name": "amount", + "type": "uint256" } ], - "name": "NewComptroller", - "type": "event", - "signature": "0x7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "contract InterestRateModel", - "name": "oldInterestRateModel", - "type": "address" - }, + "name": "transferFrom", + "outputs": [ { - "indexed": false, - "internalType": "contract InterestRateModel", - "name": "newInterestRateModel", - "type": "address" + "internalType": "bool", + "name": "", + "type": "bool" } ], - "name": "NewMarketInterestRateModel", - "type": "event", - "signature": "0xedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f926" + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x23b872dd" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldPendingAdmin", - "type": "address" - }, + "constant": true, + "inputs": [], + "name": "underlying", + "outputs": [ { - "indexed": false, "internalType": "address", - "name": "newPendingAdmin", + "name": "", "type": "address" } ], - "name": "NewPendingAdmin", - "type": "event", - "signature": "0xca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9" + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x6f307dc3" + } + ], + "StdComptrollerG1": [ + { + "inputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor", + "signature": "constructor" }, { "anonymous": false, @@ -14405,258 +17778,232 @@ { "indexed": false, "internalType": "uint256", - "name": "oldReserveFactorMantissa", + "name": "error", "type": "uint256" }, { "indexed": false, "internalType": "uint256", - "name": "newReserveFactorMantissa", + "name": "info", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "detail", "type": "uint256" } ], - "name": "NewReserveFactor", + "name": "Failure", "type": "event", - "signature": "0xaaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f821460" + "signature": "0x45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0" }, { "anonymous": false, "inputs": [ { "indexed": false, - "internalType": "address", - "name": "redeemer", + "internalType": "contract CToken", + "name": "cToken", "type": "address" }, { "indexed": false, - "internalType": "uint256", - "name": "redeemAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "redeemTokens", - "type": "uint256" + "internalType": "address", + "name": "account", + "type": "address" } ], - "name": "Redeem", + "name": "MarketEntered", "type": "event", - "signature": "0xe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929" + "signature": "0x3ab23ab0d51cccc0c3085aec51f99228625aa1a922b3a8ca89a26b0f2027a1a5" }, { "anonymous": false, "inputs": [ { "indexed": false, - "internalType": "address", - "name": "payer", + "internalType": "contract CToken", + "name": "cToken", "type": "address" }, { "indexed": false, "internalType": "address", - "name": "borrower", + "name": "account", "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "repayAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "accountBorrows", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "totalBorrows", - "type": "uint256" } ], - "name": "RepayBorrow", + "name": "MarketExited", "type": "event", - "signature": "0x1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1" + "signature": "0xe699a64c18b07ac5b7301aa273f36a2287239eb9501d81950672794afba29a0d" }, { "anonymous": false, "inputs": [ { "indexed": false, - "internalType": "address", - "name": "benefactor", + "internalType": "contract CToken", + "name": "cToken", "type": "address" - }, + } + ], + "name": "MarketListed", + "type": "event", + "signature": "0xcf583bb0c569eb967f806b11601c4cb93c10310485c67add5f8362c2f212321f" + }, + { + "anonymous": false, + "inputs": [ { "indexed": false, "internalType": "uint256", - "name": "addAmount", + "name": "oldCloseFactorMantissa", "type": "uint256" }, { "indexed": false, "internalType": "uint256", - "name": "newTotalReserves", + "name": "newCloseFactorMantissa", "type": "uint256" } ], - "name": "ReservesAdded", + "name": "NewCloseFactor", "type": "event", - "signature": "0xa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc5" + "signature": "0x3b9670cf975d26958e754b57098eaa2ac914d8d2a31b83257997b9f346110fd9" }, { "anonymous": false, "inputs": [ { "indexed": false, - "internalType": "address", - "name": "admin", + "internalType": "contract CToken", + "name": "cToken", "type": "address" }, { "indexed": false, "internalType": "uint256", - "name": "reduceAmount", + "name": "oldCollateralFactorMantissa", "type": "uint256" }, { "indexed": false, "internalType": "uint256", - "name": "newTotalReserves", + "name": "newCollateralFactorMantissa", "type": "uint256" } ], - "name": "ReservesReduced", + "name": "NewCollateralFactor", "type": "event", - "signature": "0x3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e" + "signature": "0x70483e6592cd5182d45ac970e05bc62cdcc90e9d8ef2c2dbe686cf383bcd7fc5" }, { "anonymous": false, "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, { "indexed": false, "internalType": "uint256", - "name": "amount", + "name": "oldLiquidationIncentiveMantissa", "type": "uint256" - } - ], - "name": "Transfer", - "type": "event", - "signature": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef" - }, - { - "constant": false, - "inputs": [], - "name": "_acceptAdmin", - "outputs": [ + }, { + "indexed": false, "internalType": "uint256", - "name": "", + "name": "newLiquidationIncentiveMantissa", "type": "uint256" } ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0xe9c714f2" + "name": "NewLiquidationIncentive", + "type": "event", + "signature": "0xaeba5a6c40a8ac138134bff1aaa65debf25971188a58804bad717f82f0ec1316" }, { - "constant": false, + "anonymous": false, "inputs": [ { + "indexed": false, "internalType": "uint256", - "name": "addAmount", + "name": "oldMaxAssets", "type": "uint256" - } - ], - "name": "_addReserves", - "outputs": [ + }, { + "indexed": false, "internalType": "uint256", - "name": "", + "name": "newMaxAssets", "type": "uint256" } ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0x3e941010" + "name": "NewMaxAssets", + "type": "event", + "signature": "0x7093cf1eb653f749c3ff531d6df7f92764536a7fa0d13530cd26e070780c32ea" }, { - "constant": false, + "anonymous": false, "inputs": [ { - "internalType": "bytes", - "name": "data", - "type": "bytes" + "indexed": false, + "internalType": "contract PriceOracle", + "name": "oldPriceOracle", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract PriceOracle", + "name": "newPriceOracle", + "type": "address" } ], - "name": "_becomeImplementation", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0x56e67728" + "name": "NewPriceOracle", + "type": "event", + "signature": "0xd52b2b9b7e9ee655fcb95d2e5b9e0c9f69e7ef2b8e9d2d0ea78402d576d22e22" }, { "constant": false, "inputs": [ + { + "internalType": "contract Unitroller", + "name": "unitroller", + "type": "address" + }, + { + "internalType": "contract PriceOracle", + "name": "_oracle", + "type": "address" + }, { "internalType": "uint256", - "name": "reduceAmount", + "name": "_closeFactorMantissa", "type": "uint256" - } - ], - "name": "_reduceReserves", - "outputs": [ + }, { "internalType": "uint256", - "name": "", + "name": "_maxAssets", "type": "uint256" + }, + { + "internalType": "bool", + "name": "reinitializing", + "type": "bool" } ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0x601a0bf1" - }, - { - "constant": false, - "inputs": [], - "name": "_resignImplementation", + "name": "_become", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x153ab505" + "signature": "0x32000e00" }, { "constant": false, "inputs": [ { - "internalType": "contract ComptrollerInterface", - "name": "newComptroller", - "type": "address" + "internalType": "uint256", + "name": "newCloseFactorMantissa", + "type": "uint256" } ], - "name": "_setComptroller", + "name": "_setCloseFactor", "outputs": [ { "internalType": "uint256", @@ -14667,40 +18014,23 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x4576b5db" + "signature": "0x317b0b77" }, { "constant": false, "inputs": [ { - "internalType": "contract InterestRateModel", - "name": "newInterestRateModel", + "internalType": "contract CToken", + "name": "cToken", "type": "address" - } - ], - "name": "_setInterestRateModel", - "outputs": [ + }, { "internalType": "uint256", - "name": "", + "name": "newCollateralFactorMantissa", "type": "uint256" } ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0xf2b3abbd" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address payable", - "name": "newPendingAdmin", - "type": "address" - } - ], - "name": "_setPendingAdmin", + "name": "_setCollateralFactor", "outputs": [ { "internalType": "uint256", @@ -14711,18 +18041,18 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xb71d1a0c" + "signature": "0xe4028eee" }, { "constant": false, "inputs": [ { "internalType": "uint256", - "name": "newReserveFactorMantissa", + "name": "newLiquidationIncentiveMantissa", "type": "uint256" } ], - "name": "_setReserveFactor", + "name": "_setLiquidationIncentive", "outputs": [ { "internalType": "uint256", @@ -14733,28 +18063,18 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xfca7820b" + "signature": "0x4fd42e17" }, { - "constant": true, - "inputs": [], - "name": "accrualBlockNumber", - "outputs": [ + "constant": false, + "inputs": [ { "internalType": "uint256", - "name": "", + "name": "newMaxAssets", "type": "uint256" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0x6c540baf" - }, - { - "constant": false, - "inputs": [], - "name": "accrueInterest", + "name": "_setMaxAssets", "outputs": [ { "internalType": "uint256", @@ -14765,39 +18085,18 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xa6afed95" - }, - { - "constant": true, - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address payable", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0xf851a440" + "signature": "0xd9226ced" }, { - "constant": true, + "constant": false, "inputs": [ { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", + "internalType": "contract PriceOracle", + "name": "newOracle", "type": "address" } ], - "name": "allowance", + "name": "_setPriceOracle", "outputs": [ { "internalType": "uint256", @@ -14806,91 +18105,95 @@ } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0xdd62ed3e" + "signature": "0x55ee1fe1" }, { "constant": false, "inputs": [ { - "internalType": "address", - "name": "spender", + "internalType": "contract CToken", + "name": "cToken", "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" } ], - "name": "approve", + "name": "_supportMarket", "outputs": [ { - "internalType": "bool", + "internalType": "uint256", "name": "", - "type": "bool" + "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x095ea7b3" + "signature": "0xa76b3fda" }, { "constant": true, "inputs": [ { "internalType": "address", - "name": "owner", + "name": "", "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" } ], - "name": "balanceOf", + "name": "accountAssets", "outputs": [ { - "internalType": "uint256", + "internalType": "contract CToken", "name": "", - "type": "uint256" + "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x70a08231" + "signature": "0xdce15449" }, { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOfUnderlying", + "constant": true, + "inputs": [], + "name": "admin", "outputs": [ { - "internalType": "uint256", + "internalType": "address", "name": "", - "type": "uint256" + "type": "address" } ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0x3af9e669" + "signature": "0xf851a440" }, { "constant": false, "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, { "internalType": "uint256", "name": "borrowAmount", "type": "uint256" } ], - "name": "borrow", + "name": "borrowAllowed", "outputs": [ { "internalType": "uint256", @@ -14901,29 +18204,33 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xc5ebeaec" + "signature": "0xda3d454c" }, { "constant": false, "inputs": [ { "internalType": "address", - "name": "account", + "name": "cToken", "type": "address" - } - ], - "name": "borrowBalanceCurrent", - "outputs": [ + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, { "internalType": "uint256", - "name": "", + "name": "borrowAmount", "type": "uint256" } ], + "name": "borrowVerify", + "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x17bfdfbc" + "signature": "0x5c778605" }, { "constant": true, @@ -14932,25 +18239,30 @@ "internalType": "address", "name": "account", "type": "address" + }, + { + "internalType": "contract CToken", + "name": "cToken", + "type": "address" } ], - "name": "borrowBalanceStored", + "name": "checkMembership", "outputs": [ { - "internalType": "uint256", + "internalType": "bool", "name": "", - "type": "uint256" + "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x95dd9193" + "signature": "0x929fe9a1" }, { "constant": true, "inputs": [], - "name": "borrowIndex", + "name": "closeFactorMantissa", "outputs": [ { "internalType": "uint256", @@ -14961,76 +18273,56 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0xaa5af0fd" + "signature": "0xe8755446" }, { "constant": true, "inputs": [], - "name": "borrowRatePerBlock", + "name": "comptrollerImplementation", "outputs": [ { - "internalType": "uint256", + "internalType": "address", "name": "", - "type": "uint256" + "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0xf8f9da28" + "signature": "0xbb82aa5e" }, { - "constant": true, - "inputs": [], - "name": "comptroller", - "outputs": [ + "constant": false, + "inputs": [ { - "internalType": "contract ComptrollerInterface", - "name": "", - "type": "address" + "internalType": "address[]", + "name": "cTokens", + "type": "address[]" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0x5fe3b567" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", + "name": "enterMarkets", "outputs": [ { - "internalType": "uint8", + "internalType": "uint256[]", "name": "", - "type": "uint8" + "type": "uint256[]" } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0x313ce567" + "signature": "0xc2998238" }, { "constant": false, - "inputs": [], - "name": "exchangeRateCurrent", - "outputs": [ + "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "internalType": "address", + "name": "cTokenAddress", + "type": "address" } ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0xbd6d894d" - }, - { - "constant": true, - "inputs": [], - "name": "exchangeRateStored", + "name": "exitMarket", "outputs": [ { "internalType": "uint256", @@ -15039,9 +18331,9 @@ } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0x182df0f5" + "signature": "0xede4edd0" }, { "constant": true, @@ -15052,7 +18344,7 @@ "type": "address" } ], - "name": "getAccountSnapshot", + "name": "getAccountLiquidity", "outputs": [ { "internalType": "uint256", @@ -15064,11 +18356,6 @@ "name": "", "type": "uint256" }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, { "internalType": "uint256", "name": "", @@ -15078,179 +18365,245 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0xc37f68e2" + "signature": "0x5ec88c79" }, { "constant": true, - "inputs": [], - "name": "getCash", + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getAssetsIn", "outputs": [ { - "internalType": "uint256", + "internalType": "contract CToken[]", "name": "", - "type": "uint256" + "type": "address[]" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x3b1d21a2" + "signature": "0xabfceffc" }, { "constant": true, "inputs": [], - "name": "implementation", + "name": "isComptroller", "outputs": [ { - "internalType": "address", + "internalType": "bool", "name": "", - "type": "address" + "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x5c60da1b" + "signature": "0x007e3dd2" }, { "constant": false, "inputs": [ { "internalType": "address", - "name": "underlying_", + "name": "cTokenBorrowed", "type": "address" }, { - "internalType": "contract ComptrollerInterface", - "name": "comptroller_", + "internalType": "address", + "name": "cTokenCollateral", "type": "address" }, { - "internalType": "contract InterestRateModel", - "name": "interestRateModel_", + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", "type": "address" }, { "internalType": "uint256", - "name": "initialExchangeRateMantissa_", + "name": "repayAmount", + "type": "uint256" + } + ], + "name": "liquidateBorrowAllowed", + "outputs": [ + { + "internalType": "uint256", + "name": "", "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x5fc7e71e" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrowed", + "type": "address" }, { - "internalType": "string", - "name": "name_", - "type": "string" + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" }, { - "internalType": "string", - "name": "symbol_", - "type": "string" + "internalType": "address", + "name": "liquidator", + "type": "address" }, { - "internalType": "uint8", - "name": "decimals_", - "type": "uint8" + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" } ], - "name": "initialize", + "name": "liquidateBorrowVerify", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x1a31d465" + "signature": "0x47ef3b3b" }, { - "constant": false, + "constant": true, "inputs": [ { - "internalType": "contract ComptrollerInterface", - "name": "comptroller_", + "internalType": "address", + "name": "cTokenBorrowed", "type": "address" }, { - "internalType": "contract InterestRateModel", - "name": "interestRateModel_", + "internalType": "address", + "name": "cTokenCollateral", "type": "address" }, { "internalType": "uint256", - "name": "initialExchangeRateMantissa_", + "name": "repayAmount", + "type": "uint256" + } + ], + "name": "liquidateCalculateSeizeTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", "type": "uint256" }, { - "internalType": "string", - "name": "name_", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol_", - "type": "string" - }, - { - "internalType": "uint8", - "name": "decimals_", - "type": "uint8" + "internalType": "uint256", + "name": "", + "type": "uint256" } ], - "name": "initialize", - "outputs": [], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0x99d8c1b4" + "signature": "0xc488847b" }, { "constant": true, "inputs": [], - "name": "interestRateModel", + "name": "liquidationIncentiveMantissa", "outputs": [ { - "internalType": "contract InterestRateModel", + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x4ada90af" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", "name": "", "type": "address" } ], + "name": "markets", + "outputs": [ + { + "internalType": "bool", + "name": "isListed", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "collateralFactorMantissa", + "type": "uint256" + } + ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0xf3fdb15a" + "signature": "0x8e8f294b" }, { "constant": true, "inputs": [], - "name": "isCToken", + "name": "maxAssets", "outputs": [ { - "internalType": "bool", + "internalType": "uint256", "name": "", - "type": "bool" + "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0xfe9c44ae" + "signature": "0x94b2294b" }, { "constant": false, "inputs": [ { "internalType": "address", - "name": "borrower", + "name": "cToken", "type": "address" }, { - "internalType": "uint256", - "name": "repayAmount", - "type": "uint256" + "internalType": "address", + "name": "minter", + "type": "address" }, { - "internalType": "contract CTokenInterface", - "name": "cTokenCollateral", - "type": "address" + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" } ], - "name": "liquidateBorrow", + "name": "mintAllowed", "outputs": [ { "internalType": "uint256", @@ -15261,45 +18614,54 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xf5e3c462" + "signature": "0x4ef4c3e1" }, { "constant": false, "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "minter", + "type": "address" + }, { "internalType": "uint256", "name": "mintAmount", "type": "uint256" - } - ], - "name": "mint", - "outputs": [ + }, { "internalType": "uint256", - "name": "", + "name": "mintTokens", "type": "uint256" } ], + "name": "mintVerify", + "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xa0712d68" + "signature": "0x41c728b9" }, { "constant": true, "inputs": [], - "name": "name", + "name": "oracle", "outputs": [ { - "internalType": "string", + "internalType": "contract PriceOracle", "name": "", - "type": "string" + "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x06fdde03" + "signature": "0x7dc0d1d0" }, { "constant": true, @@ -15307,7 +18669,7 @@ "name": "pendingAdmin", "outputs": [ { - "internalType": "address payable", + "internalType": "address", "name": "", "type": "address" } @@ -15317,16 +18679,42 @@ "type": "function", "signature": "0x26782247" }, + { + "constant": true, + "inputs": [], + "name": "pendingComptrollerImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xdcfbc0c7" + }, { "constant": false, "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "redeemer", + "type": "address" + }, { "internalType": "uint256", "name": "redeemTokens", "type": "uint256" } ], - "name": "redeem", + "name": "redeemAllowed", "outputs": [ { "internalType": "uint256", @@ -15337,40 +18725,64 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xdb006a75" + "signature": "0xeabe7d91" }, { "constant": false, "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "redeemer", + "type": "address" + }, { "internalType": "uint256", "name": "redeemAmount", "type": "uint256" - } - ], - "name": "redeemUnderlying", - "outputs": [ + }, { "internalType": "uint256", - "name": "", + "name": "redeemTokens", "type": "uint256" } ], + "name": "redeemVerify", + "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x852a12e3" + "signature": "0x51dff989" }, { "constant": false, "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, { "internalType": "uint256", "name": "repayAmount", "type": "uint256" } ], - "name": "repayBorrow", + "name": "repayBorrowAllowed", "outputs": [ { "internalType": "uint256", @@ -15381,11 +18793,21 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x0e752702" + "signature": "0x24008a62" }, { "constant": false, "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "payer", + "type": "address" + }, { "internalType": "address", "name": "borrower", @@ -15395,9 +18817,50 @@ "internalType": "uint256", "name": "repayAmount", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowerIndex", + "type": "uint256" } ], - "name": "repayBorrowBehalf", + "name": "repayBorrowVerify", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x1ededc91" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenBorrowed", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "name": "seizeAllowed", "outputs": [ { "internalType": "uint256", @@ -15408,44 +18871,69 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x2608f818" + "signature": "0xd02f7351" }, { - "constant": true, - "inputs": [], - "name": "reserveFactorMantissa", - "outputs": [ + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenBorrowed", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, { "internalType": "uint256", - "name": "", + "name": "seizeTokens", "type": "uint256" } ], + "name": "seizeVerify", + "outputs": [], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0x173b9904" + "signature": "0x6d35bf91" }, { "constant": false, "inputs": [ { "internalType": "address", - "name": "liquidator", + "name": "cToken", "type": "address" }, { "internalType": "address", - "name": "borrower", + "name": "src", + "type": "address" + }, + { + "internalType": "address", + "name": "dst", "type": "address" }, { "internalType": "uint256", - "name": "seizeTokens", + "name": "transferTokens", "type": "uint256" } ], - "name": "seize", + "name": "transferAllowed", "outputs": [ { "internalType": "uint256", @@ -15456,187 +18944,173 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xb2a02ff1" + "signature": "0xbdcdc258" }, { - "constant": true, - "inputs": [], - "name": "supplyRatePerBlock", - "outputs": [ + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "src", + "type": "address" + }, + { + "internalType": "address", + "name": "dst", + "type": "address" + }, { "internalType": "uint256", - "name": "", + "name": "transferTokens", "type": "uint256" } ], + "name": "transferVerify", + "outputs": [], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0xae9d70b0" - }, + "signature": "0x6a56947e" + } + ], + "cETH": [ { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ + "inputs": [ + { + "internalType": "contract ComptrollerInterface", + "name": "comptroller_", + "type": "address" + }, + { + "internalType": "contract InterestRateModel", + "name": "interestRateModel_", + "type": "address" + }, + { + "internalType": "uint256", + "name": "initialExchangeRateMantissa_", + "type": "uint256" + }, { "internalType": "string", - "name": "", + "name": "name_", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol_", "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals_", + "type": "uint8" + }, + { + "internalType": "address payable", + "name": "admin_", + "type": "address" } ], "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0x95d89b41" + "stateMutability": "nonpayable", + "type": "constructor", + "signature": "constructor" }, { - "constant": true, - "inputs": [], - "name": "totalBorrows", - "outputs": [ + "anonymous": false, + "inputs": [ { + "indexed": false, "internalType": "uint256", - "name": "", + "name": "cashPrior", "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0x47bd3718" - }, - { - "constant": false, - "inputs": [], - "name": "totalBorrowsCurrent", - "outputs": [ + }, { + "indexed": false, "internalType": "uint256", - "name": "", + "name": "interestAccumulated", "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0x73acee98" - }, - { - "constant": true, - "inputs": [], - "name": "totalReserves", - "outputs": [ + }, { + "indexed": false, "internalType": "uint256", - "name": "", + "name": "borrowIndex", "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0x8f840ddd" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ + }, { + "indexed": false, "internalType": "uint256", - "name": "", + "name": "totalBorrows", "type": "uint256" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0x18160ddd" + "name": "AccrueInterest", + "type": "event", + "signature": "0x4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc04" }, { - "constant": false, + "anonymous": false, "inputs": [ { + "indexed": true, "internalType": "address", - "name": "dst", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", "type": "address" }, { + "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0xa9059cbb" + "name": "Approval", + "type": "event", + "signature": "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925" }, { - "constant": false, + "anonymous": false, "inputs": [ { + "indexed": false, "internalType": "address", - "name": "src", + "name": "borrower", "type": "address" }, { - "internalType": "address", - "name": "dst", - "type": "address" + "indexed": false, + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" }, { + "indexed": false, "internalType": "uint256", - "name": "amount", + "name": "accountBorrows", "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0x23b872dd" - }, - { - "constant": true, - "inputs": [], - "name": "underlying", - "outputs": [ + }, { - "internalType": "address", - "name": "", - "type": "address" + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0x6f307dc3" - } - ], - "StdComptrollerG1": [ - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor", - "signature": "constructor" + "name": "Borrow", + "type": "event", + "signature": "0x13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab80" }, { "anonymous": false, @@ -15669,120 +19143,144 @@ "inputs": [ { "indexed": false, - "internalType": "contract CToken", - "name": "cToken", + "internalType": "address", + "name": "liquidator", "type": "address" }, { "indexed": false, "internalType": "address", - "name": "account", + "name": "borrower", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "cTokenCollateral", "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" } ], - "name": "MarketEntered", + "name": "LiquidateBorrow", "type": "event", - "signature": "0x3ab23ab0d51cccc0c3085aec51f99228625aa1a922b3a8ca89a26b0f2027a1a5" + "signature": "0x298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb52" }, { "anonymous": false, "inputs": [ { "indexed": false, - "internalType": "contract CToken", - "name": "cToken", + "internalType": "address", + "name": "minter", "type": "address" }, { "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "mintTokens", + "type": "uint256" } ], - "name": "MarketExited", + "name": "Mint", "type": "event", - "signature": "0xe699a64c18b07ac5b7301aa273f36a2287239eb9501d81950672794afba29a0d" + "signature": "0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f" }, { "anonymous": false, "inputs": [ { "indexed": false, - "internalType": "contract CToken", - "name": "cToken", + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", "type": "address" } ], - "name": "MarketListed", + "name": "NewAdmin", "type": "event", - "signature": "0xcf583bb0c569eb967f806b11601c4cb93c10310485c67add5f8362c2f212321f" + "signature": "0xf9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc" }, { "anonymous": false, "inputs": [ { "indexed": false, - "internalType": "uint256", - "name": "oldCloseFactorMantissa", - "type": "uint256" + "internalType": "contract ComptrollerInterface", + "name": "oldComptroller", + "type": "address" }, { "indexed": false, - "internalType": "uint256", - "name": "newCloseFactorMantissa", - "type": "uint256" + "internalType": "contract ComptrollerInterface", + "name": "newComptroller", + "type": "address" } ], - "name": "NewCloseFactor", + "name": "NewComptroller", "type": "event", - "signature": "0x3b9670cf975d26958e754b57098eaa2ac914d8d2a31b83257997b9f346110fd9" + "signature": "0x7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d" }, { "anonymous": false, "inputs": [ { "indexed": false, - "internalType": "contract CToken", - "name": "cToken", + "internalType": "contract InterestRateModel", + "name": "oldInterestRateModel", "type": "address" }, { "indexed": false, - "internalType": "uint256", - "name": "oldCollateralFactorMantissa", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newCollateralFactorMantissa", - "type": "uint256" + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address" } ], - "name": "NewCollateralFactor", + "name": "NewMarketInterestRateModel", "type": "event", - "signature": "0x70483e6592cd5182d45ac970e05bc62cdcc90e9d8ef2c2dbe686cf383bcd7fc5" + "signature": "0xedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f926" }, { "anonymous": false, "inputs": [ { "indexed": false, - "internalType": "uint256", - "name": "oldLiquidationIncentiveMantissa", - "type": "uint256" + "internalType": "address", + "name": "oldPendingAdmin", + "type": "address" }, { "indexed": false, - "internalType": "uint256", - "name": "newLiquidationIncentiveMantissa", - "type": "uint256" + "internalType": "address", + "name": "newPendingAdmin", + "type": "address" } ], - "name": "NewLiquidationIncentive", + "name": "NewPendingAdmin", "type": "event", - "signature": "0xaeba5a6c40a8ac138134bff1aaa65debf25971188a58804bad717f82f0ec1316" + "signature": "0xca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9" }, { "anonymous": false, @@ -15790,135 +19288,171 @@ { "indexed": false, "internalType": "uint256", - "name": "oldMaxAssets", + "name": "oldReserveFactorMantissa", "type": "uint256" }, { "indexed": false, "internalType": "uint256", - "name": "newMaxAssets", + "name": "newReserveFactorMantissa", "type": "uint256" } ], - "name": "NewMaxAssets", + "name": "NewReserveFactor", "type": "event", - "signature": "0x7093cf1eb653f749c3ff531d6df7f92764536a7fa0d13530cd26e070780c32ea" + "signature": "0xaaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f821460" }, { "anonymous": false, "inputs": [ { "indexed": false, - "internalType": "contract PriceOracle", - "name": "oldPriceOracle", + "internalType": "address", + "name": "redeemer", "type": "address" }, { "indexed": false, - "internalType": "contract PriceOracle", - "name": "newPriceOracle", - "type": "address" + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" } ], - "name": "NewPriceOracle", + "name": "Redeem", "type": "event", - "signature": "0xd52b2b9b7e9ee655fcb95d2e5b9e0c9f69e7ef2b8e9d2d0ea78402d576d22e22" + "signature": "0xe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929" }, { - "constant": false, + "anonymous": false, "inputs": [ { - "internalType": "contract Unitroller", - "name": "unitroller", + "indexed": false, + "internalType": "address", + "name": "payer", "type": "address" }, { - "internalType": "contract PriceOracle", - "name": "_oracle", + "indexed": false, + "internalType": "address", + "name": "borrower", "type": "address" }, { + "indexed": false, "internalType": "uint256", - "name": "_closeFactorMantissa", + "name": "repayAmount", "type": "uint256" }, { + "indexed": false, "internalType": "uint256", - "name": "_maxAssets", + "name": "accountBorrows", "type": "uint256" }, { - "internalType": "bool", - "name": "reinitializing", - "type": "bool" + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" } ], - "name": "_become", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0x32000e00" + "name": "RepayBorrow", + "type": "event", + "signature": "0x1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1" }, { - "constant": false, + "anonymous": false, "inputs": [ { + "indexed": false, + "internalType": "address", + "name": "benefactor", + "type": "address" + }, + { + "indexed": false, "internalType": "uint256", - "name": "newCloseFactorMantissa", + "name": "addAmount", "type": "uint256" - } - ], - "name": "_setCloseFactor", - "outputs": [ + }, { + "indexed": false, "internalType": "uint256", - "name": "", + "name": "newTotalReserves", "type": "uint256" } ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0x317b0b77" + "name": "ReservesAdded", + "type": "event", + "signature": "0xa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc5" }, { - "constant": false, + "anonymous": false, "inputs": [ { - "internalType": "contract CToken", - "name": "cToken", + "indexed": false, + "internalType": "address", + "name": "admin", "type": "address" }, { + "indexed": false, "internalType": "uint256", - "name": "newCollateralFactorMantissa", + "name": "reduceAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newTotalReserves", "type": "uint256" } ], - "name": "_setCollateralFactor", - "outputs": [ + "name": "ReservesReduced", + "type": "event", + "signature": "0x3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, { + "indexed": false, "internalType": "uint256", - "name": "", + "name": "amount", "type": "uint256" } ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0xe4028eee" + "name": "Transfer", + "type": "event", + "signature": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef" + }, + { + "payable": true, + "stateMutability": "payable", + "type": "fallback" }, { "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "newLiquidationIncentiveMantissa", - "type": "uint256" - } - ], - "name": "_setLiquidationIncentive", + "inputs": [], + "name": "_acceptAdmin", "outputs": [ { "internalType": "uint256", @@ -15929,18 +19463,18 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x4fd42e17" + "signature": "0xe9c714f2" }, { "constant": false, "inputs": [ { "internalType": "uint256", - "name": "newMaxAssets", + "name": "reduceAmount", "type": "uint256" } ], - "name": "_setMaxAssets", + "name": "_reduceReserves", "outputs": [ { "internalType": "uint256", @@ -15951,18 +19485,18 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xd9226ced" + "signature": "0x601a0bf1" }, { "constant": false, "inputs": [ { - "internalType": "contract PriceOracle", - "name": "newOracle", + "internalType": "contract ComptrollerInterface", + "name": "newComptroller", "type": "address" } ], - "name": "_setPriceOracle", + "name": "_setComptroller", "outputs": [ { "internalType": "uint256", @@ -15973,18 +19507,18 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x55ee1fe1" + "signature": "0x4576b5db" }, { "constant": false, "inputs": [ { - "internalType": "contract CToken", - "name": "cToken", + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", "type": "address" } ], - "name": "_supportMarket", + "name": "_setInterestRateModel", "outputs": [ { "internalType": "uint256", @@ -15995,71 +19529,40 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xa76b3fda" + "signature": "0xf2b3abbd" }, { - "constant": true, + "constant": false, "inputs": [ { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "accountAssets", - "outputs": [ - { - "internalType": "contract CToken", - "name": "", + "internalType": "address payable", + "name": "newPendingAdmin", "type": "address" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0xdce15449" - }, - { - "constant": true, - "inputs": [], - "name": "admin", + "name": "_setPendingAdmin", "outputs": [ { - "internalType": "address", + "internalType": "uint256", "name": "", - "type": "address" + "type": "uint256" } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0xf851a440" + "signature": "0xb71d1a0c" }, { "constant": false, "inputs": [ - { - "internalType": "address", - "name": "cToken", - "type": "address" - }, - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, { "internalType": "uint256", - "name": "borrowAmount", + "name": "newReserveFactorMantissa", "type": "uint256" } ], - "name": "borrowAllowed", + "name": "_setReserveFactor", "outputs": [ { "internalType": "uint256", @@ -16070,65 +19573,28 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xda3d454c" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "cToken", - "type": "address" - }, - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "uint256", - "name": "borrowAmount", - "type": "uint256" - } - ], - "name": "borrowVerify", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0x5c778605" + "signature": "0xfca7820b" }, { "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "contract CToken", - "name": "cToken", - "type": "address" - } - ], - "name": "checkMembership", + "inputs": [], + "name": "accrualBlockNumber", "outputs": [ { - "internalType": "bool", + "internalType": "uint256", "name": "", - "type": "bool" + "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x929fe9a1" + "signature": "0x6c540baf" }, { - "constant": true, + "constant": false, "inputs": [], - "name": "closeFactorMantissa", + "name": "accrueInterest", "outputs": [ { "internalType": "uint256", @@ -16137,17 +19603,17 @@ } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0xe8755446" + "signature": "0xa6afed95" }, { "constant": true, "inputs": [], - "name": "comptrollerImplementation", + "name": "admin", "outputs": [ { - "internalType": "address", + "internalType": "address payable", "name": "", "type": "address" } @@ -16155,73 +19621,73 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0xbb82aa5e" + "signature": "0xf851a440" }, { - "constant": false, + "constant": true, "inputs": [ { - "internalType": "address[]", - "name": "cTokens", - "type": "address[]" + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" } ], - "name": "enterMarkets", + "name": "allowance", "outputs": [ { - "internalType": "uint256[]", + "internalType": "uint256", "name": "", - "type": "uint256[]" + "type": "uint256" } ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0xc2998238" + "signature": "0xdd62ed3e" }, { "constant": false, "inputs": [ { "internalType": "address", - "name": "cTokenAddress", + "name": "spender", "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" } ], - "name": "exitMarket", + "name": "approve", "outputs": [ { - "internalType": "uint256", + "internalType": "bool", "name": "", - "type": "uint256" + "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xede4edd0" + "signature": "0x095ea7b3" }, { "constant": true, "inputs": [ { "internalType": "address", - "name": "account", + "name": "owner", "type": "address" } ], - "name": "getAccountLiquidity", + "name": "balanceOf", "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, { "internalType": "uint256", "name": "", @@ -16231,76 +19697,40 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x5ec88c79" + "signature": "0x70a08231" }, { - "constant": true, + "constant": false, "inputs": [ { "internalType": "address", - "name": "account", + "name": "owner", "type": "address" } ], - "name": "getAssetsIn", - "outputs": [ - { - "internalType": "contract CToken[]", - "name": "", - "type": "address[]" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0xabfceffc" - }, - { - "constant": true, - "inputs": [], - "name": "isComptroller", + "name": "balanceOfUnderlying", "outputs": [ { - "internalType": "bool", + "internalType": "uint256", "name": "", - "type": "bool" + "type": "uint256" } ], - "payable": false, - "stateMutability": "view", - "type": "function", - "signature": "0x007e3dd2" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "cTokenBorrowed", - "type": "address" - }, - { - "internalType": "address", - "name": "cTokenCollateral", - "type": "address" - }, - { - "internalType": "address", - "name": "liquidator", - "type": "address" - }, - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x3af9e669" + }, + { + "constant": false, + "inputs": [ { "internalType": "uint256", - "name": "repayAmount", + "name": "borrowAmount", "type": "uint256" } ], - "name": "liquidateBorrowAllowed", + "name": "borrow", "outputs": [ { "internalType": "uint256", @@ -16311,75 +19741,57 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x5fc7e71e" + "signature": "0xc5ebeaec" }, { "constant": false, "inputs": [ { "internalType": "address", - "name": "cTokenBorrowed", - "type": "address" - }, - { - "internalType": "address", - "name": "cTokenCollateral", - "type": "address" - }, - { - "internalType": "address", - "name": "liquidator", - "type": "address" - }, - { - "internalType": "address", - "name": "borrower", + "name": "account", "type": "address" - }, - { - "internalType": "uint256", - "name": "repayAmount", - "type": "uint256" - }, + } + ], + "name": "borrowBalanceCurrent", + "outputs": [ { "internalType": "uint256", - "name": "seizeTokens", + "name": "", "type": "uint256" } ], - "name": "liquidateBorrowVerify", - "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x47ef3b3b" + "signature": "0x17bfdfbc" }, { "constant": true, "inputs": [ { "internalType": "address", - "name": "cTokenBorrowed", - "type": "address" - }, - { - "internalType": "address", - "name": "cTokenCollateral", + "name": "account", "type": "address" - }, - { - "internalType": "uint256", - "name": "repayAmount", - "type": "uint256" } ], - "name": "liquidateCalculateSeizeTokens", + "name": "borrowBalanceStored", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" - }, + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x95dd9193" + }, + { + "constant": true, + "inputs": [], + "name": "borrowIndex", + "outputs": [ { "internalType": "uint256", "name": "", @@ -16389,12 +19801,12 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0xc488847b" + "signature": "0xaa5af0fd" }, { "constant": true, "inputs": [], - "name": "liquidationIncentiveMantissa", + "name": "borrowRatePerBlock", "outputs": [ { "internalType": "uint256", @@ -16405,39 +19817,60 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x4ada90af" + "signature": "0xf8f9da28" }, { "constant": true, - "inputs": [ + "inputs": [], + "name": "comptroller", + "outputs": [ { - "internalType": "address", + "internalType": "contract ComptrollerInterface", "name": "", "type": "address" } ], - "name": "markets", + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x5fe3b567" + }, + { + "constant": true, + "inputs": [], + "name": "decimals", "outputs": [ { - "internalType": "bool", - "name": "isListed", - "type": "bool" - }, + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x313ce567" + }, + { + "constant": false, + "inputs": [], + "name": "exchangeRateCurrent", + "outputs": [ { "internalType": "uint256", - "name": "collateralFactorMantissa", + "name": "", "type": "uint256" } ], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function", - "signature": "0x8e8f294b" + "signature": "0xbd6d894d" }, { "constant": true, "inputs": [], - "name": "maxAssets", + "name": "exchangeRateStored", "outputs": [ { "internalType": "uint256", @@ -16448,28 +19881,49 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x94b2294b" + "signature": "0x182df0f5" }, { - "constant": false, + "constant": true, "inputs": [ { "internalType": "address", - "name": "cToken", + "name": "account", "type": "address" + } + ], + "name": "getAccountSnapshot", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" }, { - "internalType": "address", - "name": "minter", - "type": "address" + "internalType": "uint256", + "name": "", + "type": "uint256" }, { "internalType": "uint256", - "name": "mintAmount", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", "type": "uint256" } ], - "name": "mintAllowed", + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xc37f68e2" + }, + { + "constant": true, + "inputs": [], + "name": "getCash", "outputs": [ { "internalType": "uint256", @@ -16478,48 +19932,58 @@ } ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0x4ef4c3e1" + "signature": "0x3b1d21a2" }, { "constant": false, "inputs": [ { - "internalType": "address", - "name": "cToken", + "internalType": "contract ComptrollerInterface", + "name": "comptroller_", "type": "address" }, { - "internalType": "address", - "name": "minter", + "internalType": "contract InterestRateModel", + "name": "interestRateModel_", "type": "address" }, { "internalType": "uint256", - "name": "mintAmount", + "name": "initialExchangeRateMantissa_", "type": "uint256" }, { - "internalType": "uint256", - "name": "mintTokens", - "type": "uint256" + "internalType": "string", + "name": "name_", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol_", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals_", + "type": "uint8" } ], - "name": "mintVerify", + "name": "initialize", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x41c728b9" + "signature": "0x99d8c1b4" }, { "constant": true, "inputs": [], - "name": "oracle", + "name": "interestRateModel", "outputs": [ { - "internalType": "contract PriceOracle", + "internalType": "contract InterestRateModel", "name": "", "type": "address" } @@ -16527,31 +19991,78 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x7dc0d1d0" + "signature": "0xf3fdb15a" }, { "constant": true, "inputs": [], - "name": "pendingAdmin", + "name": "isCToken", "outputs": [ { - "internalType": "address", + "internalType": "bool", "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xfe9c44ae" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "contract CToken", + "name": "cTokenCollateral", "type": "address" } ], + "name": "liquidateBorrow", + "outputs": [], + "payable": true, + "stateMutability": "payable", + "type": "function", + "signature": "0xaae40a2a" + }, + { + "constant": false, + "inputs": [], + "name": "mint", + "outputs": [], + "payable": true, + "stateMutability": "payable", + "type": "function", + "signature": "0x1249c58b" + }, + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], "payable": false, "stateMutability": "view", "type": "function", - "signature": "0x26782247" + "signature": "0x06fdde03" }, { "constant": true, "inputs": [], - "name": "pendingComptrollerImplementation", + "name": "pendingAdmin", "outputs": [ { - "internalType": "address", + "internalType": "address payable", "name": "", "type": "address" } @@ -16559,28 +20070,18 @@ "payable": false, "stateMutability": "view", "type": "function", - "signature": "0xdcfbc0c7" + "signature": "0x26782247" }, { "constant": false, "inputs": [ - { - "internalType": "address", - "name": "cToken", - "type": "address" - }, - { - "internalType": "address", - "name": "redeemer", - "type": "address" - }, { "internalType": "uint256", "name": "redeemTokens", "type": "uint256" } ], - "name": "redeemAllowed", + "name": "redeem", "outputs": [ { "internalType": "uint256", @@ -16591,64 +20092,60 @@ "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0xeabe7d91" + "signature": "0xdb006a75" }, { "constant": false, "inputs": [ - { - "internalType": "address", - "name": "cToken", - "type": "address" - }, - { - "internalType": "address", - "name": "redeemer", - "type": "address" - }, { "internalType": "uint256", "name": "redeemAmount", "type": "uint256" - }, + } + ], + "name": "redeemUnderlying", + "outputs": [ { "internalType": "uint256", - "name": "redeemTokens", + "name": "", "type": "uint256" } ], - "name": "redeemVerify", - "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x51dff989" + "signature": "0x852a12e3" + }, + { + "constant": false, + "inputs": [], + "name": "repayBorrow", + "outputs": [], + "payable": true, + "stateMutability": "payable", + "type": "function", + "signature": "0x4e4d9fea" }, { "constant": false, "inputs": [ - { - "internalType": "address", - "name": "cToken", - "type": "address" - }, - { - "internalType": "address", - "name": "payer", - "type": "address" - }, { "internalType": "address", "name": "borrower", "type": "address" - }, - { - "internalType": "uint256", - "name": "repayAmount", - "type": "uint256" } ], - "name": "repayBorrowAllowed", + "name": "repayBorrowBehalf", + "outputs": [], + "payable": true, + "stateMutability": "payable", + "type": "function", + "signature": "0xe5974619" + }, + { + "constant": true, + "inputs": [], + "name": "reserveFactorMantissa", "outputs": [ { "internalType": "uint256", @@ -16657,21 +20154,16 @@ } ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0x24008a62" + "signature": "0x173b9904" }, { "constant": false, "inputs": [ { "internalType": "address", - "name": "cToken", - "type": "address" - }, - { - "internalType": "address", - "name": "payer", + "name": "liquidator", "type": "address" }, { @@ -16681,52 +20173,59 @@ }, { "internalType": "uint256", - "name": "repayAmount", + "name": "seizeTokens", "type": "uint256" - }, + } + ], + "name": "seize", + "outputs": [ { "internalType": "uint256", - "name": "borrowerIndex", + "name": "", "type": "uint256" } ], - "name": "repayBorrowVerify", - "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x1ededc91" + "signature": "0xb2a02ff1" }, { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "cTokenCollateral", - "type": "address" - }, - { - "internalType": "address", - "name": "cTokenBorrowed", - "type": "address" - }, - { - "internalType": "address", - "name": "liquidator", - "type": "address" - }, - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, + "constant": true, + "inputs": [], + "name": "supplyRatePerBlock", + "outputs": [ { "internalType": "uint256", - "name": "seizeTokens", + "name": "", "type": "uint256" } ], - "name": "seizeAllowed", + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0xae9d70b0" + }, + { + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x95d89b41" + }, + { + "constant": true, + "inputs": [], + "name": "totalBorrows", "outputs": [ { "internalType": "uint256", @@ -16735,71 +20234,46 @@ } ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0xd02f7351" + "signature": "0x47bd3718" }, { "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "cTokenCollateral", - "type": "address" - }, - { - "internalType": "address", - "name": "cTokenBorrowed", - "type": "address" - }, - { - "internalType": "address", - "name": "liquidator", - "type": "address" - }, - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, + "inputs": [], + "name": "totalBorrowsCurrent", + "outputs": [ { "internalType": "uint256", - "name": "seizeTokens", + "name": "", "type": "uint256" } ], - "name": "seizeVerify", - "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x6d35bf91" + "signature": "0x73acee98" }, { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "cToken", - "type": "address" - }, - { - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "internalType": "address", - "name": "dst", - "type": "address" - }, + "constant": true, + "inputs": [], + "name": "totalReserves", + "outputs": [ { "internalType": "uint256", - "name": "transferTokens", + "name": "", "type": "uint256" } ], - "name": "transferAllowed", + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x8f840ddd" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", "outputs": [ { "internalType": "uint256", @@ -16808,23 +20282,13 @@ } ], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function", - "signature": "0xbdcdc258" + "signature": "0x18160ddd" }, { "constant": false, "inputs": [ - { - "internalType": "address", - "name": "cToken", - "type": "address" - }, - { - "internalType": "address", - "name": "src", - "type": "address" - }, { "internalType": "address", "name": "dst", @@ -16832,59 +20296,61 @@ }, { "internalType": "uint256", - "name": "transferTokens", + "name": "amount", "type": "uint256" } ], - "name": "transferVerify", - "outputs": [], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], "payable": false, "stateMutability": "nonpayable", "type": "function", - "signature": "0x6a56947e" - } - ], - "cETH": [ + "signature": "0xa9059cbb" + }, { + "constant": false, "inputs": [ { - "internalType": "contract ComptrollerInterface", - "name": "comptroller_", + "internalType": "address", + "name": "src", "type": "address" }, { - "internalType": "contract InterestRateModel", - "name": "interestRateModel_", + "internalType": "address", + "name": "dst", "type": "address" }, { "internalType": "uint256", - "name": "initialExchangeRateMantissa_", + "name": "amount", "type": "uint256" - }, - { - "internalType": "string", - "name": "name_", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol_", - "type": "string" - }, - { - "internalType": "uint8", - "name": "decimals_", - "type": "uint8" - }, + } + ], + "name": "transferFrom", + "outputs": [ { - "internalType": "address payable", - "name": "admin_", - "type": "address" + "internalType": "bool", + "name": "", + "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", + "type": "function", + "signature": "0x23b872dd" + } + ], + "cUsdtDelegate": [ + { + "inputs": [], + "payable": false, + "stateMutability": "nonpayable", "type": "constructor", "signature": "constructor" }, @@ -17310,11 +20776,6 @@ "type": "event", "signature": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef" }, - { - "payable": true, - "stateMutability": "payable", - "type": "fallback" - }, { "constant": false, "inputs": [], @@ -17331,6 +20792,44 @@ "type": "function", "signature": "0xe9c714f2" }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "addAmount", + "type": "uint256" + } + ], + "name": "_addReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x3e941010" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "_becomeImplementation", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x56e67728" + }, { "constant": false, "inputs": [ @@ -17353,6 +20852,16 @@ "type": "function", "signature": "0x601a0bf1" }, + { + "constant": false, + "inputs": [], + "name": "_resignImplementation", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x153ab505" + }, { "constant": false, "inputs": [ @@ -17802,6 +21311,68 @@ "type": "function", "signature": "0x3b1d21a2" }, + { + "constant": true, + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x5c60da1b" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "underlying_", + "type": "address" + }, + { + "internalType": "contract ComptrollerInterface", + "name": "comptroller_", + "type": "address" + }, + { + "internalType": "contract InterestRateModel", + "name": "interestRateModel_", + "type": "address" + }, + { + "internalType": "uint256", + "name": "initialExchangeRateMantissa_", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name_", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol_", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals_", + "type": "uint8" + } + ], + "name": "initialize", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function", + "signature": "0x1a31d465" + }, { "constant": false, "inputs": [ @@ -17884,27 +21455,50 @@ "type": "address" }, { - "internalType": "contract CToken", + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "contract CTokenInterface", "name": "cTokenCollateral", "type": "address" } ], "name": "liquidateBorrow", - "outputs": [], - "payable": true, - "stateMutability": "payable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", "type": "function", - "signature": "0xaae40a2a" + "signature": "0xf5e3c462" }, { "constant": false, - "inputs": [], + "inputs": [ + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], "name": "mint", - "outputs": [], - "payable": true, - "stateMutability": "payable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", "type": "function", - "signature": "0x1249c58b" + "signature": "0xa0712d68" }, { "constant": true, @@ -17984,13 +21578,25 @@ }, { "constant": false, - "inputs": [], + "inputs": [ + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], "name": "repayBorrow", - "outputs": [], - "payable": true, - "stateMutability": "payable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", "type": "function", - "signature": "0x4e4d9fea" + "signature": "0x0e752702" }, { "constant": false, @@ -17999,14 +21605,25 @@ "internalType": "address", "name": "borrower", "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" } ], "name": "repayBorrowBehalf", - "outputs": [], - "payable": true, - "stateMutability": "payable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", "type": "function", - "signature": "0xe5974619" + "signature": "0x2608f818" }, { "constant": true, @@ -18210,6 +21827,22 @@ "stateMutability": "nonpayable", "type": "function", "signature": "0x23b872dd" + }, + { + "constant": true, + "inputs": [], + "name": "underlying", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function", + "signature": "0x6f307dc3" } ], "Base500bps_Slope1200bps": [ diff --git a/networks/ropsten.json b/networks/ropsten.json index ef25f8032..8931c5f68 100644 --- a/networks/ropsten.json +++ b/networks/ropsten.json @@ -4,22 +4,26 @@ "cTBTC": "0xB40d042a65Dd413Ae0fd85bECF8D722e16bC46F1", "cUSDC": "0x20572e4c090f15667cF7378e16FaD2eA0e2f3EfF", "PriceOracle": "0x9B8FBeF10F8c2E5c88a522DB2Ba6A1929D568699", - "PriceOracleProxy": "0x6d61f13f1F68d00A8477d73091b882c26c910417", + "PriceOracleProxy": "0x6600A2079f724F9dA3eCe619aE400E1ef16fC284", "Maximillion": "0xE77Ce01B692FcF66E2F632e518b9449D18D582d8", + "Base200bps_Slope2000bps_Jump20000bps_Kink90": "0x16909BA697215BB9c5c78f7CffB885c5Ebc8A7Cb", "GovernorAlpha": "0xc5BFEd3Bb38a3C4078d4f130F57Ca4c560551d45", "cDAI": "0x6CE27497A64fFFb5517AA4aeE908b1E7EB63B9fF", "CompoundLens": "0x65D9E5eE0cfC8c8bCE5787792755132f91FDFf9f", "DAI": "0xB5E5D0F8C0cbA267CD3D7035d6AdC8eBA7Df7Cdd", "StdComptroller": "0x70cBa46d2e933030E2f274AE58c951C800548AeF", "Unitroller": "0xe03718b458a2E912141CF3fC8daB648362ee7463", + "USDT": "0x6EE856Ae55B6E1A249f04cd3b947141bc146273c", "Comptroller": "0xe03718b458a2E912141CF3fC8daB648362ee7463", "Comp": "0x1Fe16De955718CFAb7A44605458AB023838C2793", + "cUSDT": "0xb6f7F1901ffbCbadF9cD9831a032395105Bc3142", "cBAT": "0xA253295eC2157B8b69C44b2cb35360016DAa25b1", "Base0bps_Slope2000bps": "0xC04B0d3107736C32e19F1c62b2aF67BE61d63a05", "BAT": "0x9636246bf34E688c6652Af544418B38eB51D2c43", - "cErc20Delegate": "0xCEC4a43eBB02f9B80916F1c718338169d6d5C1F0", + "cErc20Delegate": "0x6fDfAe3B375Cff058C0b398c592eF9f4ce7be5cc", "StdComptrollerG1": "0xA4d7E82dA57339020cbB3cA2B59D173AcDCa3504", "cETH": "0x1d70B01A2C3e3B2e56FcdcEfe50d5c5d70109a5D", + "cUsdtDelegate": "0xb67Dd51402e3c7d86D198d6573a3a5Aa36533111", "Base500bps_Slope1200bps": "0xD87Ba7A50B2E7E660f678A895E4B72E7CB4CCd9C", "cSAI": "0xCCaF265E7492c0d9b7C2f0018bf6382Ba7f0148D", "Timelock": "0x18646F4a178404b1c986390Ac808236D37229A11", @@ -38,8 +42,9 @@ "cTBTC": 7308359, "cUSDC": 7308350, "PriceOracle": 7309390, - "PriceOracleProxy": 7309420, + "PriceOracleProxy": 7757071, "Maximillion": 5970773, + "Base200bps_Slope2000bps_Jump20000bps_Kink90": 7757064, "GovernorAlpha": 7404122, "cDAI": 7308357, "CompoundLens": 7647526, @@ -47,12 +52,14 @@ "StdComptroller": 7308325, "Unitroller": 7308316, "Comp": 7404113, + "cUSDT": 7757068, "cBAT": 7308342, "Base0bps_Slope2000bps": 7308334, "BAT": 5970749, - "cErc20Delegate": 7308354, + "cErc20Delegate": 7723237, "StdComptrollerG1": 7308318, "cETH": 7308348, + "cUsdtDelegate": 7757066, "Base500bps_Slope1200bps": 7308331, "cSAI": 7308344, "Timelock": 7209019, @@ -75,7 +82,8 @@ "cUSDC": "0x20572e4c090f15667cF7378e16FaD2eA0e2f3EfF", "cSAI": "0xCCaF265E7492c0d9b7C2f0018bf6382Ba7f0148D", "cDAI": "0x6CE27497A64fFFb5517AA4aeE908b1E7EB63B9fF", - "address": "0x6d61f13f1F68d00A8477d73091b882c26c910417" + "cUSDT": "0xb6f7F1901ffbCbadF9cD9831a032395105Bc3142", + "address": "0x6600A2079f724F9dA3eCe619aE400E1ef16fC284" }, "Maximillion": { "description": "Maximillion", @@ -126,8 +134,9 @@ "cTBTC": "0x000000000000000000000000083f652051b9cdbf65735f98d83cc329725aa957000000000000000000000000e03718b458a2e912141cf3fc8dab648362ee7463000000000000000000000000c04b0d3107736c32e19f1c62b2af67be61d63a05000000000000000000000000000000000000000006765c793fa10079d0000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000008000000000000000000000000513c1ff435eccedd0fda5edd2ad5e5461f0e8726000000000000000000000000cec4a43ebb02f9b80916f1c718338169d6d5c1f000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000001f436f6d706f756e642054727573746c65737320426974636f696e20f09f9388000000000000000000000000000000000000000000000000000000000000000005635442544300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", "cUSDC": "0x0000000000000000000000008a9447df1fb47209d36204e6d56767a33bf20f9f000000000000000000000000e03718b458a2e912141cf3fc8dab648362ee7463000000000000000000000000c04b0d3107736c32e19f1c62b2af67be61d63a050000000000000000000000000000000000000000000000000000b5e620f48000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000008000000000000000000000000513c1ff435eccedd0fda5edd2ad5e5461f0e87260000000000000000000000000000000000000000000000000000000000000016436f6d706f756e642055534420436f696e20f09f93880000000000000000000000000000000000000000000000000000000000000000000000000000000000056355534443000000000000000000000000000000000000000000000000000000", "PriceOracle": "0x", - "PriceOracleProxy": "0x000000000000000000000000e03718b458a2e912141cf3fc8dab648362ee74630000000000000000000000009b8fbef10f8c2e5c88a522db2ba6a1929d5686990000000000000000000000001d70b01a2c3e3b2e56fcdcefe50d5c5d70109a5d00000000000000000000000020572e4c090f15667cf7378e16fad2ea0e2f3eff000000000000000000000000ccaf265e7492c0d9b7c2f0018bf6382ba7f0148d0000000000000000000000006ce27497a64fffb5517aa4aee908b1e7eb63b9ff", + "PriceOracleProxy": "0x000000000000000000000000513c1ff435eccedd0fda5edd2ad5e5461f0e87260000000000000000000000009b8fbef10f8c2e5c88a522db2ba6a1929d5686990000000000000000000000001d70b01a2c3e3b2e56fcdcefe50d5c5d70109a5d00000000000000000000000020572e4c090f15667cf7378e16fad2ea0e2f3eff000000000000000000000000ccaf265e7492c0d9b7c2f0018bf6382ba7f0148d0000000000000000000000006ce27497a64fffb5517aa4aee908b1e7eb63b9ff000000000000000000000000b6f7f1901ffbcbadf9cd9831a032395105bc3142", "Maximillion": "0x00000000000000000000000042a628e0c5f3767930097b34b08dcf77e78e4f2b", + "Base200bps_Slope2000bps_Jump20000bps_Kink90": "0x00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000002c68af0bb1400000000000000000000000000000000000000000000000000001bc16d674ec800000000000000000000000000000000000000000000000000000c7d713b49da0000", "GovernorAlpha": "0x00000000000000000000000018646f4a178404b1c986390ac808236d37229a110000000000000000000000001Fe16De955718CFAb7A44605458AB023838C2793000000000000000000000000513c1ff435eccedd0fda5edd2ad5e5461f0e8726", "cDAI": "0x000000000000000000000000b5e5d0f8c0cba267cd3d7035d6adc8eba7df7cdd000000000000000000000000e03718b458a2e912141cf3fc8dab648362ee7463000000000000000000000000d87ba7a50b2e7e660f678a895e4b72e7cb4ccd9c000000000000000000000000000000000000000000a56fa5b99019a5c8000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000008000000000000000000000000513c1ff435eccedd0fda5edd2ad5e5461f0e8726000000000000000000000000cec4a43ebb02f9b80916f1c718338169d6d5c1f000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000021436f6d706f756e64204d756c7469436f6c6c61746572616c2044414920f09f9388000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004634441490000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", "CompoundLens": "0x", @@ -135,12 +144,14 @@ "StdComptroller": "0x", "Unitroller": "0x", "Comp": "0x000000000000000000000000513c1ff435eccedd0fda5edd2ad5e5461f0e8726", + "cUSDT": "0x0000000000000000000000006ee856ae55b6e1a249f04cd3b947141bc146273c000000000000000000000000e03718b458a2e912141cf3fc8dab648362ee746300000000000000000000000016909ba697215bb9c5c78f7cffb885c5ebc8a7cb0000000000000000000000000000000000000000000000000000b5e620f4800000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000800000000000000000000000018646f4a178404b1c986390ac808236d37229a11000000000000000000000000b67dd51402e3c7d86d198d6573a3a5aa3653311100000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000d436f6d706f756e642055534454000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005635553445400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", "cBAT": "0x0000000000000000000000009636246bf34e688c6652af544418b38eb51d2c43000000000000000000000000e03718b458a2e912141cf3fc8dab648362ee746300000000000000000000000043479626a968a65230db7fc6b375d5de003e367c000000000000000000000000000000000000000000a56fa5b99019a5c8000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000008000000000000000000000000513c1ff435eccedd0fda5edd2ad5e5461f0e87260000000000000000000000000000000000000000000000000000000000000023436f6d706f756e6420426173696320417474656e74696f6e20546f6b656e20f09f9388000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046342415400000000000000000000000000000000000000000000000000000000", "Base0bps_Slope2000bps": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c68af0bb140000", "BAT": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000015426173696320417474656e74696f6e20546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000034241540000000000000000000000000000000000000000000000000000000000", "cErc20Delegate": "0x", "StdComptrollerG1": "0x", "cETH": "0x000000000000000000000000e03718b458a2e912141cf3fc8dab648362ee7463000000000000000000000000c04b0d3107736c32e19f1c62b2af67be61d63a05000000000000000000000000000000000000000000a56fa5b99019a5c800000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000008000000000000000000000000513c1ff435eccedd0fda5edd2ad5e5461f0e87260000000000000000000000000000000000000000000000000000000000000013436f6d706f756e6420457468657220f09f93880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046345544800000000000000000000000000000000000000000000000000000000", + "cUsdtDelegate": "0x", "Base500bps_Slope1200bps": "0x00000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000001aa535d3d0c0000", "cSAI": "0x0000000000000000000000006f964c8c8c31b89d553ffdb30ef8f667cfbd0b9f000000000000000000000000e03718b458a2e912141cf3fc8dab648362ee7463000000000000000000000000d87ba7a50b2e7e660f678a895e4b72e7cb4ccd9c000000000000000000000000000000000000000000a56fa5b99019a5c8000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000008000000000000000000000000513c1ff435eccedd0fda5edd2ad5e5461f0e87260000000000000000000000000000000000000000000000000000000000000011436f6d706f756e642053414920f09f938800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046353414900000000000000000000000000000000000000000000000000000000", "Timelock": "0x000000000000000000000000513c1ff435eccedd0fda5edd2ad5e5461f0e87260000000000000000000000000000000000000000000000000000000000000078", @@ -200,6 +211,14 @@ "contract": "FaucetToken", "address": "0xB5E5D0F8C0cbA267CD3D7035d6AdC8eBA7Df7Cdd" }, + "USDT": { + "description": "ExistingTether", + "name": "USDT", + "symbol": "USDT", + "contract": "TetherInterface", + "decimals": 6, + "address": "0x6EE856Ae55B6E1A249f04cd3b947141bc146273c" + }, "COMP": { "contract": "Comp", "symbol": "COMP", @@ -207,6 +226,16 @@ "decimals": 18, "address": "0x1Fe16De955718CFAb7A44605458AB023838C2793" }, + "cUSDT": { + "name": "Compound USDT", + "symbol": "cUSDT", + "decimals": 8, + "underlying": "0x6EE856Ae55B6E1A249f04cd3b947141bc146273c", + "contract": "CErc20Delegator", + "initial_exchange_rate_mantissa": "200000000000000", + "admin": "0x18646F4a178404b1c986390Ac808236D37229A11", + "address": "0xb6f7F1901ffbCbadF9cD9831a032395105Bc3142" + }, "cBAT": { "name": "Compound Basic Attention Token 📈", "symbol": "cBAT", @@ -318,7 +347,12 @@ }, "CTokenDelegate": { "cErc20Delegate": { - "address": "0xCEC4a43eBB02f9B80916F1c718338169d6d5C1F0", + "address": "0x6fDfAe3B375Cff058C0b398c592eF9f4ce7be5cc", + "contract": "CErc20Delegate", + "description": "Standard CErc20 Delegate" + }, + "cUsdtDelegate": { + "address": "0xb67Dd51402e3c7d86D198d6573a3a5Aa36533111", "contract": "CErc20Delegate", "description": "Standard CErc20 Delegate" } @@ -354,6 +388,16 @@ "admin": "0x513c1Ff435ECCEdD0fDA5edD2Ad5E5461F0E8726", "address": "0x6CE27497A64fFFb5517AA4aeE908b1E7EB63B9fF" }, + "cUSDT": { + "name": "Compound USDT", + "symbol": "cUSDT", + "decimals": 8, + "underlying": "0x6EE856Ae55B6E1A249f04cd3b947141bc146273c", + "contract": "CErc20Delegator", + "initial_exchange_rate_mantissa": "200000000000000", + "admin": "0x18646F4a178404b1c986390Ac808236D37229A11", + "address": "0xb6f7F1901ffbCbadF9cD9831a032395105Bc3142" + }, "cBAT": { "name": "Compound Basic Attention Token 📈", "symbol": "cBAT", @@ -439,6 +483,16 @@ "base": "20000000000000000", "slope": "300000000000000000", "address": "0x43479626A968a65230Db7fc6b375D5de003E367C" + }, + "Base200bps_Slope2000bps_Jump20000bps_Kink90": { + "name": "Base200bps_Slope2000bps_Jump20000bps_Kink90", + "contract": "JumpRateModel", + "description": "JumpRateModel baseRate=20000000000000000 multiplier=200000000000000000 jump=2000000000000000000 kink=900000000000000000", + "base": "20000000000000000", + "slope": "200000000000000000", + "jump": "2000000000000000000", + "kink": "900000000000000000", + "address": "0x16909BA697215BB9c5c78f7CffB885c5Ebc8A7Cb" } } } \ No newline at end of file diff --git a/package.json b/package.json index e333f59b4..3d3821da6 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "deploy": "./scenario/script/repl -s ./scenario/scen/deploy.scen", "lint": "./script/lint", "repl": "./scenario/script/repl", + "profile": "yarn test tests/gasProfiler.js", "test": "./script/test", "test:prepare": "NO_RUN=true ./script/test" }, @@ -24,7 +25,7 @@ "solparse": "^2.2.8" }, "dependencies": { - "eth-saddle": "0.1.17" + "eth-saddle": "^0.1.17" }, "resolutions": { "scrypt.js": "https://registry.npmjs.org/@compound-finance/ethereumjs-wallet/-/ethereumjs-wallet-0.6.3.tgz", diff --git a/scenario/package.json b/scenario/package.json index bc0ec9776..3d2360a25 100644 --- a/scenario/package.json +++ b/scenario/package.json @@ -21,7 +21,7 @@ }, "dependencies": { "bignumber.js": "8.0.1", - "eth-saddle": "0.1.10", + "eth-saddle": "^0.1.17", "ethers": "^4.0.0-beta.1", "immutable": "^4.0.0-rc.12", "truffle-flattener": "^1.3.0", diff --git a/scenario/src/Builder/Erc20Builder.ts b/scenario/src/Builder/Erc20Builder.ts index d6b139d57..4ccfad1ae 100644 --- a/scenario/src/Builder/Erc20Builder.ts +++ b/scenario/src/Builder/Erc20Builder.ts @@ -20,7 +20,7 @@ import {storeAndSaveContract} from '../Networks'; import {getContract, getTestContract} from '../Contract'; import {encodeABI} from '../Utils'; -const ExistingToken = getContract("FullErc20Interface"); +const ExistingToken = getContract("EIP20Interface"); const TetherInterface = getContract("TetherInterface"); const FaucetTokenHarness = getContract("FaucetToken"); diff --git a/scenario/src/Builder/InterestRateModelBuilder.ts b/scenario/src/Builder/InterestRateModelBuilder.ts index 94822d5b1..68316397d 100644 --- a/scenario/src/Builder/InterestRateModelBuilder.ts +++ b/scenario/src/Builder/InterestRateModelBuilder.ts @@ -83,7 +83,7 @@ export async function buildInterestRateModel(world: World, from: string, event: #### JumpRateModel * "JumpRateModel name: baseRate: multiplier: jump: kink:" - The Jump interest rate - * E.g. "InterestRateModel Deploy JumpRateModel MyInterestRateModel 0.05 0.2 200 0.90" - 5% base rate and 20% utilization multiplier and 200% multiplier at 90% utilization + * E.g. "InterestRateModel Deploy JumpRateModel MyInterestRateModel 0.05 0.2 2 0.90" - 5% base rate and 20% utilization multiplier and 200% multiplier at 90% utilization `, "JumpRateModel", [ diff --git a/scenario/src/Builder/PriceOracleProxyBuilder.ts b/scenario/src/Builder/PriceOracleProxyBuilder.ts index e83797167..5807371ba 100644 --- a/scenario/src/Builder/PriceOracleProxyBuilder.ts +++ b/scenario/src/Builder/PriceOracleProxyBuilder.ts @@ -22,11 +22,11 @@ export interface PriceOracleProxyData { export async function buildPriceOracleProxy(world: World, from: string, event: Event): Promise<{world: World, priceOracleProxy: PriceOracleProxy, invokation: Invokation}> { const fetchers = [ - new Fetcher<{guardian: AddressV, priceOracle: AddressV, cETH: AddressV, cUSDC: AddressV, cSAI: AddressV, cDAI: AddressV}, PriceOracleProxyData>(` + new Fetcher<{guardian: AddressV, priceOracle: AddressV, cETH: AddressV, cUSDC: AddressV, cSAI: AddressV, cDAI: AddressV, cUSDT: AddressV}, PriceOracleProxyData>(` #### Price Oracle Proxy - * "Deploy " - The Price Oracle which proxies to a backing oracle - * E.g. "PriceOracleProxy Deploy (Unitroller Address) (PriceOracle Address) cETH cUSDC cSAI cDAI" + * "Deploy " - The Price Oracle which proxies to a backing oracle + * E.g. "PriceOracleProxy Deploy Admin (PriceOracle Address) cETH cUSDC cSAI cDAI cUSDT" `, "PriceOracleProxy", [ @@ -35,16 +35,18 @@ export async function buildPriceOracleProxy(world: World, from: string, event: E new Arg("cETH", getAddressV), new Arg("cUSDC", getAddressV), new Arg("cSAI", getAddressV), - new Arg("cDAI", getAddressV) + new Arg("cDAI", getAddressV), + new Arg("cUSDT", getAddressV) ], - async (world, {guardian, priceOracle, cETH, cUSDC, cSAI, cDAI}) => { + async (world, {guardian, priceOracle, cETH, cUSDC, cSAI, cDAI, cUSDT}) => { return { - invokation: await PriceOracleProxyContract.deploy(world, from, [guardian.val, priceOracle.val, cETH.val, cUSDC.val, cSAI.val, cDAI.val]), + invokation: await PriceOracleProxyContract.deploy(world, from, [guardian.val, priceOracle.val, cETH.val, cUSDC.val, cSAI.val, cDAI.val, cUSDT.val]), description: "Price Oracle Proxy", cETH: cETH.val, cUSDC: cUSDC.val, cSAI: cSAI.val, - cDAI: cDAI.val + cDAI: cDAI.val, + cUSDT: cUSDT.val }; }, {catchall: true} diff --git a/scenario/src/Contract/InterestRateModel.ts b/scenario/src/Contract/InterestRateModel.ts index a9936eed3..afb6f2db3 100644 --- a/scenario/src/Contract/InterestRateModel.ts +++ b/scenario/src/Contract/InterestRateModel.ts @@ -3,7 +3,7 @@ import {Callable, Sendable} from '../Invokation'; import {encodedNumber} from '../Encoding'; interface InterestRateModelMethods { - getBorrowRate(cash: encodedNumber, borrows: encodedNumber, reserves: encodedNumber): Callable<{0: number}> + getBorrowRate(cash: encodedNumber, borrows: encodedNumber, reserves: encodedNumber): Callable } export interface InterestRateModel extends Contract { diff --git a/scenario/src/CoreEvent.ts b/scenario/src/CoreEvent.ts index c31c00b14..75e57a3c6 100644 --- a/scenario/src/CoreEvent.ts +++ b/scenario/src/CoreEvent.ts @@ -285,7 +285,7 @@ export const commands: (View | ((world: World) => Promise>))[] = [new Arg('networkVal', getStringV)], async (world, { networkVal }) => { const network = networkVal.val; - if (world.basePath && (network === 'mainnet' || network === 'kovan' || network === 'goerli' || network === 'rinkeby')) { + if (world.basePath && (network === 'mainnet' || network === 'kovan' || network === 'goerli' || network === 'rinkeby' || network == 'ropsten')) { let newWorld = world.set('network', network); let contractInfo; [newWorld, contractInfo] = await loadContracts(newWorld); diff --git a/scenario/src/CoreValue.ts b/scenario/src/CoreValue.ts index 62ce4ccb6..8d420eba3 100644 --- a/scenario/src/CoreValue.ts +++ b/scenario/src/CoreValue.ts @@ -732,6 +732,21 @@ const fetchers = [ return new NumberV(getCurrentTimestamp()); } ), + new Fetcher<{}, NumberV>( + ` + #### BlockTimestamp + + * "BlockTimestamp" - Returns the current block's timestamp + * E.g. "BlockTimestamp" + `, + 'BlockTimestamp', + [], + async (world, {}) => { + const {result: blockNumber}: any = await sendRPC(world, 'eth_blockNumber', []); + const {result: block}: any = await sendRPC(world, 'eth_getBlockByNumber', [blockNumber, false]); + return new NumberV(parseInt(block.timestamp, 16)); + } + ), new Fetcher<{}, StringV>( ` #### Network diff --git a/scenario/src/Repl.ts b/scenario/src/Repl.ts index 7c7736d1e..2752ee017 100644 --- a/scenario/src/Repl.ts +++ b/scenario/src/Repl.ts @@ -30,7 +30,7 @@ const basePath = process.env.proj_root || process.cwd(); const baseScenarioPath = path.join(basePath, 'spec', 'scenario'); const baseNetworksPath = path.join(basePath, 'networks'); -const TOTAL_GAS = 5000000; +const TOTAL_GAS = 8000000; function questionPromise(rl): Promise { return new Promise((resolve, reject) => { diff --git a/scenario/src/Value/InterestRateModelValue.ts b/scenario/src/Value/InterestRateModelValue.ts index bbe75e197..e4361d27b 100644 --- a/scenario/src/Value/InterestRateModelValue.ts +++ b/scenario/src/Value/InterestRateModelValue.ts @@ -2,7 +2,8 @@ import {Event} from '../Event'; import {World} from '../World'; import {InterestRateModel} from '../Contract/InterestRateModel'; import { - getAddressV + getAddressV, + getNumberV } from '../CoreValue'; import { AddressV, @@ -15,12 +16,16 @@ export async function getInterestRateModelAddress(world: World, interestRateMode return new AddressV(interestRateModel._address); } +export async function getBorrowRate(world: World, interestRateModel: InterestRateModel, cash: NumberV, borrows: NumberV, reserves: NumberV): Promise { + return new NumberV(await interestRateModel.methods.getBorrowRate(cash.encode(), borrows.encode(), reserves.encode()).call(), 1.0e18 / 2102400); +} + export function interestRateModelFetchers() { return [ new Fetcher<{interestRateModel: InterestRateModel}, AddressV>(` #### Address - * " Address" - Gets the address of the global price oracle + * " Address" - Gets the address of the interest rate model * E.g. "InterestRateModel MyInterestRateModel Address" `, "Address", @@ -29,6 +34,23 @@ export function interestRateModelFetchers() { ], (world, {interestRateModel}) => getInterestRateModelAddress(world, interestRateModel), {namePos: 1} + ), + + new Fetcher<{interestRateModel: InterestRateModel, cash: NumberV, borrows: NumberV, reserves: NumberV}, NumberV>(` + #### BorrowRate + + * " BorrowRate" - Gets the borrow rate of the interest rate model + * E.g. "InterestRateModel MyInterestRateModel BorrowRate 0 10 0" + `, + "BorrowRate", + [ + new Arg("interestRateModel", getInterestRateModel), + new Arg("cash", getNumberV), + new Arg("borrows", getNumberV), + new Arg("reserves", getNumberV) + ], + (world, {interestRateModel, cash, borrows, reserves}) => getBorrowRate(world, interestRateModel, cash, borrows, reserves), + {namePos: 1} ) ]; } diff --git a/scenario/yarn.lock b/scenario/yarn.lock index f7aa9b4f3..de5c01205 100644 --- a/scenario/yarn.lock +++ b/scenario/yarn.lock @@ -692,6 +692,16 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" +"@jest/types@^25.3.0": + version "25.3.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.3.0.tgz#88f94b277a1d028fd7117bc1f74451e0fc2131e7" + integrity sha512-UkaDNewdqXAmCDbN2GlUM6amDKS78eCqiw/UmF5nE0mmLTd6moJkiZJML/X52Ke3LH7Swhw883IRXq8o9nWjVw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^15.0.0" + chalk "^3.0.0" + "@ledgerhq/devices@^4.78.0": version "4.78.0" resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-4.78.0.tgz#149b572f0616096e2bd5eb14ce14d0061c432be6" @@ -761,6 +771,27 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-4.72.0.tgz#43df23af013ad1135407e5cf33ca6e4c4c7708d5" integrity sha512-o+TYF8vBcyySRsb2kqBDv/KMeme8a2nwWoG+lAWzbDmWfb2/MrVWYCVYDYvjXdSoI/Cujqy1i0gIDrkdxa9chA== +"@nodelib/fs.scandir@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" + integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== + dependencies: + "@nodelib/fs.stat" "2.0.3" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" + integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" + integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== + dependencies: + "@nodelib/fs.scandir" "2.1.3" + fastq "^1.6.0" + "@resolver-engine/core@^0.2.1": version "0.2.1" resolved "https://registry.yarnpkg.com/@resolver-engine/core/-/core-0.2.1.tgz#0d71803f6d3b8cb2e9ed481a1bf0ca5f5256d0c0" @@ -854,6 +885,11 @@ dependencies: "@types/node" "*" +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + "@types/ethereum-protocol@*": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/ethereum-protocol/-/ethereum-protocol-1.0.0.tgz#416e3827d5fdfa4658b0045b35a008747871b271" @@ -967,6 +1003,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yargs@^15.0.0": + version "15.0.4" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.4.tgz#7e5d0f8ca25e9d5849f2ea443cf7c402decd8299" + integrity sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg== + dependencies: + "@types/yargs-parser" "*" + "@web3-js/scrypt-shim@^0.1.0": version "0.1.0" resolved "https://registry.yarnpkg.com/@web3-js/scrypt-shim/-/scrypt-shim-0.1.0.tgz#0bf7529ab6788311d3e07586f7d89107c3bea2cc" @@ -1290,6 +1333,11 @@ ansi-regex@^4.0.0, ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -1302,6 +1350,14 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + ansi-wrap@0.1.0, ansi-wrap@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" @@ -2322,7 +2378,7 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@~3.0.2: +braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -2689,6 +2745,14 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + check-error@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" @@ -2875,11 +2939,23 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + color-support@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" @@ -3416,6 +3492,11 @@ diff-sequences@^24.9.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== +diff-sequences@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" + integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== + diff@3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" @@ -3916,10 +3997,10 @@ eth-query@^2.0.2, eth-query@^2.1.0, eth-query@^2.1.2: json-rpc-random-id "^1.0.0" xtend "^4.0.1" -eth-saddle@0.1.10: - version "0.1.10" - resolved "https://registry.yarnpkg.com/eth-saddle/-/eth-saddle-0.1.10.tgz#b51cb72029d1505b101f4bd0ff8dabccde1d9fd9" - integrity sha512-VGhIzXv0M4GpQsW5EVj734AZmn7TNYCrqvK8LIq9ozMI/xGHIxxp/Mt0TZwdxQPyrJpCLHeOKcoghqacKwD2Lw== +eth-saddle@^0.1.17: + version "0.1.17" + resolved "https://registry.yarnpkg.com/eth-saddle/-/eth-saddle-0.1.17.tgz#54c7bf89970739f0154b382cfbdda9ccdae314f5" + integrity sha512-o+ZhnasyFmlBtmeAI8MV/pnCPtjxnkJ058qQ9H0k27Ew6f+Aj7k/k0HuEElCMkczELTa57UJIv0nZqjCVNARxw== dependencies: "@0x/sol-tracing-utils" "^7.0.3" "@0x/subproviders" "^6.0.0" @@ -3927,9 +4008,11 @@ eth-saddle@0.1.10: "@types/jest" "^24.0.15" ethereumjs-tx "2.1.2" ethereumjs-util "5.2.0" + fast-glob "^3.2.2" ganache-core "^2.9.1" jest "^24.9.0" jest-cli "^24.9.0" + jest-diff "^25.3.0" jest-junit "^6.4.0" ts-jest "^24.0.2" typescript "^3.5.1" @@ -4493,6 +4576,18 @@ fast-deep-equal@^2.0.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-glob@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.2.tgz#ade1a9d91148965d4bf7c51f72e1ca662d32e63d" + integrity sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + fast-json-stable-stringify@2.x: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -4513,6 +4608,13 @@ fast-safe-stringify@^2.0.6: resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== +fastq@^1.6.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.7.0.tgz#fcd79a08c5bd7ec5b55cd3f5c4720db551929801" + integrity sha512-YOadQRnHd5q6PogvAR/x62BGituF2ufiEA6s8aavQANw5YKHERI4AREboX6KotzP8oX2klxYF2wcV/7bn1clfQ== + dependencies: + reusify "^1.0.4" + fb-watchman@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" @@ -4924,6 +5026,13 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" +glob-parent@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + glob-parent@~5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" @@ -5207,6 +5316,11 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-symbol-support-x@^1.4.1: version "1.4.2" resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" @@ -5977,6 +6091,16 @@ jest-diff@^24.3.0, jest-diff@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" +jest-diff@^25.3.0: + version "25.3.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.3.0.tgz#0d7d6f5d6171e5dacde9e05be47b3615e147c26f" + integrity sha512-vyvs6RPoVdiwARwY4kqFWd4PirPLm2dmmkNzKqo38uZOzJvLee87yzDjIZLmY1SjM3XR5DwsUH+cdQ12vgqi1w== + dependencies: + chalk "^3.0.0" + diff-sequences "^25.2.6" + jest-get-type "^25.2.6" + pretty-format "^25.3.0" + jest-docblock@^24.3.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2" @@ -6023,6 +6147,11 @@ jest-get-type@^24.9.0: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== +jest-get-type@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" + integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== + jest-haste-map@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" @@ -7065,6 +7194,11 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== +merge2@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" + integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== + merkle-patricia-tree@2.3.2, merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz#982ca1b5a0fde00eed2f6aeed1f9152860b8208a" @@ -7103,6 +7237,14 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -8027,6 +8169,11 @@ picomatch@^2.0.4: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.1.1.tgz#ecdfbea7704adb5fe6fb47f9866c4c0e15e905c5" integrity sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA== +picomatch@^2.0.5, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -8139,6 +8286,16 @@ pretty-format@^24.9.0: ansi-styles "^3.2.0" react-is "^16.8.4" +pretty-format@^25.3.0: + version "25.3.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.3.0.tgz#d0a4f988ff4a6cd350342fdabbb809aeb4d49ad5" + integrity sha512-wToHwF8bkQknIcFkBqNfKu4+UZqnrLn/Vr+wwKQwwvPzkBfDDKp/qIabFqdgtoi5PEnM8LFByVsOrHoa3SpTVA== + dependencies: + "@jest/types" "^25.3.0" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^16.12.0" + pretty-hrtime@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" @@ -8387,6 +8544,11 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" +react-is@^16.12.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + react-is@^16.8.4: version "16.12.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" @@ -8743,6 +8905,11 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -8770,6 +8937,11 @@ rsvp@^4.8.4: resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== +run-parallel@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" + integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== + run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" @@ -9523,6 +9695,13 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + sver-compat@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/sver-compat/-/sver-compat-1.5.0.tgz#3cf87dfeb4d07b4a3f14827bc186b3fd0c645cd8" diff --git a/spec/scenario/AddReserves.scen b/spec/scenario/AddReserves.scen index d7430aa5c..57f9ca822 100644 --- a/spec/scenario/AddReserves.scen +++ b/spec/scenario/AddReserves.scen @@ -93,12 +93,12 @@ Test "add reserves failures" ListedCToken ZRX cZRX initialExchangeRate:1e9 Assert Equal (CToken cZRX ExchangeRate) (Exactly 1e9) Assert Equal (CToken cZRX Reserves) (Exactly 0e18) - Erc20 ZRX Faucet Root 1e18 + Erc20 ZRX Faucet Root 2e18 AllowFailures AddReserves 2e18 cZRX - Assert Failure TOKEN_INSUFFICIENT_ALLOWANCE ADD_RESERVES_TRANSFER_IN_NOT_POSSIBLE + Assert Revert "revert Insufficient allowance" Assert Equal (Erc20 ZRX TokenBalance cZRX) (Exactly 0e18) - Assert Equal (Erc20 ZRX TokenBalance Root) (Exactly 1e18) + Assert Equal (Erc20 ZRX TokenBalance Root) (Exactly 2e18) Assert Equal (CToken cZRX Reserves) (Exactly 0e18) -- unchanged Assert Equal (CToken cZRX ExchangeRate) (Exactly 1e9) diff --git a/spec/scenario/CoreMacros b/spec/scenario/CoreMacros index a25984ec4..1d7575b6c 100644 --- a/spec/scenario/CoreMacros +++ b/spec/scenario/CoreMacros @@ -11,7 +11,7 @@ Macro PricedComptroller closeFactor=0.1 maxAssets=20 PriceOracle Deploy Simple ComptrollerImpl Deploy ScenarioG1 ScenComptrollerG1 Unitroller SetPendingImpl ScenComptrollerG1 - PriceOracleProxy Deploy Admin (PriceOracle Address) (Address Zero) (Address Zero) (Address Zero) (Address Zero) -- if listing cEther use ListedEtherToken to replace proxy + PriceOracleProxy Deploy Admin (PriceOracle Address) (Address Zero) (Address Zero) (Address Zero) (Address Zero) (Address Zero) -- if listing cEther use ListedEtherToken to replace proxy ComptrollerImpl ScenComptrollerG1 BecomeG1 (PriceOracleProxy Address) closeFactor maxAssets ComptrollerImpl Deploy Scenario ScenComptroller Unitroller SetPendingImpl ScenComptroller @@ -22,7 +22,7 @@ Macro NewComptroller price=1.0 closeFactor=0.1 maxAssets=20 PriceOracle Deploy Fixed price ComptrollerImpl Deploy ScenarioG1 ScenComptrollerG1 Unitroller SetPendingImpl ScenComptrollerG1 - PriceOracleProxy Deploy Admin (PriceOracle Address) (Address Zero) (Address Zero) (Address Zero) (Address Zero) -- if listing cEther use ListedEtherToken to replace proxy + PriceOracleProxy Deploy Admin (PriceOracle Address) (Address Zero) (Address Zero) (Address Zero) (Address Zero) (Address Zero) -- if listing cEther use ListedEtherToken to replace proxy ComptrollerImpl ScenComptrollerG1 BecomeG1 (PriceOracleProxy Address) closeFactor maxAssets ComptrollerImpl Deploy Scenario ScenComptroller Unitroller SetPendingImpl ScenComptroller @@ -60,7 +60,7 @@ Macro ListedCTokenImmutable erc20 cToken borrowRate=0.000005 initialExchangeRate Macro ListedEtherToken cToken borrowRate=0.000005 initialExchangeRate=2e9 decimals=8 admin=Admin NewEtherToken cToken borrowRate initialExchangeRate decimals admin Comptroller SupportMarket cToken - PriceOracleProxy Deploy Admin (PriceOracle Address) (Address cETH) (Address Zero) (Address Zero) (Address Zero) + PriceOracleProxy Deploy Admin (PriceOracle Address) (Address cETH) (Address Zero) (Address Zero) (Address Zero) (Address Zero) Comptroller SetPriceOracle (PriceOracleProxy Address) Macro ListedEtherTokenMinted cToken borrowRate=0.000005 initialExchangeRate=2e9 decimals=8 admin=Admin diff --git a/spec/scenario/InKindLiquidation.scen b/spec/scenario/InKindLiquidation.scen index 31143a551..20dfac5f1 100644 --- a/spec/scenario/InKindLiquidation.scen +++ b/spec/scenario/InKindLiquidation.scen @@ -269,7 +269,7 @@ Test "When repay borrow fails" Prep Torrey 10e18 BAT cBAT allowanceAmount:0.1e18 AllowFailures Liquidate Torrey "->" Geoff 2e18 cBAT "Seizing" cBAT - Assert Failure TOKEN_INSUFFICIENT_ALLOWANCE REPAY_BORROW_TRANSFER_IN_NOT_POSSIBLE + Assert Revert "revert Insufficient allowance" Test "Proper liquidation of paused WBTC as collateral" InKindBorrow borrowAmount:1e18 borrowRate:0.000005 borrowTokenType:WBTC diff --git a/spec/scenario/Mint.scen b/spec/scenario/Mint.scen index af004018b..4d31f0758 100644 --- a/spec/scenario/Mint.scen +++ b/spec/scenario/Mint.scen @@ -11,10 +11,10 @@ Test "Mint 1 cZRX" Test "Mint with insufficient allowance" NewComptroller ListedCToken ZRX cZRX initialExchangeRate:1e9 - Prep Geoff 49e18 ZRX cZRX + Prep Geoff 50e18 ZRX cZRX allowanceAmount:49e18 AllowFailures Mint Geoff 50e18 cZRX - Assert Failure TOKEN_INSUFFICIENT_ALLOWANCE MINT_TRANSFER_IN_NOT_POSSIBLE + Assert Revert "revert Insufficient allowance" Assert Equal (Erc20 cZRX TokenBalance Geoff) (Exactly 0e9) Test "Mint with insufficient balance" @@ -23,7 +23,7 @@ Test "Mint with insufficient balance" Prep Geoff 49e18 ZRX cZRX allowanceAmount:50e18 AllowFailures Mint Geoff 50e18 cZRX - Assert Failure TOKEN_INSUFFICIENT_BALANCE MINT_TRANSFER_IN_NOT_POSSIBLE + Assert Revert "revert Insufficient balance" Assert Equal (Erc20 cZRX TokenBalance Geoff) (Exactly 0e9) Test "Mint two ZRX after minting two ZRX, and then I mint two more" diff --git a/spec/scenario/MintWBTC.scen b/spec/scenario/MintWBTC.scen index 89159cdf4..70fae947e 100644 --- a/spec/scenario/MintWBTC.scen +++ b/spec/scenario/MintWBTC.scen @@ -11,10 +11,11 @@ Test "Mint 1 cWBTC" Test "Mint WBTC with insufficient allowance" NewComptroller ListedCToken WBTC cWBTC initialExchangeRate:0.2 tokenType:WBTC - Prep Geoff 4.9e8 WBTC cWBTC + Prep Geoff 5e8 WBTC cWBTC allowanceAmount:4.9e8 AllowFailures Mint Geoff 5e8 cWBTC - Assert Failure TOKEN_INSUFFICIENT_ALLOWANCE MINT_TRANSFER_IN_NOT_POSSIBLE + --wbtc does not revert with reason in transfer from + Assert Revert "revert" Assert Equal (Erc20 cWBTC TokenBalance Geoff) (Exactly 0e8) Test "Mint WBTC with insufficient balance" @@ -23,7 +24,8 @@ Test "Mint WBTC with insufficient balance" Prep Geoff 4.9e8 WBTC cWBTC allowanceAmount:5e8 AllowFailures Mint Geoff 5e8 cWBTC - Assert Failure TOKEN_INSUFFICIENT_BALANCE MINT_TRANSFER_IN_NOT_POSSIBLE + --wbtc does not revert with reason in transfer from + Assert Revert "revert" Assert Equal (Erc20 cWBTC TokenBalance Geoff) (Exactly 0e8) Test "Mint two WBTC after minting two WBTC, and then I mint two more" diff --git a/spec/scenario/PriceOracleProxy.scen b/spec/scenario/PriceOracleProxy.scen index 5f28f75d7..ca23b4ba9 100644 --- a/spec/scenario/PriceOracleProxy.scen +++ b/spec/scenario/PriceOracleProxy.scen @@ -4,7 +4,7 @@ Macro SetupPriceOracleProxy -- Update to G1 ComptrollerImpl Deploy ScenarioG1 ScenComptrollerG1 Unitroller SetPendingImpl ScenComptrollerG1 - PriceOracleProxy Deploy Admin (PriceOracle Address) (Address Zero) (Address Zero) (Address Zero) (Address Zero) + PriceOracleProxy Deploy Admin (PriceOracle Address) (Address Zero) (Address Zero) (Address Zero) (Address Zero) (Address Zero) ComptrollerImpl ScenComptrollerG1 BecomeG1 (PriceOracleProxy Address) 0.1 20 -- Update to G* ComptrollerImpl Deploy Scenario ScenComptroller @@ -14,11 +14,13 @@ Macro SetupPriceOracleProxy NewCToken USDC cUSDC NewCToken SAI cSAI NewCToken DAI cDAI + NewCToken USDT cUSDT Comptroller SupportMarket cETH Comptroller SupportMarket cUSDC Comptroller SupportMarket cSAI Comptroller SupportMarket cDAI - PriceOracleProxy Deploy Admin (PriceOracle Address) (Address cETH) (Address cUSDC) (Address cSAI) (Address cDAI) + Comptroller SupportMarket cUSDT + PriceOracleProxy Deploy Admin (PriceOracle Address) (Address cETH) (Address cUSDC) (Address cSAI) (Address cDAI) (Address cUSDT) Comptroller SetPriceOracle (PriceOracleProxy Address) Test "uses address(2) for dai and address(1) for usdc" @@ -34,3 +36,10 @@ Test "sai price is dai price until set" Assert Equal (PriceOracleProxy Price cSAI) 5842307360923634 PriceOracleProxy SetSaiPrice 0.006842307360923634 Assert Equal (PriceOracleProxy Price cSAI) 6842307360923634 + +Test "gets tether and usdc prices" + SetupPriceOracleProxy + PriceOracle SetDirectPrice (Address 0x0000000000000000000000000000000000000001) 5740564708.572881 + -- scaled to 1e30 bc both tokens have 6 decimals + Assert Equal (PriceOracleProxy Price cUSDT) 5740564708572881000000000000 + Assert Equal (PriceOracleProxy Price cUSDC) 5740564708572881000000000000 diff --git a/spec/scenario/RepayBorrow.scen b/spec/scenario/RepayBorrow.scen index f10e9ad05..ffdadf878 100644 --- a/spec/scenario/RepayBorrow.scen +++ b/spec/scenario/RepayBorrow.scen @@ -149,7 +149,7 @@ Test "Repay fails with insufficient allowance" Expect Changes (Erc20 BAT TokenBalance Geoff) Zero Expect Changes (Erc20 BAT TokenBalance cBAT) Zero RepayBorrow Geoff 2.5e18 cBAT - Assert Failure TOKEN_INSUFFICIENT_ALLOWANCE REPAY_BORROW_TRANSFER_IN_NOT_POSSIBLE + Assert Revert "revert Insufficient allowance" -- Let's check the overall numbers Assert Equal (CToken cBAT BorrowBalance Geoff) 2.5e18 Assert Equal (CToken cBAT TotalBorrowsCurrent) 2.5e18 @@ -167,7 +167,7 @@ Test "Repay fails with insufficient balance" Expect Changes (Erc20 BAT TokenBalance Geoff) Zero Expect Changes (Erc20 BAT TokenBalance cBAT) Zero RepayBorrow Geoff 2.5e18 cBAT - Assert Failure TOKEN_INSUFFICIENT_BALANCE REPAY_BORROW_TRANSFER_IN_NOT_POSSIBLE + Assert Revert "revert Insufficient balance" -- Let's check the overall numbers Assert Equal (CToken cBAT BorrowBalance Geoff) 2.5e18 Assert Equal (CToken cBAT TotalBorrowsCurrent) 2.5e18 diff --git a/spec/scenario/RepayBorrowWBTC.scen b/spec/scenario/RepayBorrowWBTC.scen index e18b86475..b28648098 100644 --- a/spec/scenario/RepayBorrowWBTC.scen +++ b/spec/scenario/RepayBorrowWBTC.scen @@ -165,7 +165,8 @@ Test "Repay fails with insufficient allowance" Expect Changes (Erc20 WBTC TokenBalance Geoff) Zero Expect Changes (Erc20 WBTC TokenBalance cWBTC) Zero RepayBorrow Geoff 2.5e8 cWBTC - Assert Failure TOKEN_INSUFFICIENT_ALLOWANCE REPAY_BORROW_TRANSFER_IN_NOT_POSSIBLE + --wbtc does not revert with reason in transfer from + Assert Revert "revert" -- Let's check the overall numbers Assert Equal (CToken cWBTC BorrowBalance Geoff) 2.5e8 Assert Equal (CToken cWBTC TotalBorrowsCurrent) 2.5e8 @@ -183,7 +184,8 @@ Test "Repay fails with insufficient balance" Expect Changes (Erc20 WBTC TokenBalance Geoff) Zero Expect Changes (Erc20 WBTC TokenBalance cWBTC) Zero RepayBorrow Geoff 2.5e8 cWBTC - Assert Failure TOKEN_INSUFFICIENT_BALANCE REPAY_BORROW_TRANSFER_IN_NOT_POSSIBLE + --wbtc does not revert with reason in transfer from + Assert Revert "revert" -- Let's check the overall numbers Assert Equal (CToken cWBTC BorrowBalance Geoff) 2.5e8 Assert Equal (CToken cWBTC TotalBorrowsCurrent) 2.5e8 diff --git a/spec/scenario/Timelock.scen b/spec/scenario/Timelock.scen index e51adb388..820bce370 100644 --- a/spec/scenario/Timelock.scen +++ b/spec/scenario/Timelock.scen @@ -189,7 +189,7 @@ Test "Set Pending Comptroller implemention on Unitroller from Timelock" ComptrollerImpl Deploy ScenarioG1 ScenComptrollerG1 Unitroller SetPendingImpl ScenComptrollerG1 Assert Equal (Unitroller PendingImplementation) (ComptrollerImpl ScenComptrollerG1 Address) - PriceOracleProxy Deploy Admin (PriceOracle Address) (Address Zero) (Address Zero) (Address Zero) (Address Zero) -- if listing cEther use ListedEtherToken to replace proxy + PriceOracleProxy Deploy Admin (PriceOracle Address) (Address Zero) (Address Zero) (Address Zero) (Address Zero) (Address Zero) -- if listing cEther use ListedEtherToken to replace proxy ComptrollerImpl ScenComptrollerG1 BecomeG1 (PriceOracleProxy Address) 0.1 20 Assert Equal (Unitroller PendingImplementation) (Address Zero) Assert Equal (Unitroller Implementation) (Address ScenComptrollerG1) diff --git a/spec/scenario/admin/setMarketPolicyHook.scen.old b/spec/scenario/admin/setMarketPolicyHook.scen.old deleted file mode 100644 index 8af26633b..000000000 --- a/spec/scenario/admin/setMarketPolicyHook.scen.old +++ /dev/null @@ -1,41 +0,0 @@ - --- Tests for MoneyMarket's `_setMarketPolicyHook(address,address)` function - -Macro ListAsset asset - SupportMarket asset (FixedPrice 1.0) (FixedRate 0.5 0.75) SimplePolicyHook - Assert Success - -Test "emits log on failure due to non-admin caller" - AddToken Ether - Invariant Static (GetMarketPolicyHook Ether) - From Geoff (SetMarketPolicyHook Ether SimplePolicyHook) - Assert Failure UNAUTHORIZED SET_POLICY_HOOK_OWNER_CHECK - -Test "emits log on failure due to not-listed market" - AddToken Ether - Invariant Static (GetMarketPolicyHook Ether) - SetMarketPolicyHook Ether SimplePolicyHook - Assert Failure MARKET_NOT_LISTED SET_POLICY_HOOK_MARKET_NOT_LISTED - -Test "emits log on failure due to being a bad policy hook" - AddToken Ether - ListAsset Ether - Invariant Static (GetMarketPolicyHook Ether) - SetMarketPolicyHook Ether FakePolicyHook - Assert Failure BAD_INPUT SET_POLICY_HOOK_IS_NOT_POLICY_HOOK - -Test "reverts due to not being a policy hook" - AddToken Ether - ListAsset Ether - Invariant Static (GetMarketPolicyHook Ether) - SetMarketPolicyHook Ether NotPolicyHook - Assert Revert - -Test "successfully sets policy hook" - AddToken Ether - ListAsset Ether - SetMarketPolicyHook Ether SimplePolicyHook - Assert Success - Assert Equal (GetMarketPolicyHook Ether) LastContract - Assert Log "PolicyHookChanged" \ - ("asset" (Address Ether)) ("oldPolicyHook" Anything) ("newPolicyHook" (LastContract)) diff --git a/spec/scenario/admin/setMarketPriceOracle.scen.old b/spec/scenario/admin/setMarketPriceOracle.scen.old deleted file mode 100644 index 01ba45d6a..000000000 --- a/spec/scenario/admin/setMarketPriceOracle.scen.old +++ /dev/null @@ -1,38 +0,0 @@ - --- Tests for MoneyMarket's `_setMarketPriceOracle(address,address)` function - -Macro ListAsset asset - SupportMarket asset (FixedPrice 1.0) (FixedRate 0.5 0.75) SimplePolicyHook - Assert Success - -Test "is initially unset" - AddToken Ether - Assert Equal (GetMarketPriceOracle Ether) (Exactly 0) - -Test "fails if not called by admin" - AddToken Ether - Invariant Static (GetMarketPriceOracle Ether) - From Geoff (SetMarketPriceOracle Ether Simple) - Assert Failure UNAUTHORIZED SET_ORACLE_OWNER_CHECK - -Test "fails if market not listed" - AddToken Ether - Invariant Static (GetMarketPriceOracle Ether) - SetMarketPriceOracle Ether Simple - Assert Failure MARKET_NOT_LISTED SET_ORACLE_MARKET_NOT_LISTED - -Test "reverts if new address is not really an oracle" - AddToken Ether - ListAsset Ether - Invariant Static (GetMarketPriceOracle Ether) - SetMarketPriceOracle Ether NotPriceOracle - Assert Revert - -Test "successfully set by admin" - AddToken Ether - ListAsset Ether - SetMarketPriceOracle Ether Simple - Assert Success - Assert Equal (GetMarketPriceOracle Ether) LastContract - Assert Log "NewMarketOracle" \ - ("asset" (Address Ether)) ("oldPriceOracle" Anything) ("newPriceOracle" (LastContract)) diff --git a/tests/Contracts/BasicToken.sol b/tests/Contracts/BasicToken.sol deleted file mode 100644 index 533b527a1..000000000 --- a/tests/Contracts/BasicToken.sol +++ /dev/null @@ -1,50 +0,0 @@ -pragma solidity ^0.5.12; - - -import "./ERC20Basic.sol"; -import "./SafeMath.sol"; - - -/** - * @title Basic token - * @dev Basic version of StandardToken, with no allowances. - */ -contract BasicToken is ERC20Basic { - using SafeMath for uint256; - - mapping(address => uint256) balances; - - uint256 totalSupply_; - - /** - * @dev Total number of tokens in existence - */ - function totalSupply() public view returns (uint256) { - return totalSupply_; - } - - /** - * @dev Transfer token for a specified address - * @param _to The address to transfer to. - * @param _value The amount to be transferred. - */ - function transfer(address _to, uint256 _value) public returns (bool) { - require(_to != address(0)); - require(_value <= balances[msg.sender]); - - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - emit Transfer(msg.sender, _to, _value); - return true; - } - - /** - * @dev Gets the balance of the specified address. - * @param _owner The address to query the the balance of. - * @return An uint256 representing the amount owned by the passed address. - */ - function balanceOf(address _owner) public view returns (uint256) { - return balances[_owner]; - } - -} \ No newline at end of file diff --git a/tests/Contracts/BasicTokenNS.sol b/tests/Contracts/BasicTokenNS.sol deleted file mode 100644 index 7ecbd19f9..000000000 --- a/tests/Contracts/BasicTokenNS.sol +++ /dev/null @@ -1,50 +0,0 @@ -pragma solidity ^0.5.12; - - -import "./ERC20BasicNS.sol"; -import "./SafeMath.sol"; - -/** - * @title Basic token (Non-Standard) - * @dev Basic version of NonStandardToken, with no allowances. - * @dev Version of ERC20 with no return values for `transfer` and `transferFrom` - * See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca - */ -contract BasicTokenNS is ERC20BasicNS { - using SafeMath for uint256; - - mapping(address => uint256) balances; - - uint256 totalSupply_; - - /** - * @dev Total number of tokens in existence - */ - function totalSupply() public view returns (uint256) { - return totalSupply_; - } - - /** - * @dev Transfer token for a specified address - * @param _to The address to transfer to. - * @param _value The amount to be transferred. - */ - function transfer(address _to, uint256 _value) public { - require(_to != address(0)); - require(_value <= balances[msg.sender]); - - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - emit Transfer(msg.sender, _to, _value); - } - - /** - * @dev Gets the balance of the specified address. - * @param _owner The address to query the the balance of. - * @return An uint256 representing the amount owned by the passed address. - */ - function balanceOf(address _owner) public view returns (uint256) { - return balances[_owner]; - } - -} \ No newline at end of file diff --git a/tests/Contracts/BoolComptroller.sol b/tests/Contracts/BoolComptroller.sol deleted file mode 100644 index 291f7b74c..000000000 --- a/tests/Contracts/BoolComptroller.sol +++ /dev/null @@ -1,278 +0,0 @@ -pragma solidity ^0.5.12; - -import "../../contracts/ComptrollerInterface.sol"; - -contract BoolComptroller is ComptrollerInterface { - bool public isComptroller = true; - - bool allowMint = true; - bool allowRedeem = true; - bool allowBorrow = true; - bool allowRepayBorrow = true; - bool allowLiquidateBorrow = true; - bool allowSeize = true; - bool allowTransfer = true; - - bool verifyMint = true; - bool verifyRedeem = true; - bool verifyBorrow = true; - bool verifyRepayBorrow = true; - bool verifyLiquidateBorrow = true; - bool verifySeize = true; - bool verifyTransfer = true; - - bool failCalculateSeizeTokens; - uint calculatedSeizeTokens; - - uint noError = 0; - uint opaqueError = noError + 11; // an arbitrary, opaque error code - - /*** Assets You Are In ***/ - - function enterMarkets(address[] calldata _cTokens) external returns (uint[] memory) { - _cTokens; - uint[] memory ret; - return ret; - } - - function exitMarket(address _cToken) external returns (uint) { - _cToken; - return noError; - } - - /*** Policy Hooks ***/ - - function mintAllowed(address _cToken, address _minter, uint _mintAmount) public returns (uint) { - _cToken; - _minter; - _mintAmount; - return allowMint ? noError : opaqueError; - } - - function mintVerify(address _cToken, address _minter, uint _mintAmount, uint _mintTokens) external { - _cToken; - _minter; - _mintAmount; - _mintTokens; - require(verifyMint, "mintVerify rejected mint"); - } - - function redeemAllowed(address _cToken, address _redeemer, uint _redeemTokens) public returns (uint) { - _cToken; - _redeemer; - _redeemTokens; - return allowRedeem ? noError : opaqueError; - } - - function redeemVerify(address _cToken, address _redeemer, uint _redeemAmount, uint _redeemTokens) external { - _cToken; - _redeemer; - _redeemAmount; - _redeemTokens; - require(verifyRedeem, "redeemVerify rejected redeem"); - } - - function borrowAllowed(address _cToken, address _borrower, uint _borrowAmount) public returns (uint) { - _cToken; - _borrower; - _borrowAmount; - return allowBorrow ? noError : opaqueError; - } - - function borrowVerify(address _cToken, address _borrower, uint _borrowAmount) external { - _cToken; - _borrower; - _borrowAmount; - require(verifyBorrow, "borrowVerify rejected borrow"); - } - - function repayBorrowAllowed( - address _cToken, - address _payer, - address _borrower, - uint _repayAmount) public returns (uint) { - _cToken; - _payer; - _borrower; - _repayAmount; - return allowRepayBorrow ? noError : opaqueError; - } - - function repayBorrowVerify( - address _cToken, - address _payer, - address _borrower, - uint _repayAmount, - uint _borrowerIndex) external { - _cToken; - _payer; - _borrower; - _repayAmount; - _borrowerIndex; - require(verifyRepayBorrow, "repayBorrowVerify rejected repayBorrow"); - } - - function liquidateBorrowAllowed( - address _cTokenBorrowed, - address _cTokenCollateral, - address _liquidator, - address _borrower, - uint _repayAmount) public returns (uint) { - _cTokenBorrowed; - _cTokenCollateral; - _liquidator; - _borrower; - _repayAmount; - return allowLiquidateBorrow ? noError : opaqueError; - } - - function liquidateBorrowVerify( - address _cTokenBorrowed, - address _cTokenCollateral, - address _liquidator, - address _borrower, - uint _repayAmount, - uint _seizeTokens) external { - _cTokenBorrowed; - _cTokenCollateral; - _liquidator; - _borrower; - _repayAmount; - _seizeTokens; - require(verifyLiquidateBorrow, "liquidateBorrowVerify rejected liquidateBorrow"); - } - - function seizeAllowed( - address _cTokenCollateral, - address _cTokenBorrowed, - address _borrower, - address _liquidator, - uint _seizeTokens) public returns (uint) { - _cTokenCollateral; - _cTokenBorrowed; - _liquidator; - _borrower; - _seizeTokens; - return allowSeize ? noError : opaqueError; - } - - function seizeVerify( - address _cTokenCollateral, - address _cTokenBorrowed, - address _liquidator, - address _borrower, - uint _seizeTokens) external { - _cTokenCollateral; - _cTokenBorrowed; - _liquidator; - _borrower; - _seizeTokens; - require(verifySeize, "seizeVerify rejected seize"); - } - - function transferAllowed( - address _cToken, - address _src, - address _dst, - uint _transferTokens) public returns (uint) { - _cToken; - _src; - _dst; - _transferTokens; - return allowTransfer ? noError : opaqueError; - } - - function transferVerify( - address _cToken, - address _src, - address _dst, - uint _transferTokens) external { - _cToken; - _src; - _dst; - _transferTokens; - require(verifyTransfer, "transferVerify rejected transfer"); - } - - /*** Special Liquidation Calculation ***/ - - function liquidateCalculateSeizeTokens( - address _cTokenBorrowed, - address _cTokenCollateral, - uint _repayAmount) public view returns (uint, uint) { - _cTokenBorrowed; - _cTokenCollateral; - _repayAmount; - return failCalculateSeizeTokens ? (opaqueError, 0) : (noError, calculatedSeizeTokens); - } - - /**** Mock Settors ****/ - - /*** Policy Hooks ***/ - - function setMintAllowed(bool allowMint_) public { - allowMint = allowMint_; - } - - function setMintVerify(bool verifyMint_) public { - verifyMint = verifyMint_; - } - - function setRedeemAllowed(bool allowRedeem_) public { - allowRedeem = allowRedeem_; - } - - function setRedeemVerify(bool verifyRedeem_) public { - verifyRedeem = verifyRedeem_; - } - - function setBorrowAllowed(bool allowBorrow_) public { - allowBorrow = allowBorrow_; - } - - function setBorrowVerify(bool verifyBorrow_) public { - verifyBorrow = verifyBorrow_; - } - - function setRepayBorrowAllowed(bool allowRepayBorrow_) public { - allowRepayBorrow = allowRepayBorrow_; - } - - function setRepayBorrowVerify(bool verifyRepayBorrow_) public { - verifyRepayBorrow = verifyRepayBorrow_; - } - - function setLiquidateBorrowAllowed(bool allowLiquidateBorrow_) public { - allowLiquidateBorrow = allowLiquidateBorrow_; - } - - function setLiquidateBorrowVerify(bool verifyLiquidateBorrow_) public { - verifyLiquidateBorrow = verifyLiquidateBorrow_; - } - - function setSeizeAllowed(bool allowSeize_) public { - allowSeize = allowSeize_; - } - - function setSeizeVerify(bool verifySeize_) public { - verifySeize = verifySeize_; - } - - function setTransferAllowed(bool allowTransfer_) public { - allowTransfer = allowTransfer_; - } - - function setTransferVerify(bool verifyTransfer_) public { - verifyTransfer = verifyTransfer_; - } - - /*** Liquidity/Liquidation Calculations ***/ - - function setCalculatedSeizeTokens(uint seizeTokens_) public { - calculatedSeizeTokens = seizeTokens_; - } - - function setFailCalculateSeizeTokens(bool shouldFail) public { - failCalculateSeizeTokens = shouldFail; - } -} diff --git a/tests/Contracts/CDaiDelegateScenario.sol b/tests/Contracts/CDaiDelegateScenario.sol deleted file mode 100644 index 5a14735b8..000000000 --- a/tests/Contracts/CDaiDelegateScenario.sol +++ /dev/null @@ -1,26 +0,0 @@ -pragma solidity ^0.5.12; - -import "../../contracts/CDaiDelegate.sol"; -import "./ComptrollerScenario.sol"; - -contract CDaiDelegateScenario is CDaiDelegate { - constructor() public {} - - function setTotalBorrows(uint totalBorrows_) public { - totalBorrows = totalBorrows_; - } - - function setTotalReserves(uint totalReserves_) public { - totalReserves = totalReserves_; - } - - /** - * @dev Function to simply retrieve block number - * This exists mainly for inheriting test contracts to stub this result. - */ - function getBlockNumber() internal view returns (uint) { - ComptrollerScenario comptrollerScenario = ComptrollerScenario(address(comptroller)); - - return comptrollerScenario.blockNumber(); - } -} diff --git a/tests/Contracts/CErc20DelegateHarness.sol b/tests/Contracts/CErc20DelegateHarness.sol deleted file mode 100644 index 1f23d8a1a..000000000 --- a/tests/Contracts/CErc20DelegateHarness.sol +++ /dev/null @@ -1,183 +0,0 @@ -pragma solidity ^0.5.16; - -import "../../contracts/CErc20Delegate.sol"; - -contract CErc20DelegateHarness is CErc20Delegate { - event Log(string x, address y); - event Log(string x, uint y); - - uint blockNumber = 100000; - uint harnessExchangeRate; - bool harnessExchangeRateStored; - - /* - To support testing, we allow the contract to always fail `transfer`. - */ - mapping (address => bool) public failTransferToAddresses; - constructor() public {} - - function getBorrowRateMaxMantissa() public pure returns (uint) { - return borrowRateMaxMantissa; - } - - /** - * Fresh - * - */ - function getBlockNumber() internal view returns (uint) { - return blockNumber; - } - - function harnessSetBlockNumber(uint newBlockNumber) public { - blockNumber = newBlockNumber; - } - - function harnessFastForward(uint blocks) public { - blockNumber += blocks; - } - - /** - * Account Balances - * - */ - function harnessSetBalance(address account, uint amount) external { - accountTokens[account] = amount; - } - - /** - * Accrual Block Number - */ - function harnessSetAccrualBlockNumber(uint _accrualblockNumber) public { - accrualBlockNumber = _accrualblockNumber; - } - - /** - * Exchange Rate - * - */ - function harnessSetTotalSupply(uint totalSupply_) public { - totalSupply = totalSupply_; - } - - function harnessSetTotalBorrows(uint totalBorrows_) public { - totalBorrows = totalBorrows_; - } - - function harnessSetTotalReserves(uint totalReserves_) public { - totalReserves = totalReserves_; - } - - function harnessExchangeRateDetails(uint totalSupply_, uint totalBorrows_, uint totalReserves_) public { - totalSupply = totalSupply_; - totalBorrows = totalBorrows_; - totalReserves = totalReserves_; - } - - function harnessSetExchangeRate(uint exchangeRate) public { - harnessExchangeRate = exchangeRate; - harnessExchangeRateStored = true; - } - - function exchangeRateStoredInternal() internal view returns (MathError, uint) { - if (harnessExchangeRateStored) { - return (MathError.NO_ERROR, harnessExchangeRate); - } - - return super.exchangeRateStoredInternal(); - } - - /** - * Transfer Harness methods - * - */ - - /** - * @dev Specify `address, true` to cause transfers to address to fail. - * Once an address has been marked for failure it can be cleared by - * with `address, false` - */ - function harnessSetFailTransferToAddress(address _to, bool _fail) public { - failTransferToAddresses[_to] = _fail; - } - - function doTransferOut(address payable to, uint amount) internal { - require(failTransferToAddresses[to] == false, "TOKEN_TRANSFER_OUT_FAILED"); - return super.doTransferOut(to, amount); - } - - /** - * Spearmint? Nah, fresh mint. - * - */ - function harnessMintFresh(address account, uint mintAmount) public returns (uint) { - (uint err,) = super.mintFresh(account, mintAmount); - return err; - } - - /** - * Redemption - * - */ - function harnessRedeemFresh(address payable account, uint cTokenAmount, uint underlyingAmount) public returns (uint) { - return super.redeemFresh(account, cTokenAmount, underlyingAmount); - } - - /** - * Borrowing - * - */ - function harnessAccountBorrows(address account) public view returns (uint principal, uint interestIndex) { - BorrowSnapshot memory snapshot = accountBorrows[account]; - return (snapshot.principal, snapshot.interestIndex); - } - - function harnessSetAccountBorrows(address account, uint principal, uint interestIndex) public { - accountBorrows[account] = BorrowSnapshot({principal: principal, interestIndex: interestIndex}); - } - - function harnessSetBorrowIndex(uint borrowIndex_) public { - borrowIndex = borrowIndex_; - } - - function harnessBorrowFresh(address payable account, uint borrowAmount) public returns (uint) { - return borrowFresh(account, borrowAmount); - } - - function harnessRepayBorrowFresh(address payer, address account, uint repayAmount) public returns (uint) { - (uint err,) = repayBorrowFresh(payer, account, repayAmount); - return err; - } - - function harnessLiquidateBorrowFresh(address liquidator, address borrower, uint repayAmount, CToken cTokenCollateral) public returns (uint) { - (uint err,) = liquidateBorrowFresh(liquidator, borrower, repayAmount, cTokenCollateral); - return err; - } - - /** - * Admin - * - */ - function harnessReduceReservesFresh(uint amount) public returns (uint) { - return _reduceReservesFresh(amount); - } - - function harnessSetReserveFactorFresh(uint newReserveFactorMantissa) public returns (uint) { - return _setReserveFactorFresh(newReserveFactorMantissa); - } - - function harnessSetInterestRateModelFresh(InterestRateModel newInterestRateModel) public returns (uint) { - return _setInterestRateModelFresh(newInterestRateModel); - } - - /** - * @dev set the interest rate model directly, with no interest accrual and no checks - * Intended for linking in FailableInterestRateModel to create failures in accrueInterest - */ - function harnessSetInterestRateModel(address newInterestRateModelAddress) public { - interestRateModel = InterestRateModel(newInterestRateModelAddress); - } - - function harnessCallBorrowAllowed(uint amount) public returns (uint) { - return comptroller.borrowAllowed(address(this), msg.sender, amount); - } -} diff --git a/tests/Contracts/CErc20DelegateScenario.sol b/tests/Contracts/CErc20DelegateScenario.sol deleted file mode 100644 index c3d098850..000000000 --- a/tests/Contracts/CErc20DelegateScenario.sol +++ /dev/null @@ -1,26 +0,0 @@ -pragma solidity ^0.5.12; - -import "../../contracts/CErc20Delegate.sol"; -import "./ComptrollerScenario.sol"; - -contract CErc20DelegateScenario is CErc20Delegate { - constructor() public {} - - function setTotalBorrows(uint totalBorrows_) public { - totalBorrows = totalBorrows_; - } - - function setTotalReserves(uint totalReserves_) public { - totalReserves = totalReserves_; - } - - /** - * @dev Function to simply retrieve block number - * This exists mainly for inheriting test contracts to stub this result. - */ - function getBlockNumber() internal view returns (uint) { - ComptrollerScenario comptrollerScenario = ComptrollerScenario(address(comptroller)); - - return comptrollerScenario.blockNumber(); - } -} diff --git a/tests/Contracts/CErc20DelegateScenarioExtra.sol b/tests/Contracts/CErc20DelegateScenarioExtra.sol deleted file mode 100644 index 46e0dc96b..000000000 --- a/tests/Contracts/CErc20DelegateScenarioExtra.sol +++ /dev/null @@ -1,17 +0,0 @@ -pragma solidity ^0.5.12; - -import "./CErc20DelegateScenario.sol"; - -contract CErc20DelegateScenarioExtra is CErc20DelegateScenario { - function iHaveSpoken() public pure returns (string memory) { - return "i have spoken"; - } - - function itIsTheWay() public { - admin = address(1); // make a change to test effect - } - - function babyYoda() public pure { - revert("protect the baby"); - } -} diff --git a/tests/Contracts/CErc20DelegatorScenario.sol b/tests/Contracts/CErc20DelegatorScenario.sol deleted file mode 100644 index f22191ab0..000000000 --- a/tests/Contracts/CErc20DelegatorScenario.sol +++ /dev/null @@ -1,35 +0,0 @@ -pragma solidity ^0.5.12; - -import "../../contracts/CErc20Delegator.sol"; - -contract CErc20DelegatorScenario is CErc20Delegator { - constructor(address underlying_, - ComptrollerInterface comptroller_, - InterestRateModel interestRateModel_, - uint initialExchangeRateMantissa_, - string memory name_, - string memory symbol_, - uint8 decimals_, - address payable admin_, - address implementation_, - bytes memory becomeImplementationData) - CErc20Delegator( - underlying_, - comptroller_, - interestRateModel_, - initialExchangeRateMantissa_, - name_, - symbol_, - decimals_, - admin_, - implementation_, - becomeImplementationData) public {} - - function setTotalBorrows(uint totalBorrows_) public { - totalBorrows = totalBorrows_; - } - - function setTotalReserves(uint totalReserves_) public { - totalReserves = totalReserves_; - } -} diff --git a/tests/Contracts/CErc20Harness.sol b/tests/Contracts/CErc20Harness.sol index fd01ff4ee..d1e9fc8c7 100644 --- a/tests/Contracts/CErc20Harness.sol +++ b/tests/Contracts/CErc20Harness.sol @@ -1,16 +1,16 @@ -pragma solidity ^0.5.12; +pragma solidity ^0.5.16; import "../../contracts/CErc20Immutable.sol"; +import "../../contracts/CErc20Delegator.sol"; +import "../../contracts/CErc20Delegate.sol"; +import "../../contracts/CDaiDelegate.sol"; +import "./ComptrollerHarness.sol"; contract CErc20Harness is CErc20Immutable { - uint blockNumber = 100000; uint harnessExchangeRate; bool harnessExchangeRateStored; - /* - To support testing, we allow the contract to always fail `transfer`. - */ mapping (address => bool) public failTransferToAddresses; constructor(address underlying_, @@ -31,18 +31,30 @@ contract CErc20Harness is CErc20Immutable { decimals_, admin_) public {} - function getBorrowRateMaxMantissa() public pure returns (uint) { - return borrowRateMaxMantissa; + function doTransferOut(address payable to, uint amount) internal { + require(failTransferToAddresses[to] == false, "TOKEN_TRANSFER_OUT_FAILED"); + return super.doTransferOut(to, amount); + } + + function exchangeRateStoredInternal() internal view returns (MathError, uint) { + if (harnessExchangeRateStored) { + return (MathError.NO_ERROR, harnessExchangeRate); + } + return super.exchangeRateStoredInternal(); } - /** - * Fresh - * - */ function getBlockNumber() internal view returns (uint) { return blockNumber; } + function getBorrowRateMaxMantissa() public pure returns (uint) { + return borrowRateMaxMantissa; + } + + function harnessSetAccrualBlockNumber(uint _accrualblockNumber) public { + accrualBlockNumber = _accrualblockNumber; + } + function harnessSetBlockNumber(uint newBlockNumber) public { blockNumber = newBlockNumber; } @@ -51,25 +63,10 @@ contract CErc20Harness is CErc20Immutable { blockNumber += blocks; } - /** - * Account Balances - * - */ function harnessSetBalance(address account, uint amount) external { accountTokens[account] = amount; } - /** - * Accrual Block Number - */ - function harnessSetAccrualBlockNumber(uint _accrualblockNumber) public { - accrualBlockNumber = _accrualblockNumber; - } - - /** - * Exchange Rate - * - */ function harnessSetTotalSupply(uint totalSupply_) public { totalSupply = totalSupply_; } @@ -93,54 +90,238 @@ contract CErc20Harness is CErc20Immutable { harnessExchangeRateStored = true; } + function harnessSetFailTransferToAddress(address _to, bool _fail) public { + failTransferToAddresses[_to] = _fail; + } + + function harnessMintFresh(address account, uint mintAmount) public returns (uint) { + (uint err,) = super.mintFresh(account, mintAmount); + return err; + } + + function harnessRedeemFresh(address payable account, uint cTokenAmount, uint underlyingAmount) public returns (uint) { + return super.redeemFresh(account, cTokenAmount, underlyingAmount); + } + + function harnessAccountBorrows(address account) public view returns (uint principal, uint interestIndex) { + BorrowSnapshot memory snapshot = accountBorrows[account]; + return (snapshot.principal, snapshot.interestIndex); + } + + function harnessSetAccountBorrows(address account, uint principal, uint interestIndex) public { + accountBorrows[account] = BorrowSnapshot({principal: principal, interestIndex: interestIndex}); + } + + function harnessSetBorrowIndex(uint borrowIndex_) public { + borrowIndex = borrowIndex_; + } + + function harnessBorrowFresh(address payable account, uint borrowAmount) public returns (uint) { + return borrowFresh(account, borrowAmount); + } + + function harnessRepayBorrowFresh(address payer, address account, uint repayAmount) public returns (uint) { + (uint err,) = repayBorrowFresh(payer, account, repayAmount); + return err; + } + + function harnessLiquidateBorrowFresh(address liquidator, address borrower, uint repayAmount, CToken cTokenCollateral) public returns (uint) { + (uint err,) = liquidateBorrowFresh(liquidator, borrower, repayAmount, cTokenCollateral); + return err; + } + + function harnessReduceReservesFresh(uint amount) public returns (uint) { + return _reduceReservesFresh(amount); + } + + function harnessSetReserveFactorFresh(uint newReserveFactorMantissa) public returns (uint) { + return _setReserveFactorFresh(newReserveFactorMantissa); + } + + function harnessSetInterestRateModelFresh(InterestRateModel newInterestRateModel) public returns (uint) { + return _setInterestRateModelFresh(newInterestRateModel); + } + + function harnessSetInterestRateModel(address newInterestRateModelAddress) public { + interestRateModel = InterestRateModel(newInterestRateModelAddress); + } + + function harnessCallBorrowAllowed(uint amount) public returns (uint) { + return comptroller.borrowAllowed(address(this), msg.sender, amount); + } +} + +contract CErc20Scenario is CErc20Immutable { + constructor(address underlying_, + ComptrollerInterface comptroller_, + InterestRateModel interestRateModel_, + uint initialExchangeRateMantissa_, + string memory name_, + string memory symbol_, + uint8 decimals_, + address payable admin_) + CErc20Immutable( + underlying_, + comptroller_, + interestRateModel_, + initialExchangeRateMantissa_, + name_, + symbol_, + decimals_, + admin_) public {} + + function setTotalBorrows(uint totalBorrows_) public { + totalBorrows = totalBorrows_; + } + + function setTotalReserves(uint totalReserves_) public { + totalReserves = totalReserves_; + } + + function getBlockNumber() internal view returns (uint) { + ComptrollerScenario comptrollerScenario = ComptrollerScenario(address(comptroller)); + return comptrollerScenario.blockNumber(); + } +} + +contract CEvil is CErc20Scenario { + constructor(address underlying_, + ComptrollerInterface comptroller_, + InterestRateModel interestRateModel_, + uint initialExchangeRateMantissa_, + string memory name_, + string memory symbol_, + uint8 decimals_, + address payable admin_) + CErc20Scenario( + underlying_, + comptroller_, + interestRateModel_, + initialExchangeRateMantissa_, + name_, + symbol_, + decimals_, + admin_) public {} + + function evilSeize(CToken treasure, address liquidator, address borrower, uint seizeTokens) public returns (uint) { + return treasure.seize(liquidator, borrower, seizeTokens); + } +} + +contract CErc20DelegatorScenario is CErc20Delegator { + constructor(address underlying_, + ComptrollerInterface comptroller_, + InterestRateModel interestRateModel_, + uint initialExchangeRateMantissa_, + string memory name_, + string memory symbol_, + uint8 decimals_, + address payable admin_, + address implementation_, + bytes memory becomeImplementationData) + CErc20Delegator( + underlying_, + comptroller_, + interestRateModel_, + initialExchangeRateMantissa_, + name_, + symbol_, + decimals_, + admin_, + implementation_, + becomeImplementationData) public {} + + function setTotalBorrows(uint totalBorrows_) public { + totalBorrows = totalBorrows_; + } + + function setTotalReserves(uint totalReserves_) public { + totalReserves = totalReserves_; + } +} + +contract CErc20DelegateHarness is CErc20Delegate { + event Log(string x, address y); + event Log(string x, uint y); + + uint blockNumber = 100000; + uint harnessExchangeRate; + bool harnessExchangeRateStored; + + mapping (address => bool) public failTransferToAddresses; + function exchangeRateStoredInternal() internal view returns (MathError, uint) { if (harnessExchangeRateStored) { return (MathError.NO_ERROR, harnessExchangeRate); } - return super.exchangeRateStoredInternal(); } - /** - * Transfer Harness methods - * - */ - - /** - * @dev Specify `address, true` to cause transfers to address to fail. - * Once an address has been marked for failure it can be cleared by - * with `address, false` - */ - function harnessSetFailTransferToAddress(address _to, bool _fail) public { - failTransferToAddresses[_to] = _fail; - } - function doTransferOut(address payable to, uint amount) internal { require(failTransferToAddresses[to] == false, "TOKEN_TRANSFER_OUT_FAILED"); return super.doTransferOut(to, amount); } - /** - * Spearmint? Nah, fresh mint. - * - */ + function getBlockNumber() internal view returns (uint) { + return blockNumber; + } + + function getBorrowRateMaxMantissa() public pure returns (uint) { + return borrowRateMaxMantissa; + } + + function harnessSetBlockNumber(uint newBlockNumber) public { + blockNumber = newBlockNumber; + } + + function harnessFastForward(uint blocks) public { + blockNumber += blocks; + } + + function harnessSetBalance(address account, uint amount) external { + accountTokens[account] = amount; + } + + function harnessSetAccrualBlockNumber(uint _accrualblockNumber) public { + accrualBlockNumber = _accrualblockNumber; + } + + function harnessSetTotalSupply(uint totalSupply_) public { + totalSupply = totalSupply_; + } + + function harnessSetTotalBorrows(uint totalBorrows_) public { + totalBorrows = totalBorrows_; + } + + function harnessSetTotalReserves(uint totalReserves_) public { + totalReserves = totalReserves_; + } + + function harnessExchangeRateDetails(uint totalSupply_, uint totalBorrows_, uint totalReserves_) public { + totalSupply = totalSupply_; + totalBorrows = totalBorrows_; + totalReserves = totalReserves_; + } + + function harnessSetExchangeRate(uint exchangeRate) public { + harnessExchangeRate = exchangeRate; + harnessExchangeRateStored = true; + } + + function harnessSetFailTransferToAddress(address _to, bool _fail) public { + failTransferToAddresses[_to] = _fail; + } + function harnessMintFresh(address account, uint mintAmount) public returns (uint) { (uint err,) = super.mintFresh(account, mintAmount); return err; } - /** - * Redemption - * - */ function harnessRedeemFresh(address payable account, uint cTokenAmount, uint underlyingAmount) public returns (uint) { return super.redeemFresh(account, cTokenAmount, underlyingAmount); } - /** - * Borrowing - * - */ function harnessAccountBorrows(address account) public view returns (uint principal, uint interestIndex) { BorrowSnapshot memory snapshot = accountBorrows[account]; return (snapshot.principal, snapshot.interestIndex); @@ -168,10 +349,6 @@ contract CErc20Harness is CErc20Immutable { return err; } - /** - * Admin - * - */ function harnessReduceReservesFresh(uint amount) public returns (uint) { return _reduceReservesFresh(amount); } @@ -184,10 +361,6 @@ contract CErc20Harness is CErc20Immutable { return _setInterestRateModelFresh(newInterestRateModel); } - /** - * @dev set the interest rate model directly, with no interest accrual and no checks - * Intended for linking in FailableInterestRateModel to create failures in accrueInterest - */ function harnessSetInterestRateModel(address newInterestRateModelAddress) public { interestRateModel = InterestRateModel(newInterestRateModelAddress); } @@ -196,3 +369,141 @@ contract CErc20Harness is CErc20Immutable { return comptroller.borrowAllowed(address(this), msg.sender, amount); } } + +contract CErc20DelegateScenario is CErc20Delegate { + constructor() public {} + + function setTotalBorrows(uint totalBorrows_) public { + totalBorrows = totalBorrows_; + } + + function setTotalReserves(uint totalReserves_) public { + totalReserves = totalReserves_; + } + + function getBlockNumber() internal view returns (uint) { + ComptrollerScenario comptrollerScenario = ComptrollerScenario(address(comptroller)); + return comptrollerScenario.blockNumber(); + } +} + +contract CErc20DelegateScenarioExtra is CErc20DelegateScenario { + function iHaveSpoken() public pure returns (string memory) { + return "i have spoken"; + } + + function itIsTheWay() public { + admin = address(1); // make a change to test effect + } + + function babyYoda() public pure { + revert("protect the baby"); + } +} + +contract CDaiDelegateHarness is CDaiDelegate { + uint blockNumber = 100000; + uint harnessExchangeRate; + bool harnessExchangeRateStored; + + function harnessFastForward(uint blocks) public { + blockNumber += blocks; + } + + function harnessSetAccrualBlockNumber(uint _accrualblockNumber) public { + accrualBlockNumber = _accrualblockNumber; + } + + function harnessSetBalance(address account, uint amount) external { + accountTokens[account] = amount; + } + + function harnessSetBlockNumber(uint newBlockNumber) public { + blockNumber = newBlockNumber; + } + + function harnessSetExchangeRate(uint exchangeRate) public { + harnessExchangeRate = exchangeRate; + harnessExchangeRateStored = true; + } + + function harnessSetTotalSupply(uint totalSupply_) public { + totalSupply = totalSupply_; + } + + function getBlockNumber() internal view returns (uint) { + return blockNumber; + } +} + +contract CDaiDelegateScenario is CDaiDelegate { + function setTotalBorrows(uint totalBorrows_) public { + totalBorrows = totalBorrows_; + } + + function setTotalReserves(uint totalReserves_) public { + totalReserves = totalReserves_; + } + + function getBlockNumber() internal view returns (uint) { + ComptrollerScenario comptrollerScenario = ComptrollerScenario(address(comptroller)); + return comptrollerScenario.blockNumber(); + } +} + +contract CDaiDelegateMakerHarness is PotLike, VatLike, GemLike, DaiJoinLike { + /* Pot */ + + // exchangeRate + function chi() external view returns (uint) { return 1; } + + // totalSupply + function pie(address) external view returns (uint) { return 0; } + + // accrueInterest -> new exchangeRate + function drip() external returns (uint) { return 0; } + + // mint + function join(uint) external {} + + // redeem + function exit(uint) external {} + + /* Vat */ + + // internal dai balance + function dai(address) external view returns (uint) { return 0; } + + // approve pot transfer + function hope(address) external {} + + /* Gem (Dai) */ + + uint public totalSupply; + mapping (address => mapping (address => uint)) public allowance; + mapping (address => uint) public balanceOf; + function approve(address, uint) external {} + function transferFrom(address src, address dst, uint amount) external returns (bool) { + balanceOf[src] -= amount; + balanceOf[dst] += amount; + return true; + } + + function harnessSetBalance(address account, uint amount) external { + balanceOf[account] = amount; + } + + /* DaiJoin */ + + // vat contract + function vat() external returns (VatLike) { return this; } + + // dai contract + function dai() external returns (GemLike) { return this; } + + // dai -> internal dai + function join(address, uint) external payable {} + + // internal dai transfer out + function exit(address, uint) external {} +} diff --git a/tests/Contracts/CErc20Scenario.sol b/tests/Contracts/CErc20Scenario.sol deleted file mode 100644 index fd88658b2..000000000 --- a/tests/Contracts/CErc20Scenario.sol +++ /dev/null @@ -1,42 +0,0 @@ -pragma solidity ^0.5.12; - -import "../../contracts/CErc20Immutable.sol"; -import "./ComptrollerScenario.sol"; - -contract CErc20Scenario is CErc20Immutable { - constructor(address underlying_, - ComptrollerInterface comptroller_, - InterestRateModel interestRateModel_, - uint initialExchangeRateMantissa_, - string memory name_, - string memory symbol_, - uint8 decimals_, - address payable admin_) - CErc20Immutable( - underlying_, - comptroller_, - interestRateModel_, - initialExchangeRateMantissa_, - name_, - symbol_, - decimals_, - admin_) public {} - - function setTotalBorrows(uint totalBorrows_) public { - totalBorrows = totalBorrows_; - } - - function setTotalReserves(uint totalReserves_) public { - totalReserves = totalReserves_; - } - - /** - * @dev Function to simply retrieve block number - * This exists mainly for inheriting test contracts to stub this result. - */ - function getBlockNumber() internal view returns (uint) { - ComptrollerScenario comptrollerScenario = ComptrollerScenario(address(comptroller)); - - return comptrollerScenario.blockNumber(); - } -} diff --git a/tests/Contracts/CEtherHarness.sol b/tests/Contracts/CEtherHarness.sol index 24bd5e620..78db4e7ef 100644 --- a/tests/Contracts/CEtherHarness.sol +++ b/tests/Contracts/CEtherHarness.sol @@ -1,15 +1,12 @@ -pragma solidity ^0.5.12; +pragma solidity ^0.5.16; import "../../contracts/CEther.sol"; +import "./ComptrollerHarness.sol"; contract CEtherHarness is CEther { - uint harnessExchangeRate; uint public blockNumber = 100000; - /* - To support testing, we allow the contract to always fail `transfer`. - */ mapping (address => bool) public failTransferToAddresses; constructor(ComptrollerInterface comptroller_, @@ -28,10 +25,18 @@ contract CEtherHarness is CEther { decimals_, admin_) public {} - /** - * Fresh - * - */ + function doTransferOut(address payable to, uint amount) internal { + require(failTransferToAddresses[to] == false, "TOKEN_TRANSFER_OUT_FAILED"); + return super.doTransferOut(to, amount); + } + + function exchangeRateStoredInternal() internal view returns (MathError, uint) { + if (harnessExchangeRate != 0) { + return (MathError.NO_ERROR, harnessExchangeRate); + } + return super.exchangeRateStoredInternal(); + } + function getBlockNumber() internal view returns (uint) { return blockNumber; } @@ -44,25 +49,14 @@ contract CEtherHarness is CEther { blockNumber += blocks; } - /** - * Account Balances - * - */ function harnessSetBalance(address account, uint amount) external { accountTokens[account] = amount; } - /** - * Accrual Block Number - */ function harnessSetAccrualBlockNumber(uint _accrualblockNumber) public { accrualBlockNumber = _accrualblockNumber; } - /** - * Exchange Rate - * - */ function harnessSetTotalSupply(uint totalSupply_) public { totalSupply = totalSupply_; } @@ -85,54 +79,19 @@ contract CEtherHarness is CEther { harnessExchangeRate = exchangeRate; } - function exchangeRateStoredInternal() internal view returns (MathError, uint) { - if (harnessExchangeRate != 0) { - return (MathError.NO_ERROR, harnessExchangeRate); - } - - return super.exchangeRateStoredInternal(); - } - - /** - * Transfer Harness methods - * - */ - - /** - * @dev Specify `address, true` to cause transfers to address to fail. - * Once an address has been marked for failure it can be cleared by - * with `address, false` - */ function harnessSetFailTransferToAddress(address _to, bool _fail) public { failTransferToAddresses[_to] = _fail; } - function doTransferOut(address payable to, uint amount) internal { - require(failTransferToAddresses[to] == false, "TOKEN_TRANSFER_OUT_FAILED"); - return super.doTransferOut(to, amount); - } - - /** - * Spearmint? Nah, fresh mint. - * - */ function harnessMintFresh(address account, uint mintAmount) public returns (uint) { (uint err,) = super.mintFresh(account, mintAmount); return err; } - /** - * Redemption - * - */ function harnessRedeemFresh(address payable account, uint cTokenAmount, uint underlyingAmount) public returns (uint) { return super.redeemFresh(account, cTokenAmount, underlyingAmount); } - /** - * Borrowing - * - */ function harnessAccountBorrows(address account) public view returns (uint principal, uint interestIndex) { BorrowSnapshot memory snapshot = accountBorrows[account]; return (snapshot.principal, snapshot.interestIndex); @@ -159,10 +118,7 @@ contract CEtherHarness is CEther { (uint err,) = liquidateBorrowFresh(liquidator, borrower, repayAmount, cTokenCollateral); return err; } - /** - * Admin - * - */ + function harnessReduceReservesFresh(uint amount) public returns (uint) { return _reduceReservesFresh(amount); } @@ -179,15 +135,10 @@ contract CEtherHarness is CEther { return _setInterestRateModelFresh(newInterestRateModel); } - /** - * @dev set the interest rate model directly, with no interest accrual and no checks - * Intended for linking in FailableInterestRateModel to create failures in accrueInterest - */ function harnessSetInterestRateModel(address newInterestRateModelAddress) public { interestRateModel = InterestRateModel(newInterestRateModelAddress); } - /** safe token harnes **/ function harnessGetCashPrior() public payable returns (uint) { return getCashPrior(); } @@ -200,11 +151,44 @@ contract CEtherHarness is CEther { return doTransferOut(to, amount); } - function harnessCheckTransferIn(address from, uint amount) external payable returns (uint) { - return uint(checkTransferIn(from, amount)); - } - function harnessRequireNoError(uint error, string calldata message) external pure { requireNoError(error, message); } } + +contract CEtherScenario is CEther { + uint reserveFactor; + + constructor(string memory name_, + string memory symbol_, + uint8 decimals_, + address payable admin_, + ComptrollerInterface comptroller_, + InterestRateModel interestRateModel_, + uint initialExchangeRateMantissa) + CEther(comptroller_, + interestRateModel_, + initialExchangeRateMantissa, + name_, + symbol_, + decimals_, + admin_) public { + } + + function setTotalBorrows(uint totalBorrows_) public { + totalBorrows = totalBorrows_; + } + + function setTotalReserves(uint totalReserves_) public { + totalReserves = totalReserves_; + } + + function donate() public payable { + // no-op + } + + function getBlockNumber() internal view returns (uint) { + ComptrollerScenario comptrollerScenario = ComptrollerScenario(address(comptroller)); + return comptrollerScenario.blockNumber(); + } +} diff --git a/tests/Contracts/CEtherScenario.sol b/tests/Contracts/CEtherScenario.sol deleted file mode 100644 index 3b829560d..000000000 --- a/tests/Contracts/CEtherScenario.sol +++ /dev/null @@ -1,46 +0,0 @@ -pragma solidity ^0.5.16; - -import "../../contracts/CEther.sol"; -import "./ComptrollerScenario.sol"; - -contract CEtherScenario is CEther { - uint reserveFactor; - - constructor(string memory name_, - string memory symbol_, - uint8 decimals_, - address payable admin_, - ComptrollerInterface comptroller_, - InterestRateModel interestRateModel_, - uint initialExchangeRateMantissa) - CEther(comptroller_, - interestRateModel_, - initialExchangeRateMantissa, - name_, - symbol_, - decimals_, - admin_) public { - } - - function setTotalBorrows(uint totalBorrows_) public { - totalBorrows = totalBorrows_; - } - - function setTotalReserves(uint totalReserves_) public { - totalReserves = totalReserves_; - } - - function donate() public payable { - // no-op - } - - /** - * @dev Function to simply retrieve block number - * This exists mainly for inheriting test contracts to stub this result. - */ - function getBlockNumber() internal view returns (uint) { - ComptrollerScenario comptrollerScenario = ComptrollerScenario(address(comptroller)); - - return comptrollerScenario.blockNumber(); - } -} diff --git a/tests/Contracts/CEvil.sol b/tests/Contracts/CEvil.sol deleted file mode 100644 index ecbb3673d..000000000 --- a/tests/Contracts/CEvil.sol +++ /dev/null @@ -1,27 +0,0 @@ -pragma solidity ^0.5.16; - -import "./CErc20Scenario.sol"; - -contract CEvil is CErc20Scenario { - constructor(address underlying_, - ComptrollerInterface comptroller_, - InterestRateModel interestRateModel_, - uint initialExchangeRateMantissa_, - string memory name_, - string memory symbol_, - uint8 decimals_, - address payable admin_) - CErc20Scenario( - underlying_, - comptroller_, - interestRateModel_, - initialExchangeRateMantissa_, - name_, - symbol_, - decimals_, - admin_) public {} - - function evilSeize(CToken treasure, address liquidator, address borrower, uint seizeTokens) public returns (uint) { - return treasure.seize(liquidator, borrower, seizeTokens); - } -} diff --git a/tests/Contracts/CompScenario.sol b/tests/Contracts/CompHarness.sol similarity index 97% rename from tests/Contracts/CompScenario.sol rename to tests/Contracts/CompHarness.sol index 4ace117d3..55fa4e3c3 100644 --- a/tests/Contracts/CompScenario.sol +++ b/tests/Contracts/CompHarness.sol @@ -1,10 +1,9 @@ -pragma solidity ^0.5.12; +pragma solidity ^0.5.16; pragma experimental ABIEncoderV2; import "../../contracts/Governance/Comp.sol"; contract CompScenario is Comp { - constructor(address account) Comp(account) public {} function transferScenario(address[] calldata destinations, uint256 amount) external returns (bool) { diff --git a/tests/Contracts/ComptrollerBorked.sol b/tests/Contracts/ComptrollerBorked.sol deleted file mode 100644 index 0e8fcf245..000000000 --- a/tests/Contracts/ComptrollerBorked.sol +++ /dev/null @@ -1,18 +0,0 @@ -pragma solidity ^0.5.16; - -import "../../contracts/Comptroller.sol"; -import "../../contracts/PriceOracle.sol"; - -contract ComptrollerBorked { - - function _become(Unitroller unitroller, PriceOracle _oracle, uint _closeFactorMantissa, uint _maxAssets, bool _reinitializing) public { - _oracle; - _closeFactorMantissa; - _maxAssets; - _reinitializing; - - require(msg.sender == unitroller.admin(), "only unitroller admin can change brains"); - unitroller._acceptImplementation(); - } - -} diff --git a/tests/Contracts/ComptrollerHarness.sol b/tests/Contracts/ComptrollerHarness.sol index 38b9bf4af..45753fa5b 100644 --- a/tests/Contracts/ComptrollerHarness.sol +++ b/tests/Contracts/ComptrollerHarness.sol @@ -1,4 +1,4 @@ -pragma solidity ^0.5.12; +pragma solidity ^0.5.16; import "../../contracts/Comptroller.sol"; import "../../contracts/PriceOracle.sol"; @@ -6,17 +6,347 @@ import "../../contracts/PriceOracle.sol"; contract ComptrollerHarness is Comptroller { constructor() Comptroller() public {} - function getHypotheticalAccountLiquidity( - address account, - address cTokenModify, - uint redeemTokens, - uint borrowAmount) public view returns (uint, uint, uint) { - (Error err, uint liquidity, uint shortfall) = - super.getHypotheticalAccountLiquidityInternal(account, CToken(cTokenModify), redeemTokens, borrowAmount); - return (uint(err), liquidity, shortfall); - } - function setPauseGuardian(address harnessedPauseGuardian) public { pauseGuardian = harnessedPauseGuardian; } } + +contract ComptrollerScenario is Comptroller { + uint public blockNumber; + + constructor() Comptroller() public {} + + function membershipLength(CToken cToken) public view returns (uint) { + return accountAssets[address(cToken)].length; + } + + function fastForward(uint blocks) public returns (uint) { + blockNumber += blocks; + + return blockNumber; + } + + function setBlockNumber(uint number) public { + blockNumber = number; + } + + function _become(Unitroller unitroller) public { + super._become(unitroller); + } + + function unlist(CToken cToken) public { + markets[address(cToken)].isListed = false; + } +} + + +contract ComptrollerBorked { + function _become(Unitroller unitroller, PriceOracle _oracle, uint _closeFactorMantissa, uint _maxAssets, bool _reinitializing) public { + _oracle; + _closeFactorMantissa; + _maxAssets; + _reinitializing; + + require(msg.sender == unitroller.admin(), "only unitroller admin can change brains"); + unitroller._acceptImplementation(); + } +} + +contract BoolComptroller is ComptrollerInterface { + bool allowMint = true; + bool allowRedeem = true; + bool allowBorrow = true; + bool allowRepayBorrow = true; + bool allowLiquidateBorrow = true; + bool allowSeize = true; + bool allowTransfer = true; + + bool verifyMint = true; + bool verifyRedeem = true; + bool verifyBorrow = true; + bool verifyRepayBorrow = true; + bool verifyLiquidateBorrow = true; + bool verifySeize = true; + bool verifyTransfer = true; + + bool failCalculateSeizeTokens; + uint calculatedSeizeTokens; + + uint noError = 0; + uint opaqueError = noError + 11; // an arbitrary, opaque error code + + /*** Assets You Are In ***/ + + function enterMarkets(address[] calldata _cTokens) external returns (uint[] memory) { + _cTokens; + uint[] memory ret; + return ret; + } + + function exitMarket(address _cToken) external returns (uint) { + _cToken; + return noError; + } + + /*** Policy Hooks ***/ + + function mintAllowed(address _cToken, address _minter, uint _mintAmount) public returns (uint) { + _cToken; + _minter; + _mintAmount; + return allowMint ? noError : opaqueError; + } + + function mintVerify(address _cToken, address _minter, uint _mintAmount, uint _mintTokens) external { + _cToken; + _minter; + _mintAmount; + _mintTokens; + require(verifyMint, "mintVerify rejected mint"); + } + + function redeemAllowed(address _cToken, address _redeemer, uint _redeemTokens) public returns (uint) { + _cToken; + _redeemer; + _redeemTokens; + return allowRedeem ? noError : opaqueError; + } + + function redeemVerify(address _cToken, address _redeemer, uint _redeemAmount, uint _redeemTokens) external { + _cToken; + _redeemer; + _redeemAmount; + _redeemTokens; + require(verifyRedeem, "redeemVerify rejected redeem"); + } + + function borrowAllowed(address _cToken, address _borrower, uint _borrowAmount) public returns (uint) { + _cToken; + _borrower; + _borrowAmount; + return allowBorrow ? noError : opaqueError; + } + + function borrowVerify(address _cToken, address _borrower, uint _borrowAmount) external { + _cToken; + _borrower; + _borrowAmount; + require(verifyBorrow, "borrowVerify rejected borrow"); + } + + function repayBorrowAllowed( + address _cToken, + address _payer, + address _borrower, + uint _repayAmount) public returns (uint) { + _cToken; + _payer; + _borrower; + _repayAmount; + return allowRepayBorrow ? noError : opaqueError; + } + + function repayBorrowVerify( + address _cToken, + address _payer, + address _borrower, + uint _repayAmount, + uint _borrowerIndex) external { + _cToken; + _payer; + _borrower; + _repayAmount; + _borrowerIndex; + require(verifyRepayBorrow, "repayBorrowVerify rejected repayBorrow"); + } + + function liquidateBorrowAllowed( + address _cTokenBorrowed, + address _cTokenCollateral, + address _liquidator, + address _borrower, + uint _repayAmount) public returns (uint) { + _cTokenBorrowed; + _cTokenCollateral; + _liquidator; + _borrower; + _repayAmount; + return allowLiquidateBorrow ? noError : opaqueError; + } + + function liquidateBorrowVerify( + address _cTokenBorrowed, + address _cTokenCollateral, + address _liquidator, + address _borrower, + uint _repayAmount, + uint _seizeTokens) external { + _cTokenBorrowed; + _cTokenCollateral; + _liquidator; + _borrower; + _repayAmount; + _seizeTokens; + require(verifyLiquidateBorrow, "liquidateBorrowVerify rejected liquidateBorrow"); + } + + function seizeAllowed( + address _cTokenCollateral, + address _cTokenBorrowed, + address _borrower, + address _liquidator, + uint _seizeTokens) public returns (uint) { + _cTokenCollateral; + _cTokenBorrowed; + _liquidator; + _borrower; + _seizeTokens; + return allowSeize ? noError : opaqueError; + } + + function seizeVerify( + address _cTokenCollateral, + address _cTokenBorrowed, + address _liquidator, + address _borrower, + uint _seizeTokens) external { + _cTokenCollateral; + _cTokenBorrowed; + _liquidator; + _borrower; + _seizeTokens; + require(verifySeize, "seizeVerify rejected seize"); + } + + function transferAllowed( + address _cToken, + address _src, + address _dst, + uint _transferTokens) public returns (uint) { + _cToken; + _src; + _dst; + _transferTokens; + return allowTransfer ? noError : opaqueError; + } + + function transferVerify( + address _cToken, + address _src, + address _dst, + uint _transferTokens) external { + _cToken; + _src; + _dst; + _transferTokens; + require(verifyTransfer, "transferVerify rejected transfer"); + } + + /*** Special Liquidation Calculation ***/ + + function liquidateCalculateSeizeTokens( + address _cTokenBorrowed, + address _cTokenCollateral, + uint _repayAmount) public view returns (uint, uint) { + _cTokenBorrowed; + _cTokenCollateral; + _repayAmount; + return failCalculateSeizeTokens ? (opaqueError, 0) : (noError, calculatedSeizeTokens); + } + + /**** Mock Settors ****/ + + /*** Policy Hooks ***/ + + function setMintAllowed(bool allowMint_) public { + allowMint = allowMint_; + } + + function setMintVerify(bool verifyMint_) public { + verifyMint = verifyMint_; + } + + function setRedeemAllowed(bool allowRedeem_) public { + allowRedeem = allowRedeem_; + } + + function setRedeemVerify(bool verifyRedeem_) public { + verifyRedeem = verifyRedeem_; + } + + function setBorrowAllowed(bool allowBorrow_) public { + allowBorrow = allowBorrow_; + } + + function setBorrowVerify(bool verifyBorrow_) public { + verifyBorrow = verifyBorrow_; + } + + function setRepayBorrowAllowed(bool allowRepayBorrow_) public { + allowRepayBorrow = allowRepayBorrow_; + } + + function setRepayBorrowVerify(bool verifyRepayBorrow_) public { + verifyRepayBorrow = verifyRepayBorrow_; + } + + function setLiquidateBorrowAllowed(bool allowLiquidateBorrow_) public { + allowLiquidateBorrow = allowLiquidateBorrow_; + } + + function setLiquidateBorrowVerify(bool verifyLiquidateBorrow_) public { + verifyLiquidateBorrow = verifyLiquidateBorrow_; + } + + function setSeizeAllowed(bool allowSeize_) public { + allowSeize = allowSeize_; + } + + function setSeizeVerify(bool verifySeize_) public { + verifySeize = verifySeize_; + } + + function setTransferAllowed(bool allowTransfer_) public { + allowTransfer = allowTransfer_; + } + + function setTransferVerify(bool verifyTransfer_) public { + verifyTransfer = verifyTransfer_; + } + + /*** Liquidity/Liquidation Calculations ***/ + + function setCalculatedSeizeTokens(uint seizeTokens_) public { + calculatedSeizeTokens = seizeTokens_; + } + + function setFailCalculateSeizeTokens(bool shouldFail) public { + failCalculateSeizeTokens = shouldFail; + } +} + +contract EchoTypesComptroller is UnitrollerAdminStorage { + function stringy(string memory s) public pure returns(string memory) { + return s; + } + + function addresses(address a) public pure returns(address) { + return a; + } + + function booly(bool b) public pure returns(bool) { + return b; + } + + function listOInts(uint[] memory u) public pure returns(uint[] memory) { + return u; + } + + function reverty() public pure { + require(false, "gotcha sucka"); + } + + function becomeBrains(address payable unitroller) public { + Unitroller(unitroller)._acceptImplementation(); + } +} diff --git a/tests/Contracts/ComptrollerScenario.sol b/tests/Contracts/ComptrollerScenario.sol deleted file mode 100644 index d2c8ae624..000000000 --- a/tests/Contracts/ComptrollerScenario.sol +++ /dev/null @@ -1,42 +0,0 @@ -pragma solidity ^0.5.12; - -import "../../contracts/Comptroller.sol"; -import "../../contracts/PriceOracle.sol"; - -contract ComptrollerScenario is Comptroller { - uint public blockNumber; - - constructor() Comptroller() public {} - - function membershipLength(CToken cToken) public view returns (uint) { - return accountAssets[address(cToken)].length; - } - - function fastForward(uint blocks) public returns (uint) { - blockNumber += blocks; - - return blockNumber; - } - - function setBlockNumber(uint number) public { - blockNumber = number; - } - - function _become(Unitroller unitroller) public { - super._become(unitroller); - } - - function getHypotheticalAccountLiquidity( - address account, - address cTokenModify, - uint redeemTokens, - uint borrowAmount) public view returns (uint, uint, uint) { - (Error err, uint liquidity, uint shortfall) = - super.getHypotheticalAccountLiquidityInternal(account, CToken(cTokenModify), redeemTokens, borrowAmount); - return (uint(err), liquidity, shortfall); - } - - function unlist(CToken cToken) public { - markets[address(cToken)].isListed = false; - } -} diff --git a/tests/Contracts/ComptrollerScenarioG1.sol b/tests/Contracts/ComptrollerScenarioG1.sol index 8949d7fb0..9850f3f1b 100644 --- a/tests/Contracts/ComptrollerScenarioG1.sol +++ b/tests/Contracts/ComptrollerScenarioG1.sol @@ -1,8 +1,11 @@ -pragma solidity ^0.5.12; +pragma solidity ^0.5.16; import "../../contracts/ComptrollerG1.sol"; import "../../contracts/PriceOracle.sol"; +// XXX we should delete G1 everything... +// requires fork/deploy bytecode tests + contract ComptrollerScenarioG1 is ComptrollerG1 { uint public blockNumber; @@ -22,7 +25,12 @@ contract ComptrollerScenarioG1 is ComptrollerG1 { blockNumber = number; } - function _become(Unitroller unitroller, PriceOracle _oracle, uint _closeFactorMantissa, uint _maxAssets, bool reinitializing) public { + function _become( + Unitroller unitroller, + PriceOracle _oracle, + uint _closeFactorMantissa, + uint _maxAssets, + bool reinitializing) public { super._become(unitroller, _oracle, _closeFactorMantissa, _maxAssets, reinitializing); } diff --git a/tests/Contracts/Counter.sol b/tests/Contracts/Counter.sol index b3b459b7f..a0cc88536 100644 --- a/tests/Contracts/Counter.sol +++ b/tests/Contracts/Counter.sol @@ -1,4 +1,4 @@ -pragma solidity ^0.5.12; +pragma solidity ^0.5.16; contract Counter { uint public count; diff --git a/tests/Contracts/DSValueHarness.sol b/tests/Contracts/DSValueHarness.sol deleted file mode 100644 index d769eb3e6..000000000 --- a/tests/Contracts/DSValueHarness.sol +++ /dev/null @@ -1,32 +0,0 @@ -// Abstract contract for the full DSValue standard -// -- -pragma solidity ^0.5.12; - -contract DSValueHarness { - bool public has; - bytes32 public val; - - constructor(bytes32 initVal) public { - if (initVal != 0) { - has = true; - val = initVal; - } - } - - function peek() public view returns (bytes32, bool) { - return (val, has); - } - - function read() public view returns (bytes32) { - return val; - } - - function set(bytes32 _val) public { - val = _val; - has = true; - } - - function unset() public { - has = false; - } -} \ No newline at end of file diff --git a/tests/Contracts/EIP20Harness.sol b/tests/Contracts/EIP20Harness.sol deleted file mode 100644 index ceebd97d3..000000000 --- a/tests/Contracts/EIP20Harness.sol +++ /dev/null @@ -1,123 +0,0 @@ -/* -Implements EIP20 token standard: https://github.com/ethereum/EIPs/issues/20 -.*/ - -pragma solidity ^0.5.12; - -import "../../contracts/EIP20Interface.sol"; - -contract EIP20Harness is EIP20Interface { - - uint256 constant private MAX_UINT256 = 2**256 - 1; - uint256 public totalSupply; - mapping (address => uint256) public balances; - mapping (address => mapping (address => uint256)) public allowed; - - /* - To support testing, we can specify addresses for which transferFrom should fail and return false. - See `harnessSetFailTransferFromAddress` - */ - mapping (address => bool) public failTransferFromAddresses; - - /* - To support testing, we allow the contract to always fail `transfer`. - */ - mapping (address => bool) public failTransferToAddresses; - - - /* - NOTE: - The following variables are OPTIONAL vanities. One does not have to include them. - They allow one to customise the token contract & in no way influences the core functionality. - Some wallets/interfaces might not even bother to look at this information. - */ - string public name; //fancy name: eg Simon Bucks - uint8 public decimals; //How many decimals to show. - string public symbol; //An identifier: eg SBX - - constructor( - uint256 _initialAmount, - string memory _tokenName, - uint8 _decimalUnits, - string memory _tokenSymbol - ) public { - balances[msg.sender] = _initialAmount; // Give the creator all initial tokens - totalSupply = _initialAmount; // Update total supply - name = _tokenName; // Set the name for display purposes - decimals = _decimalUnits; // Amount of decimals for display purposes - symbol = _tokenSymbol; // Set the symbol for display purposes - } - - - /** - * @dev Specify `address, true` to cause transfers from address to fail. - * Once an address has been marked for failure it can be cleared by - * with `address, false` - */ - function harnessSetFailTransferFromAddress(address _from, bool _fail) public { - failTransferFromAddresses[_from] = _fail; - } - - /** - * @dev Specify `address, true` to cause transfers to address to fail. - * Once an address has been marked for failure it can be cleared by - * with `address, false` - */ - function harnessSetFailTransferToAddress(address _to, bool _fail) public { - failTransferToAddresses[_to] = _fail; - } - - function harnessSetBalance(address _account, uint _amount) public { - balances[_account] = _amount; - } - - function transfer(address _to, uint256 _value) public returns (bool success) { - require(balances[msg.sender] >= _value); - - // Added for testing purposes - if (failTransferToAddresses[_to]) { - return false; - } - - balances[msg.sender] -= _value; - balances[_to] += _value; - emit Transfer(msg.sender, _to, _value); - return true; - } - - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { - // Added for testing purposes - if (_from == address(0)) { - return false; - } - - // Added for testing purposes - if (failTransferFromAddresses[_from]) { - return false; - } - - uint256 allowance = allowed[_from][msg.sender]; - require(balances[_from] >= _value && allowance >= _value); - balances[_to] += _value; - balances[_from] -= _value; - if (allowance < MAX_UINT256) { - allowed[_from][msg.sender] -= _value; - } - emit Transfer(_from, _to, _value); - return true; - } - - function balanceOf(address _owner) public view returns (uint256 balance) { - return balances[_owner]; - } - - function approve(address _spender, uint256 _value) public returns (bool success) { - allowed[msg.sender][_spender] = _value; - emit Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) public view returns (uint256 remaining) { - return allowed[_owner][_spender]; - } -} diff --git a/tests/Contracts/EIP20NonCompliantHarness.sol b/tests/Contracts/EIP20NonCompliantHarness.sol deleted file mode 100644 index 6d48780b2..000000000 --- a/tests/Contracts/EIP20NonCompliantHarness.sol +++ /dev/null @@ -1,27 +0,0 @@ -/* -Implements `transfer` and `transferForm` with 64-bit return values, just to be -especially non-compliant and stress safe token. -.*/ - -pragma solidity ^0.5.16; - -contract EIP20NonCompliantHarness { - bool garbage; - - function transfer(address _to, uint256 _value) public returns (uint, uint) { - _to; - _value; // supress unused variable warning - garbage = false; - - return (1, 2); - } - - function transferFrom(address _from, address _to, uint256 _value) public returns (uint, uint) { - _from; - _to; - _value; // supress unused variable warning - garbage = false; - - return (1, 2); - } -} diff --git a/tests/Contracts/EIP20NonStandardReturnHarness.sol b/tests/Contracts/EIP20NonStandardReturnHarness.sol deleted file mode 100644 index 0e336fcc2..000000000 --- a/tests/Contracts/EIP20NonStandardReturnHarness.sol +++ /dev/null @@ -1,123 +0,0 @@ -/* -Implements EIP20 token standard: https://github.com/ethereum/EIPs/issues/20 -.*/ - -pragma solidity ^0.5.12; - -import "../../contracts/EIP20NonStandardInterface.sol"; - -// Note: the harness here does not throw for expected errors, which allows this -// harness to be used for Solidity tests. For JavaScript tests, use: EIP20NonStandardThrowHarness. -contract EIP20NonStandardReturnHarness is EIP20NonStandardInterface { - - uint256 constant private MAX_UINT256 = 2**256 - 1; - uint256 public totalSupply; - mapping (address => uint256) public balances; - mapping (address => mapping (address => uint256)) public allowed; - - /* - To support testing, we can specify addresses for which transferFrom should fail and return false. - See `harnessSetFailTransferFromAddress` - */ - mapping (address => bool) public failTransferFromAddresses; - - /* - To support testing, we allow the contract to always fail `transfer`. - */ - mapping (address => bool) public failTransferToAddresses; - - - /* - NOTE: - The following variables are OPTIONAL vanities. One does not have to include them. - They allow one to customise the token contract & in no way influences the core functionality. - Some wallets/interfaces might not even bother to look at this information. - */ - string public name; //fancy name: eg Simon Bucks - uint8 public decimals; //How many decimals to show. - string public symbol; //An identifier: eg SBX - - constructor( - uint256 _initialAmount, - string memory _tokenName, - uint8 _decimalUnits, - string memory _tokenSymbol - ) public { - balances[msg.sender] = _initialAmount; // Give the creator all initial tokens - totalSupply = _initialAmount; // Update total supply - name = _tokenName; // Set the name for display purposes - decimals = _decimalUnits; // Amount of decimals for display purposes - symbol = _tokenSymbol; // Set the symbol for display purposes - } - - - /** - * @dev Specify `address, true` to cause transfers from address to fail. - * Once an address has been marked for failure it can be cleared by - * with `address, false` - */ - function harnessSetFailTransferFromAddress(address _from, bool _fail) public { - failTransferFromAddresses[_from] = _fail; - } - - /** - * @dev Specify `address, true` to cause transfers to address to fail. - * Once an address has been marked for failure it can be cleared by - * with `address, false` - */ - function harnessSetFailTransferToAddress(address _to, bool _fail) public { - failTransferToAddresses[_to] = _fail; - } - - function harnessSetBalance(address _account, uint _amount) public { - balances[_account] = _amount; - } - - function transfer(address _to, uint256 _value) public { - require(balances[msg.sender] >= _value); - - // Added for testing purposes - if (failTransferToAddresses[_to]) { - return; - } - - balances[msg.sender] -= _value; - balances[_to] += _value; - emit Transfer(msg.sender, _to, _value); - } - - function transferFrom(address _from, address _to, uint256 _value) public { - // Added for testing purposes - if (_from == address(0)) { - return; - } - - // Added for testing purposes - if (failTransferFromAddresses[_from]) { - return; - } - - uint256 allowance = allowed[_from][msg.sender]; - require(balances[_from] >= _value && allowance >= _value); - balances[_to] += _value; - balances[_from] -= _value; - if (allowance < MAX_UINT256) { - allowed[_from][msg.sender] -= _value; - } - emit Transfer(_from, _to, _value); - } - - function balanceOf(address _owner) public view returns (uint256 balance) { - return balances[_owner]; - } - - function approve(address _spender, uint256 _value) public returns (bool success) { - allowed[msg.sender][_spender] = _value; - emit Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) public view returns (uint256 remaining) { - return allowed[_owner][_spender]; - } -} diff --git a/tests/Contracts/EIP20NonStandardThrowHarness.sol b/tests/Contracts/EIP20NonStandardThrowHarness.sol deleted file mode 100644 index 7887c3c22..000000000 --- a/tests/Contracts/EIP20NonStandardThrowHarness.sol +++ /dev/null @@ -1,123 +0,0 @@ -/* -Implements EIP20 token standard: https://github.com/ethereum/EIPs/issues/20 -.*/ - -pragma solidity ^0.5.12; - -import "../../contracts/EIP20NonStandardInterface.sol"; - -// Note: the throw harness here always throws for errors, which is more realistic and useful -// for JavaScript tests. For Solidity tests, use: EIP20NonStandardReturnHarness. -contract EIP20NonStandardThrowHarness is EIP20NonStandardInterface { - - uint256 constant private MAX_UINT256 = 2**256 - 1; - uint256 public totalSupply; - mapping (address => uint256) public balances; - mapping (address => mapping (address => uint256)) public allowed; - - /* - To support testing, we can specify addresses for which transferFrom should fail and return false. - See `harnessSetFailTransferFromAddress` - */ - mapping (address => bool) public failTransferFromAddresses; - - /* - To support testing, we allow the contract to always fail `transfer`. - */ - mapping (address => bool) public failTransferToAddresses; - - - /* - NOTE: - The following variables are OPTIONAL vanities. One does not have to include them. - They allow one to customise the token contract & in no way influences the core functionality. - Some wallets/interfaces might not even bother to look at this information. - */ - string public name; //fancy name: eg Simon Bucks - uint8 public decimals; //How many decimals to show. - string public symbol; //An identifier: eg SBX - - constructor( - uint256 _initialAmount, - string memory _tokenName, - uint8 _decimalUnits, - string memory _tokenSymbol - ) public { - balances[msg.sender] = _initialAmount; // Give the creator all initial tokens - totalSupply = _initialAmount; // Update total supply - name = _tokenName; // Set the name for display purposes - decimals = _decimalUnits; // Amount of decimals for display purposes - symbol = _tokenSymbol; // Set the symbol for display purposes - } - - - /** - * @dev Specify `address, true` to cause transfers from address to fail. - * Once an address has been marked for failure it can be cleared by - * with `address, false` - */ - function harnessSetFailTransferFromAddress(address _from, bool _fail) public { - failTransferFromAddresses[_from] = _fail; - } - - /** - * @dev Specify `address, true` to cause transfers to address to fail. - * Once an address has been marked for failure it can be cleared by - * with `address, false` - */ - function harnessSetFailTransferToAddress(address _to, bool _fail) public { - failTransferToAddresses[_to] = _fail; - } - - function harnessSetBalance(address _account, uint _amount) public { - balances[_account] = _amount; - } - - function transfer(address _to, uint256 _value) public { - require(balances[msg.sender] >= _value); - - // Added for testing purposes - if (failTransferToAddresses[_to]) { - revert(); - } - - balances[msg.sender] -= _value; - balances[_to] += _value; - emit Transfer(msg.sender, _to, _value); - } - - function transferFrom(address _from, address _to, uint256 _value) public { - // Added for testing purposes - if (_from == address(0)) { - revert(); - } - - // Added for testing purposes - if (failTransferFromAddresses[_from]) { - revert(); - } - - uint256 allowance = allowed[_from][msg.sender]; - require(balances[_from] >= _value && allowance >= _value); - balances[_to] += _value; - balances[_from] -= _value; - if (allowance < MAX_UINT256) { - allowed[_from][msg.sender] -= _value; - } - emit Transfer(_from, _to, _value); - } - - function balanceOf(address _owner) public view returns (uint256 balance) { - return balances[_owner]; - } - - function approve(address _spender, uint256 _value) public returns (bool success) { - allowed[msg.sender][_spender] = _value; - emit Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) public view returns (uint256 remaining) { - return allowed[_owner][_spender]; - } -} diff --git a/tests/Contracts/ERC20.sol b/tests/Contracts/ERC20.sol index 4b38f696f..91729305a 100644 --- a/tests/Contracts/ERC20.sol +++ b/tests/Contracts/ERC20.sol @@ -1,15 +1,156 @@ -pragma solidity ^0.5.12; +pragma solidity ^0.5.16; -import "./ERC20Basic.sol"; +import "../../contracts/SafeMath.sol"; + +interface ERC20Base { + event Approval(address indexed owner, address indexed spender, uint256 value); + event Transfer(address indexed from, address indexed to, uint256 value); + function totalSupply() external view returns (uint256); + function allowance(address owner, address spender) external view returns (uint256); + function approve(address spender, uint256 value) external returns (bool); + function balanceOf(address who) external view returns (uint256); +} + +contract ERC20 is ERC20Base { + function transfer(address to, uint256 value) external returns (bool); + function transferFrom(address from, address to, uint256 value) external returns (bool); +} + +contract ERC20NS is ERC20Base { + function transfer(address to, uint256 value) external; + function transferFrom(address from, address to, uint256 value) external; +} /** - * @title ERC20 interface - * @dev see https://github.com/ethereum/EIPs/issues/20 + * @title Standard ERC20 token + * @dev Implementation of the basic standard token. + * See https://github.com/ethereum/EIPs/issues/20 */ -contract ERC20 is ERC20Basic { - function allowance(address owner, address spender) public view returns (uint256); - function transferFrom(address from, address to, uint256 value) public returns (bool); - function approve(address spender, uint256 value) public returns (bool); +contract StandardToken is ERC20 { + using SafeMath for uint256; - event Approval(address indexed owner, address indexed spender, uint256 value); -} \ No newline at end of file + string public name; + string public symbol; + uint8 public decimals; + uint256 public totalSupply; + mapping (address => mapping (address => uint256)) public allowance; + mapping(address => uint256) public balanceOf; + + constructor(uint256 _initialAmount, string memory _tokenName, uint8 _decimalUnits, string memory _tokenSymbol) public { + totalSupply = _initialAmount; + balanceOf[msg.sender] = _initialAmount; + name = _tokenName; + symbol = _tokenSymbol; + decimals = _decimalUnits; + } + + function transfer(address dst, uint256 amount) external returns (bool) { + balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, "Insufficient balance"); + balanceOf[dst] = balanceOf[dst].add(amount, "Balance overflow"); + emit Transfer(msg.sender, dst, amount); + return true; + } + + function transferFrom(address src, address dst, uint256 amount) external returns (bool) { + allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, "Insufficient allowance"); + balanceOf[src] = balanceOf[src].sub(amount, "Insufficient balance"); + balanceOf[dst] = balanceOf[dst].add(amount, "Balance overflow"); + emit Transfer(src, dst, amount); + return true; + } + + function approve(address _spender, uint256 amount) external returns (bool) { + allowance[msg.sender][_spender] = amount; + emit Approval(msg.sender, _spender, amount); + return true; + } +} + +/** + * @title Non-Standard ERC20 token + * @dev Version of ERC20 with no return values for `transfer` and `transferFrom` + * See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca + */ +contract NonStandardToken is ERC20NS { + using SafeMath for uint256; + + string public name; + uint8 public decimals; + string public symbol; + uint256 public totalSupply; + mapping (address => mapping (address => uint256)) public allowance; + mapping(address => uint256) public balanceOf; + + constructor(uint256 _initialAmount, string memory _tokenName, uint8 _decimalUnits, string memory _tokenSymbol) public { + totalSupply = _initialAmount; + balanceOf[msg.sender] = _initialAmount; + name = _tokenName; + symbol = _tokenSymbol; + decimals = _decimalUnits; + } + + function transfer(address dst, uint256 amount) external { + balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, "Insufficient balance"); + balanceOf[dst] = balanceOf[dst].add(amount, "Balance overflow"); + emit Transfer(msg.sender, dst, amount); + } + + function transferFrom(address src, address dst, uint256 amount) external { + allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, "Insufficient allowance"); + balanceOf[src] = balanceOf[src].sub(amount, "Insufficient balance"); + balanceOf[dst] = balanceOf[dst].add(amount, "Balance overflow"); + emit Transfer(src, dst, amount); + } + + function approve(address _spender, uint256 amount) external returns (bool) { + allowance[msg.sender][_spender] = amount; + emit Approval(msg.sender, _spender, amount); + return true; + } +} + +contract ERC20Harness is StandardToken { + // To support testing, we can specify addresses for which transferFrom should fail and return false + mapping (address => bool) public failTransferFromAddresses; + + // To support testing, we allow the contract to always fail `transfer`. + mapping (address => bool) public failTransferToAddresses; + + constructor(uint256 _initialAmount, string memory _tokenName, uint8 _decimalUnits, string memory _tokenSymbol) public + StandardToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) {} + + function harnessSetFailTransferFromAddress(address src, bool _fail) public { + failTransferFromAddresses[src] = _fail; + } + + function harnessSetFailTransferToAddress(address dst, bool _fail) public { + failTransferToAddresses[dst] = _fail; + } + + function harnessSetBalance(address _account, uint _amount) public { + balanceOf[_account] = _amount; + } + + function transfer(address dst, uint256 amount) external returns (bool success) { + // Added for testing purposes + if (failTransferToAddresses[dst]) { + return false; + } + balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, "Insufficient balance"); + balanceOf[dst] = balanceOf[dst].add(amount, "Balance overflow"); + emit Transfer(msg.sender, dst, amount); + return true; + } + + function transferFrom(address src, address dst, uint256 amount) external returns (bool success) { + // Added for testing purposes + if (failTransferFromAddresses[src]) { + return false; + } + allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, "Insufficient allowance"); + balanceOf[src] = balanceOf[src].sub(amount, "Insufficient balance"); + balanceOf[dst] = balanceOf[dst].add(amount, "Balance overflow"); + emit Transfer(src, dst, amount); + return true; + } +} diff --git a/tests/Contracts/ERC20Basic.sol b/tests/Contracts/ERC20Basic.sol deleted file mode 100644 index 61d1bc0c9..000000000 --- a/tests/Contracts/ERC20Basic.sol +++ /dev/null @@ -1,14 +0,0 @@ -pragma solidity ^0.5.12; - - -/** - * @title ERC20Basic - * @dev Simpler version of ERC20 interface - * See https://github.com/ethereum/EIPs/issues/179 - */ -contract ERC20Basic { - function totalSupply() public view returns (uint256); - function balanceOf(address who) public view returns (uint256); - function transfer(address to, uint256 value) public returns (bool); - event Transfer(address indexed from, address indexed to, uint256 value); -} \ No newline at end of file diff --git a/tests/Contracts/ERC20BasicNS.sol b/tests/Contracts/ERC20BasicNS.sol deleted file mode 100644 index bf405e191..000000000 --- a/tests/Contracts/ERC20BasicNS.sol +++ /dev/null @@ -1,13 +0,0 @@ -pragma solidity ^0.5.12; - -/** - * @title ERC20BasicNS (Non-Standard) - * @dev Version of ERC20 with no return values for `transfer` and `transferFrom` - * See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca - */ -contract ERC20BasicNS { - function totalSupply() public view returns (uint256); - function balanceOf(address who) public view returns (uint256); - function transfer(address to, uint256 value) public; - event Transfer(address indexed from, address indexed to, uint256 value); -} \ No newline at end of file diff --git a/tests/Contracts/ERC20NS.sol b/tests/Contracts/ERC20NS.sol deleted file mode 100644 index b6b521e97..000000000 --- a/tests/Contracts/ERC20NS.sol +++ /dev/null @@ -1,16 +0,0 @@ -pragma solidity ^0.5.12; - -import "./ERC20BasicNS.sol"; - -/** - * @title ERC20 interface (non-standard) - * @dev Version of ERC20 with no return values for `transfer` and `transferFrom` - * See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca - */ -contract ERC20NS is ERC20BasicNS { - function allowance(address owner, address spender) public view returns (uint256); - function transferFrom(address from, address to, uint256 value) public; - function approve(address spender, uint256 value) public returns (bool); - - event Approval(address indexed owner, address indexed spender, uint256 value); -} \ No newline at end of file diff --git a/tests/Contracts/ERC20NonView.sol b/tests/Contracts/ERC20NonView.sol deleted file mode 100644 index cd167bb46..000000000 --- a/tests/Contracts/ERC20NonView.sol +++ /dev/null @@ -1,196 +0,0 @@ -pragma solidity ^0.5.12; - -import "./SafeMath.sol"; - -/** - * @title Standard ERC20 token with nothing as a "view" - * - * @dev Implementation of the basic standard token. - * https://eips.ethereum.org/EIPS/eip-20 - * Originally based on code by FirstBlood: - * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol - * - * This implementation emits additional Approval events, allowing applications to reconstruct the allowance status for - * all accounts just by listening to said events. Note that this isn't required by the specification, and other - * compliant implementations may not do it. - */ -contract ERC20NonView { - event Transfer(address indexed from, address indexed to, uint256 value); - - event Approval(address indexed owner, address indexed spender, uint256 value); - - using SafeMath for uint256; - - mapping (address => uint256) public _balances; - - mapping (address => mapping (address => uint256)) public _allowed; - - uint256 public _totalSupply; - - /** - * @dev Total number of tokens in existence - */ - function totalSupply() public returns (uint256) { - _totalSupply = _totalSupply; - return _totalSupply; - } - - /** - * @dev Gets the balance of the specified address. - * @param owner The address to query the balance of. - * @return A uint256 representing the amount owned by the passed address. - */ - function balanceOf(address owner) public returns (uint256) { - _totalSupply = _totalSupply; - return _balances[owner]; - } - - /** - * @dev Function to check the amount of tokens that an owner allowed to a spender. - * @param owner address The address which owns the funds. - * @param spender address The address which will spend the funds. - * @return A uint256 specifying the amount of tokens still available for the spender. - */ - function allowance(address owner, address spender) public returns (uint256) { - _totalSupply = _totalSupply; - return _allowed[owner][spender]; - } - - /** - * @dev Transfer token to a specified address - * @param to The address to transfer to. - * @param value The amount to be transferred. - */ - function transfer(address to, uint256 value) public returns (bool) { - _transfer(msg.sender, to, value); - return true; - } - - /** - * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. - * Beware that changing an allowance with this method brings the risk that someone may use both the old - * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this - * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: - * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - * @param spender The address which will spend the funds. - * @param value The amount of tokens to be spent. - */ - function approve(address spender, uint256 value) public returns (bool) { - _approve(msg.sender, spender, value); - return true; - } - - /** - * @dev Transfer tokens from one address to another. - * Note that while this function emits an Approval event, this is not required as per the specification, - * and other compliant implementations may not emit the event. - * @param from address The address which you want to send tokens from - * @param to address The address which you want to transfer to - * @param value uint256 the amount of tokens to be transferred - */ - function transferFrom(address from, address to, uint256 value) public returns (bool) { - _transfer(from, to, value); - _approve(from, msg.sender, _allowed[from][msg.sender].sub(value)); - return true; - } - - /** - * @dev Increase the amount of tokens that an owner allowed to a spender. - * approve should be called when _allowed[msg.sender][spender] == 0. To increment - * allowed value is better to use this function to avoid 2 calls (and wait until - * the first transaction is mined) - * From MonolithDAO Token.sol - * Emits an Approval event. - * @param spender The address which will spend the funds. - * @param addedValue The amount of tokens to increase the allowance by. - */ - function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { - _approve(msg.sender, spender, _allowed[msg.sender][spender].add(addedValue)); - return true; - } - - /** - * @dev Decrease the amount of tokens that an owner allowed to a spender. - * approve should be called when _allowed[msg.sender][spender] == 0. To decrement - * allowed value is better to use this function to avoid 2 calls (and wait until - * the first transaction is mined) - * From MonolithDAO Token.sol - * Emits an Approval event. - * @param spender The address which will spend the funds. - * @param subtractedValue The amount of tokens to decrease the allowance by. - */ - function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { - _approve(msg.sender, spender, _allowed[msg.sender][spender].sub(subtractedValue)); - return true; - } - - /** - * @dev Transfer token for a specified addresses - * @param from The address to transfer from. - * @param to The address to transfer to. - * @param value The amount to be transferred. - */ - function _transfer(address from, address to, uint256 value) internal { - require(to != address(0)); - - _balances[from] = _balances[from].sub(value); - _balances[to] = _balances[to].add(value); - emit Transfer(from, to, value); - } - - /** - * @dev Internal function that mints an amount of the token and assigns it to - * an account. This encapsulates the modification of balances such that the - * proper events are emitted. - * @param account The account that will receive the created tokens. - * @param value The amount that will be created. - */ - function _mint(address account, uint256 value) internal { - require(account != address(0)); - - _totalSupply = _totalSupply.add(value); - _balances[account] = _balances[account].add(value); - emit Transfer(address(0), account, value); - } - - /** - * @dev Internal function that burns an amount of the token of a given - * account. - * @param account The account whose tokens will be burnt. - * @param value The amount that will be burnt. - */ - function _burn(address account, uint256 value) internal { - require(account != address(0)); - - _totalSupply = _totalSupply.sub(value); - _balances[account] = _balances[account].sub(value); - emit Transfer(account, address(0), value); - } - - /** - * @dev Approve an address to spend another addresses' tokens. - * @param owner The address that owns the tokens. - * @param spender The address that will spend the tokens. - * @param value The number of tokens that can be spent. - */ - function _approve(address owner, address spender, uint256 value) internal { - require(spender != address(0)); - require(owner != address(0)); - - _allowed[owner][spender] = value; - emit Approval(owner, spender, value); - } - - /** - * @dev Internal function that burns an amount of the token of a given - * account, deducting from the sender's allowance for said account. Uses the - * internal burn function. - * Emits an Approval event (reflecting the reduced allowance). - * @param account The account whose tokens will be burnt. - * @param value The amount that will be burnt. - */ - function _burnFrom(address account, uint256 value) internal { - _burn(account, value); - _approve(account, msg.sender, _allowed[account][msg.sender].sub(value)); - } -} diff --git a/tests/Contracts/EchoTypesComptroller.sol b/tests/Contracts/EchoTypesComptroller.sol deleted file mode 100644 index eda46da84..000000000 --- a/tests/Contracts/EchoTypesComptroller.sol +++ /dev/null @@ -1,31 +0,0 @@ -pragma solidity ^0.5.12; - -import "../../contracts/ComptrollerStorage.sol"; -import "../../contracts/Unitroller.sol"; - -contract EchoTypesComptroller is UnitrollerAdminStorage { - - function stringy(string memory s) public pure returns(string memory) { - return s; - } - - function addresses(address a) public pure returns(address) { - return a; - } - - function booly(bool b) public pure returns(bool) { - return b; - } - - function listOInts(uint[] memory u) public pure returns(uint[] memory) { - return u; - } - - function reverty() public pure { - require(false, "gotcha sucka"); - } - - function becomeBrains(address payable unitroller) public { - Unitroller(unitroller)._acceptImplementation(); - } -} diff --git a/tests/Contracts/EvilToken.sol b/tests/Contracts/EvilToken.sol index 1b61f0262..d52086341 100644 --- a/tests/Contracts/EvilToken.sol +++ b/tests/Contracts/EvilToken.sol @@ -1,59 +1,42 @@ -pragma solidity ^0.5.12; +pragma solidity ^0.5.16; -import "./StandardToken.sol"; +import "./FaucetToken.sol"; /** * @title The Compound Evil Test Token * @author Compound * @notice A simple test token that fails certain operations */ -contract EvilToken is StandardToken { - string public name; - string public symbol; - uint8 public decimals; +contract EvilToken is FaucetToken { bool public fail; - constructor(uint256 _initialAmount, string memory _tokenName, uint8 _decimalUnits, string memory _tokenSymbol) public { - totalSupply_ = _initialAmount; - balances[msg.sender] = _initialAmount; - name = _tokenName; - symbol = _tokenSymbol; - decimals = _decimalUnits; + constructor(uint256 _initialAmount, string memory _tokenName, uint8 _decimalUnits, string memory _tokenSymbol) public + FaucetToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) { fail = true; } - function setFail(bool _fail) public { + function setFail(bool _fail) external { fail = _fail; } - /** - * @dev Arbitrarily adds tokens to any account - */ - function allocateTo(address _owner, uint256 value) public { - balances[_owner] += value; - totalSupply_ += value; - emit Transfer(address(this), _owner, value); - } - - /** - * @dev Fail to transfer - */ - function transfer(address to, uint256 value) public returns (bool) { + function transfer(address dst, uint256 amount) external returns (bool) { if (fail) { return false; } - - return super.transfer(to, value); + balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount); + balanceOf[dst] = balanceOf[dst].add(amount); + emit Transfer(msg.sender, dst, amount); + return true; } - /** - * @dev Fail to transfer from - */ - function transferFrom(address from, address to, uint256 value) public returns (bool) { + function transferFrom(address src, address dst, uint256 amount) external returns (bool) { if (fail) { return false; } - - return super.transferFrom(from, to, value); + balanceOf[src] = balanceOf[src].sub(amount); + balanceOf[dst] = balanceOf[dst].add(amount); + allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount); + emit Transfer(src, dst, amount); + return true; } } diff --git a/tests/Contracts/FalseMarker.sol b/tests/Contracts/FalseMarker.sol new file mode 100644 index 000000000..792ec5aa2 --- /dev/null +++ b/tests/Contracts/FalseMarker.sol @@ -0,0 +1,9 @@ +pragma solidity ^0.5.16; + +contract FalseMarkerMethodComptroller { + bool public constant isComptroller = false; +} + +contract FalseMarkerMethodInterestRateModel { + bool public constant isInterestRateModel = false; +} diff --git a/tests/Contracts/FalseMarkerMethodComptroller.sol b/tests/Contracts/FalseMarkerMethodComptroller.sol deleted file mode 100644 index 890c9d89a..000000000 --- a/tests/Contracts/FalseMarkerMethodComptroller.sol +++ /dev/null @@ -1,6 +0,0 @@ -pragma solidity ^0.5.12; -import "./BoolComptroller.sol"; - -contract FalseMarkerMethodComptroller is BoolComptroller { - bool public isComptroller = false; -} diff --git a/tests/Contracts/FalseMarkerMethodInterestRateModel.sol b/tests/Contracts/FalseMarkerMethodInterestRateModel.sol deleted file mode 100644 index 1bc66fd1c..000000000 --- a/tests/Contracts/FalseMarkerMethodInterestRateModel.sol +++ /dev/null @@ -1,34 +0,0 @@ -pragma solidity ^0.5.12; - -import "../../contracts/InterestRateModel.sol"; - -/** - * @title Implements the interest rate model marker function but returns false - * @author Compound - */ -contract FalseMarkerMethodInterestRateModel is InterestRateModel { - /** - * For exhaustive testing, this contract implements the marker function but returns false instead of the intended true - */ - bool public constant isInterestRateModel = false; - - uint borrowRate; - - constructor(uint borrowRate_) public { - borrowRate = borrowRate_; - } - - function getBorrowRate(uint _cash, uint _borrows, uint _reserves) view public returns (uint) { - _cash; // unused - _borrows; // unused - _reserves; // unused - return borrowRate; - } - - function getSupplyRate(uint _cash, uint _borrows, uint _reserves, uint _reserveFactor) external view returns (uint) { - _cash; // unused - _borrows; // unused - _reserves; // unused - return borrowRate * (1 - _reserveFactor); - } -} \ No newline at end of file diff --git a/tests/Contracts/FaucetNonStandardToken.sol b/tests/Contracts/FaucetNonStandardToken.sol deleted file mode 100644 index ff1339f9d..000000000 --- a/tests/Contracts/FaucetNonStandardToken.sol +++ /dev/null @@ -1,31 +0,0 @@ -pragma solidity ^0.5.12; - -import "./NonStandardToken.sol"; - -/** - * @title The Compound Faucet Test Token - * @author Compound - * @notice A simple test token that lets anyone get more of it. - */ -contract FaucetNonStandardToken is NonStandardToken { - string public name; - string public symbol; - uint8 public decimals; - - constructor(uint256 _initialAmount, string memory _tokenName, uint8 _decimalUnits, string memory _tokenSymbol) public { - totalSupply_ = _initialAmount; - balances[msg.sender] = _initialAmount; - name = _tokenName; - symbol = _tokenSymbol; - decimals = _decimalUnits; - } - - /** - * @dev Arbitrarily adds tokens to any account - */ - function allocateTo(address _owner, uint256 value) public { - balances[_owner] += value; - totalSupply_ += value; - emit Transfer(address(this), _owner, value); - } -} diff --git a/tests/Contracts/FaucetToken.sol b/tests/Contracts/FaucetToken.sol index 735986d1e..929d1606e 100644 --- a/tests/Contracts/FaucetToken.sol +++ b/tests/Contracts/FaucetToken.sol @@ -1,31 +1,136 @@ -pragma solidity ^0.5.12; +pragma solidity ^0.5.16; -import "./StandardToken.sol"; +import "./ERC20.sol"; /** - * @title The Compound Faucet Test Token - * @author Compound - * @notice A simple test token that lets anyone get more of it. - */ + * @title The Compound Faucet Test Token + * @author Compound + * @notice A simple test token that lets anyone get more of it. + */ contract FaucetToken is StandardToken { + constructor(uint256 _initialAmount, string memory _tokenName, uint8 _decimalUnits, string memory _tokenSymbol) public + StandardToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) { + } + + function allocateTo(address _owner, uint256 value) public { + balanceOf[_owner] += value; + totalSupply += value; + emit Transfer(address(this), _owner, value); + } +} + +/** + * @title The Compound Faucet Test Token (non-standard) + * @author Compound + * @notice A simple test token that lets anyone get more of it. + */ +contract FaucetNonStandardToken is NonStandardToken { + constructor(uint256 _initialAmount, string memory _tokenName, uint8 _decimalUnits, string memory _tokenSymbol) public + NonStandardToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) { + } + + function allocateTo(address _owner, uint256 value) public { + balanceOf[_owner] += value; + totalSupply += value; + emit Transfer(address(this), _owner, value); + } +} + +/** + * @title The Compound Faucet Re-Entrant Test Token + * @author Compound + * @notice A test token that is malicious and tries to re-enter callers + */ +contract FaucetTokenReEntrantHarness { + using SafeMath for uint256; + + event Transfer(address indexed from, address indexed to, uint256 value); + event Approval(address indexed owner, address indexed spender, uint256 value); + string public name; string public symbol; uint8 public decimals; + uint256 totalSupply_; + mapping (address => mapping (address => uint256)) allowance_; + mapping (address => uint256) balanceOf_; - constructor(uint256 _initialAmount, string memory _tokenName, uint8 _decimalUnits, string memory _tokenSymbol) public { + bytes public reEntryCallData; + string public reEntryFun; + + constructor(uint256 _initialAmount, string memory _tokenName, uint8 _decimalUnits, string memory _tokenSymbol, bytes memory _reEntryCallData, string memory _reEntryFun) public { totalSupply_ = _initialAmount; - balances[msg.sender] = _initialAmount; + balanceOf_[msg.sender] = _initialAmount; name = _tokenName; symbol = _tokenSymbol; decimals = _decimalUnits; + reEntryCallData = _reEntryCallData; + reEntryFun = _reEntryFun; + } + + modifier reEnter(string memory funName) { + string memory _reEntryFun = reEntryFun; + if (compareStrings(_reEntryFun, funName)) { + reEntryFun = ""; // Clear re-entry fun + (bool success, bytes memory returndata) = msg.sender.call(reEntryCallData); + assembly { + if eq(success, 0) { + revert(add(returndata, 0x20), returndatasize()) + } + } + } + + _; + } + + function compareStrings(string memory a, string memory b) internal pure returns (bool) { + return keccak256(abi.encodePacked((a))) == keccak256(abi.encodePacked((b))); } - /** - * @dev Arbitrarily adds tokens to any account - */ function allocateTo(address _owner, uint256 value) public { - balances[_owner] += value; + balanceOf_[_owner] += value; totalSupply_ += value; emit Transfer(address(this), _owner, value); } + + function totalSupply() public reEnter("totalSupply") returns (uint256) { + return totalSupply_; + } + + function allowance(address owner, address spender) public reEnter("allowance") returns (uint256 remaining) { + return allowance_[owner][spender]; + } + + function approve(address spender, uint256 amount) public reEnter("approve") returns (bool success) { + _approve(msg.sender, spender, amount); + return true; + } + + function balanceOf(address owner) public reEnter("balanceOf") returns (uint256 balance) { + return balanceOf_[owner]; + } + + function transfer(address dst, uint256 amount) public reEnter("transfer") returns (bool success) { + _transfer(msg.sender, dst, amount); + return true; + } + + function transferFrom(address src, address dst, uint256 amount) public reEnter("transferFrom") returns (bool success) { + _transfer(src, dst, amount); + _approve(src, msg.sender, allowance_[src][msg.sender].sub(amount)); + return true; + } + + function _approve(address owner, address spender, uint256 amount) internal { + require(spender != address(0)); + require(owner != address(0)); + allowance_[owner][spender] = amount; + emit Approval(owner, spender, amount); + } + + function _transfer(address src, address dst, uint256 amount) internal { + require(dst != address(0)); + balanceOf_[src] = balanceOf_[src].sub(amount); + balanceOf_[dst] = balanceOf_[dst].add(amount); + emit Transfer(src, dst, amount); + } } diff --git a/tests/Contracts/FaucetTokenReEntrantHarness.sol b/tests/Contracts/FaucetTokenReEntrantHarness.sol deleted file mode 100644 index 03f070e30..000000000 --- a/tests/Contracts/FaucetTokenReEntrantHarness.sol +++ /dev/null @@ -1,78 +0,0 @@ -pragma solidity ^0.5.12; - -import "./ERC20NonView.sol"; - -/** - * @title The Compound Faucet Re-Entrant Test Token - * @author Compound - * @notice A test token that is malicious and tries to re-enter callers - */ -contract FaucetTokenReEntrantHarness is ERC20NonView { - string public name; - string public symbol; - uint8 public decimals; - bytes public reEntryCallData; - string public reEntryFun; - - constructor(uint256 _initialAmount, string memory _tokenName, uint8 _decimalUnits, string memory _tokenSymbol, bytes memory _reEntryCallData, string memory _reEntryFun) public { - _totalSupply = _initialAmount; - _balances[msg.sender] = _initialAmount; - name = _tokenName; - symbol = _tokenSymbol; - decimals = _decimalUnits; - reEntryCallData = _reEntryCallData; - reEntryFun = _reEntryFun; - } - - modifier reEnter(string memory funName) { - string memory _reEntryFun = reEntryFun; - if (compareStrings(_reEntryFun, funName)) { - reEntryFun = ""; // Clear re-entry fun - (bool success, bytes memory returndata) = msg.sender.call(reEntryCallData); - assembly { - if eq(success, 0) { - revert(add(returndata, 0x20), returndatasize) - } - } - } - - _; - } - - function compareStrings(string memory a, string memory b) internal pure returns (bool) { - return keccak256(abi.encodePacked((a))) == keccak256(abi.encodePacked((b))); - } - - /** - * @dev Arbitrarily adds tokens to any account - */ - function allocateTo(address _owner, uint256 value) public { - _balances[_owner] += value; - _totalSupply += value; - emit Transfer(address(this), _owner, value); - } - - function totalSupply() public reEnter("totalSupply") returns (uint256) { - return super.totalSupply(); - } - - function balanceOf(address owner) public reEnter("balanceOf") returns (uint256 balance) { - return super.balanceOf(owner); - } - - function transfer(address dst, uint256 amount) public reEnter("transfer") returns (bool success) { - return super.transfer(dst, amount); - } - - function transferFrom(address src, address dst, uint256 amount) public reEnter("transferFrom") returns (bool success) { - return super.transferFrom(src, dst, amount); - } - - function approve(address spender, uint256 amount) public reEnter("approve") returns (bool success) { - return super.approve(spender, amount); - } - - function allowance(address owner, address spender) public reEnter("allowance") returns (uint256 remaining) { - return super.allowance(owner, spender); - } -} diff --git a/tests/Contracts/FeeToken.sol b/tests/Contracts/FeeToken.sol index 990703f09..110e64ed2 100644 --- a/tests/Contracts/FeeToken.sol +++ b/tests/Contracts/FeeToken.sol @@ -1,7 +1,6 @@ pragma solidity ^0.5.16; import "./FaucetToken.sol"; -import "./SafeMath.sol"; /** * @title Fee Token @@ -9,37 +8,39 @@ import "./SafeMath.sol"; * @notice A simple test token that charges fees on transfer. Used to mock USDT. */ contract FeeToken is FaucetToken { - using SafeMath for uint256; - uint public basisPointFee; address public owner; constructor( - uint256 _initialAmount, - string memory _tokenName, - uint8 _decimalUnits, - string memory _tokenSymbol, + uint256 _initialAmount, + string memory _tokenName, + uint8 _decimalUnits, + string memory _tokenSymbol, uint _basisPointFee, address _owner - ) - FaucetToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) - public - { + ) FaucetToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) public { basisPointFee = _basisPointFee; owner = _owner; } - function transfer(address _to, uint _value) public returns (bool) { - uint fee = (_value.mul(basisPointFee)).div(10000); - balances[owner] = balances[owner].add(fee); - balances[msg.sender] = balances[msg.sender].sub(fee); - return super.transfer(_to, _value.sub(fee)); + function transfer(address dst, uint amount) public returns (bool) { + uint fee = amount.mul(basisPointFee).div(10000); + uint net = amount.sub(fee); + balanceOf[owner] = balanceOf[owner].add(fee); + balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount); + balanceOf[dst] = balanceOf[dst].add(net); + emit Transfer(msg.sender, dst, amount); + return true; } - function transferFrom(address _from, address _to, uint _value) public returns (bool) { - uint fee = (_value.mul(basisPointFee)).div(10000); - balances[owner] = balances[owner].add(fee); - balances[_from] = balances[_from].sub(fee); - return super.transferFrom(_from, _to, _value.sub(fee)); + function transferFrom(address src, address dst, uint amount) public returns (bool) { + uint fee = amount.mul(basisPointFee).div(10000); + uint net = amount.sub(fee); + balanceOf[owner] = balanceOf[owner].add(fee); + balanceOf[src] = balanceOf[src].sub(amount); + balanceOf[dst] = balanceOf[dst].add(net); + allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount); + emit Transfer(src, dst, amount); + return true; } } diff --git a/tests/Contracts/FixedPriceOracle.sol b/tests/Contracts/FixedPriceOracle.sol index b924591d7..1306d5095 100644 --- a/tests/Contracts/FixedPriceOracle.sol +++ b/tests/Contracts/FixedPriceOracle.sol @@ -1,10 +1,9 @@ -pragma solidity ^0.5.12; +pragma solidity ^0.5.16; import "../../contracts/PriceOracle.sol"; contract FixedPriceOracle is PriceOracle { uint public price; - bool public constant isPriceOracle = true; constructor(uint _price) public { price = _price; diff --git a/tests/Contracts/FullErc20Interface.sol b/tests/Contracts/FullErc20Interface.sol deleted file mode 100644 index a8942a9ca..000000000 --- a/tests/Contracts/FullErc20Interface.sol +++ /dev/null @@ -1,63 +0,0 @@ -pragma solidity ^0.5.12; - -/** - * @title ERC 20 Token Standard Interface Including optional functions - * https://eips.ethereum.org/EIPS/eip-20 - */ -interface FullErc20Interface { - - function name() external view returns (string memory); - function symbol() external view returns (string memory); - function decimals() external view returns (uint8); - - /** - * @notice Get the total number of tokens in circulation - * @return The supply of tokens - */ - function totalSupply() external view returns (uint256); - - /** - * @notice Gets the balance of the specified address - * @param owner The address from which the balance will be retrieved - * @return The balance - */ - function balanceOf(address owner) external view returns (uint256 balance); - - /** - * @notice Transfer `amount` tokens from `msg.sender` to `dst` - * @param dst The address of the destination account - * @param amount The number of tokens to transfer - * @return Whether or not the transfer succeeded - */ - function transfer(address dst, uint256 amount) external returns (bool success); - - /** - * @notice Transfer `amount` tokens from `src` to `dst` - * @param src The address of the source account - * @param dst The address of the destination account - * @param amount The number of tokens to transfer - * @return Whether or not the transfer succeeded - */ - function transferFrom(address src, address dst, uint256 amount) external returns (bool success); - - /** - * @notice Approve `spender` to transfer up to `amount` from `src` - * @dev This will overwrite the approval amount for `spender` - * and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve) - * @param spender The address of the account which may transfer tokens - * @param amount The number of tokens that are approved (-1 means infinite) - * @return Whether or not the approval succeeded - */ - function approve(address spender, uint256 amount) external returns (bool success); - - /** - * @notice Get the current allowance from `owner` for `spender` - * @param owner The address of the account which owns the tokens to be spent - * @param spender The address of the account which may transfer tokens - * @return The number of tokens allowed to be spent (-1 means infinite) - */ - function allowance(address owner, address spender) external view returns (uint256 remaining); - - event Transfer(address indexed from, address indexed to, uint256 amount); - event Approval(address indexed owner, address indexed spender, uint256 amount); -} \ No newline at end of file diff --git a/tests/Contracts/GovernorAlphaHarness.sol b/tests/Contracts/GovernorAlphaHarness.sol index aee159e3a..fc0179220 100644 --- a/tests/Contracts/GovernorAlphaHarness.sol +++ b/tests/Contracts/GovernorAlphaHarness.sol @@ -1,11 +1,10 @@ -pragma solidity ^0.5.12; +pragma solidity ^0.5.16; pragma experimental ABIEncoderV2; import "../../contracts/Governance/GovernorAlpha.sol"; contract GovernorAlphaHarness is GovernorAlpha { - - constructor(address timelock_, address comp_, address guardian_) GovernorAlpha(timelock_, comp_, guardian_) public {} + constructor(address timelock_, address comp_, address guardian_) GovernorAlpha(timelock_, comp_, guardian_) public {} function votingPeriod() public pure returns (uint) { return 240; } } diff --git a/tests/Contracts/InterestRateModelHarness.sol b/tests/Contracts/InterestRateModelHarness.sol index d253c7a73..414cd5e0f 100644 --- a/tests/Contracts/InterestRateModelHarness.sol +++ b/tests/Contracts/InterestRateModelHarness.sol @@ -1,4 +1,4 @@ -pragma solidity ^0.5.12; +pragma solidity ^0.5.16; import "../../contracts/InterestRateModel.sol"; @@ -7,7 +7,6 @@ import "../../contracts/InterestRateModel.sol"; * @author Compound */ contract InterestRateModelHarness is InterestRateModel { - bool public constant isInterestRateModel = true; uint public constant opaqueBorrowFailureCode = 20; bool public failBorrowRate; uint public borrowRate; diff --git a/tests/Contracts/MockMCD.sol b/tests/Contracts/MockMCD.sol index 392da181f..19de30afc 100644 --- a/tests/Contracts/MockMCD.sol +++ b/tests/Contracts/MockMCD.sol @@ -1,4 +1,4 @@ -pragma solidity ^0.5.12; +pragma solidity ^0.5.16; contract MockPot { diff --git a/tests/Contracts/NonStandardToken.sol b/tests/Contracts/NonStandardToken.sol deleted file mode 100644 index d39f1f8f2..000000000 --- a/tests/Contracts/NonStandardToken.sol +++ /dev/null @@ -1,122 +0,0 @@ -pragma solidity ^0.5.12; - -import "./BasicTokenNS.sol"; -import "./ERC20NS.sol"; - - -/** - * @title Non-Standard ERC20 token - * - * @dev Version of ERC20 with no return values for `transfer` and `transferFrom` - * See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca - * Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol - */ -contract NonStandardToken is ERC20NS, BasicTokenNS { - - mapping (address => mapping (address => uint256)) internal allowed; - - - /** - * @dev Transfer tokens from one address to another - * @param _from address The address which you want to send tokens from - * @param _to address The address which you want to transfer to - * @param _value uint256 the amount of tokens to be transferred - */ - function transferFrom( - address _from, - address _to, - uint256 _value - ) - public - { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - - balances[_from] = balances[_from].sub(_value); - balances[_to] = balances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - emit Transfer(_from, _to, _value); - } - - /** - * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. - * Beware that changing an allowance with this method brings the risk that someone may use both the old - * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this - * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: - * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - * @param _spender The address which will spend the funds. - * @param _value The amount of tokens to be spent. - */ - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - emit Approval(msg.sender, _spender, _value); - return true; - } - - /** - * @dev Function to check the amount of tokens that an owner allowed to a spender. - * @param _owner address The address which owns the funds. - * @param _spender address The address which will spend the funds. - * @return A uint256 specifying the amount of tokens still available for the spender. - */ - function allowance( - address _owner, - address _spender - ) - public - view - returns (uint256) - { - return allowed[_owner][_spender]; - } - - /** - * @dev Increase the amount of tokens that an owner allowed to a spender. - * approve should be called when allowed[_spender] == 0. To increment - * allowed value is better to use this function to avoid 2 calls (and wait until - * the first transaction is mined) - * From MonolithDAO Token.sol - * @param _spender The address which will spend the funds. - * @param _addedValue The amount of tokens to increase the allowance by. - */ - function increaseApproval( - address _spender, - uint256 _addedValue - ) - public - returns (bool) - { - allowed[msg.sender][_spender] = ( - allowed[msg.sender][_spender].add(_addedValue)); - emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - - /** - * @dev Decrease the amount of tokens that an owner allowed to a spender. - * approve should be called when allowed[_spender] == 0. To decrement - * allowed value is better to use this function to avoid 2 calls (and wait until - * the first transaction is mined) - * From MonolithDAO Token.sol - * @param _spender The address which will spend the funds. - * @param _subtractedValue The amount of tokens to decrease the allowance by. - */ - function decreaseApproval( - address _spender, - uint256 _subtractedValue - ) - public - returns (bool) - { - uint256 oldValue = allowed[msg.sender][_spender]; - if (_subtractedValue > oldValue) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); - } - emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - -} \ No newline at end of file diff --git a/tests/Contracts/NotPriceOracle.sol b/tests/Contracts/NotPriceOracle.sol deleted file mode 100644 index 503c52b5f..000000000 --- a/tests/Contracts/NotPriceOracle.sol +++ /dev/null @@ -1,6 +0,0 @@ -pragma solidity ^0.5.12; - -contract NotPriceOracle { - // marker function - bool public constant isPriceOracle = false; -} diff --git a/tests/Contracts/SafeMath.sol b/tests/Contracts/SafeMath.sol deleted file mode 100644 index b93625ec8..000000000 --- a/tests/Contracts/SafeMath.sol +++ /dev/null @@ -1,52 +0,0 @@ -pragma solidity ^0.5.12; - - -/** - * @title SafeMath - * @dev Math operations with safety checks that throw on error - */ -library SafeMath { - - /** - * @dev Multiplies two numbers, throws on overflow. - */ - function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { - // Gas optimization: this is cheaper than asserting 'a' not being zero, but the - // benefit is lost if 'b' is also tested. - // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 - if (a == 0) { - return 0; - } - - c = a * b; - assert(c / a == b); - return c; - } - - /** - * @dev Integer division of two numbers, truncating the quotient. - */ - function div(uint256 a, uint256 b) internal pure returns (uint256) { - // assert(b > 0); // Solidity automatically throws when dividing by 0 - // uint256 c = a / b; - // assert(a == b * c + a % b); // There is no case in which this doesn't hold - return a / b; - } - - /** - * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). - */ - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - assert(b <= a); - return a - b; - } - - /** - * @dev Adds two numbers, throws on overflow. - */ - function add(uint256 a, uint256 b) internal pure returns (uint256 c) { - c = a + b; - assert(c >= a); - return c; - } -} \ No newline at end of file diff --git a/tests/Contracts/StandardToken.sol b/tests/Contracts/StandardToken.sol deleted file mode 100644 index 26f704b45..000000000 --- a/tests/Contracts/StandardToken.sol +++ /dev/null @@ -1,124 +0,0 @@ -pragma solidity ^0.5.16; - -import "./BasicToken.sol"; -import "./ERC20.sol"; - - -/** - * @title Standard ERC20 token - * - * @dev Implementation of the basic standard token. - * https://github.com/ethereum/EIPs/issues/20 - * Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol - */ -contract StandardToken is ERC20, BasicToken { - - mapping (address => mapping (address => uint256)) internal allowed; - - - /** - * @dev Transfer tokens from one address to another - * @param _from address The address which you want to send tokens from - * @param _to address The address which you want to transfer to - * @param _value uint256 the amount of tokens to be transferred - */ - function transferFrom( - address _from, - address _to, - uint256 _value - ) - public - returns (bool) - { - require(_to != address(0)); - require(_value <= balances[_from]); - require(_value <= allowed[_from][msg.sender]); - - balances[_from] = balances[_from].sub(_value); - balances[_to] = balances[_to].add(_value); - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - emit Transfer(_from, _to, _value); - return true; - } - - /** - * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. - * Beware that changing an allowance with this method brings the risk that someone may use both the old - * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this - * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: - * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - * @param _spender The address which will spend the funds. - * @param _value The amount of tokens to be spent. - */ - function approve(address _spender, uint256 _value) public returns (bool) { - allowed[msg.sender][_spender] = _value; - emit Approval(msg.sender, _spender, _value); - return true; - } - - /** - * @dev Function to check the amount of tokens that an owner allowed to a spender. - * @param _owner address The address which owns the funds. - * @param _spender address The address which will spend the funds. - * @return A uint256 specifying the amount of tokens still available for the spender. - */ - function allowance( - address _owner, - address _spender - ) - public - view - returns (uint256) - { - return allowed[_owner][_spender]; - } - - /** - * @dev Increase the amount of tokens that an owner allowed to a spender. - * approve should be called when allowed[_spender] == 0. To increment - * allowed value is better to use this function to avoid 2 calls (and wait until - * the first transaction is mined) - * From MonolithDAO Token.sol - * @param _spender The address which will spend the funds. - * @param _addedValue The amount of tokens to increase the allowance by. - */ - function increaseApproval( - address _spender, - uint256 _addedValue - ) - public - returns (bool) - { - allowed[msg.sender][_spender] = ( - allowed[msg.sender][_spender].add(_addedValue)); - emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - - /** - * @dev Decrease the amount of tokens that an owner allowed to a spender. - * approve should be called when allowed[_spender] == 0. To decrement - * allowed value is better to use this function to avoid 2 calls (and wait until - * the first transaction is mined) - * From MonolithDAO Token.sol - * @param _spender The address which will spend the funds. - * @param _subtractedValue The amount of tokens to decrease the allowance by. - */ - function decreaseApproval( - address _spender, - uint256 _subtractedValue - ) - public - returns (bool) - { - uint256 oldValue = allowed[msg.sender][_spender]; - if (_subtractedValue > oldValue) { - allowed[msg.sender][_spender] = 0; - } else { - allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); - } - emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); - return true; - } - -} \ No newline at end of file diff --git a/tests/Contracts/Structs.sol b/tests/Contracts/Structs.sol index 951c1a41b..366109117 100644 --- a/tests/Contracts/Structs.sol +++ b/tests/Contracts/Structs.sol @@ -1,4 +1,4 @@ -pragma solidity ^0.5.12; +pragma solidity ^0.5.16; pragma experimental ABIEncoderV2; contract Structs { diff --git a/tests/Contracts/TetherInterface.sol b/tests/Contracts/TetherInterface.sol index 2897babcc..6f891a13a 100644 --- a/tests/Contracts/TetherInterface.sol +++ b/tests/Contracts/TetherInterface.sol @@ -1,10 +1,7 @@ -pragma solidity ^0.5.12; +pragma solidity ^0.5.16; import "../../contracts/EIP20Interface.sol"; -/** - * @title ERC 20 Token Standard Interface - * https://eips.ethereum.org/EIPS/eip-20 - */ + contract TetherInterface is EIP20Interface { function setParams(uint newBasisPoints, uint newMaxFee) external; } \ No newline at end of file diff --git a/tests/Contracts/TimelockHarness.sol b/tests/Contracts/TimelockHarness.sol index 8ec01e4e8..be0f6c4a1 100644 --- a/tests/Contracts/TimelockHarness.sol +++ b/tests/Contracts/TimelockHarness.sol @@ -1,13 +1,10 @@ -pragma solidity ^0.5.12; +pragma solidity ^0.5.16; import "../../contracts/Timelock.sol"; contract TimelockHarness is Timelock { - constructor(address admin_, uint delay_) - Timelock(admin_, delay_) - public - { + Timelock(admin_, delay_) public { } function harnessSetPendingAdmin(address pendingAdmin_) public { @@ -17,5 +14,10 @@ contract TimelockHarness is Timelock { function harnessSetAdmin(address admin_) public { admin = admin_; } - } + +contract TimelockTest is Timelock { + constructor(address admin_, uint delay_) Timelock(admin_, 2 days) public { + delay = delay_; + } +} \ No newline at end of file diff --git a/tests/Contracts/TimelockTest.sol b/tests/Contracts/TimelockTest.sol deleted file mode 100644 index 2633a35ee..000000000 --- a/tests/Contracts/TimelockTest.sol +++ /dev/null @@ -1,11 +0,0 @@ -pragma solidity ^0.5.12; - -import "../../contracts/Timelock.sol"; - -contract TimelockTest is Timelock { - - constructor(address admin_, uint delay_) Timelock(admin_, 2 days) public { - delay = delay_; - } - -} \ No newline at end of file diff --git a/tests/PriceOracleProxyTest.js b/tests/PriceOracleProxyTest.js index 6bfa27ce9..42d5b3885 100644 --- a/tests/PriceOracleProxyTest.js +++ b/tests/PriceOracleProxyTest.js @@ -12,7 +12,7 @@ const { describe('PriceOracleProxy', () => { let root, accounts; - let oracle, backingOracle, cEth, cUsdc, cSai, cDai, cOther; + let oracle, backingOracle, cEth, cUsdc, cSai, cDai, cUsdt, cOther; let daiOracleKey = address(2); beforeEach(async () => { @@ -21,6 +21,7 @@ describe('PriceOracleProxy', () => { cUsdc = await makeCToken({comptroller: cEth.comptroller, supportMarket: true}); cSai = await makeCToken({comptroller: cEth.comptroller, supportMarket: true}); cDai = await makeCToken({comptroller: cEth.comptroller, supportMarket: true}); + cUsdt = await makeCToken({comptroller: cEth.comptroller, supportMarket: true}); cOther = await makeCToken({comptroller: cEth.comptroller, supportMarket: true}); backingOracle = await makePriceOracle(); @@ -31,7 +32,8 @@ describe('PriceOracleProxy', () => { cEth._address, cUsdc._address, cSai._address, - cDai._address + cDai._address, + cUsdt._address ] ); }); @@ -66,6 +68,11 @@ describe('PriceOracleProxy', () => { let configuredCDAI = await call(oracle, "cDaiAddress"); expect(configuredCDAI).toEqual(cDai._address); }); + + it("sets address of cUSDT", async () => { + let configuredCUSDT = await call(oracle, "cUsdtAddress"); + expect(configuredCUSDT).toEqual(cUsdt._address); + }); }); describe("getUnderlyingPrice", () => { @@ -97,6 +104,7 @@ describe('PriceOracleProxy', () => { await send(backingOracle, "setDirectPrice", [address(2), etherMantissa(8)]); await readAndVerifyProxyPrice(cDai, 8); await readAndVerifyProxyPrice(cUsdc, 5e12); + await readAndVerifyProxyPrice(cUsdt, 5e12); }); it("proxies for whitelisted tokens", async () => { diff --git a/tests/SpinaramaTest.js b/tests/SpinaramaTest.js index 62cd1fce0..798ed7a27 100644 --- a/tests/SpinaramaTest.js +++ b/tests/SpinaramaTest.js @@ -39,9 +39,14 @@ describe('Spinarama', () => { await minerStop(); const p1 = send(cToken, 'mint', [11], {from}); const p2 = send(cToken, 'mint', [10], {from}); - await minerStart(); - expect(await p1).toHaveTokenFailure('TOKEN_INSUFFICIENT_ALLOWANCE', 'MINT_TRANSFER_IN_NOT_POSSIBLE'); - expect(await p2).toSucceed(); + await expect(minerStart()).rejects.toRevert("revert Insufficient allowance"); + try { + await p1; + } catch (err) { + // hack: miner start reverts with correct message, but tx gives us a weird tx obj. ganache bug? + expect(err.toString()).toContain("reverted by the EVM"); + } + await expect(p2).resolves.toSucceed(); expect(await balanceOf(cToken, from)).toEqualNumber(10); }); }); diff --git a/tests/Tokens/accrueInterestTest.js b/tests/Tokens/accrueInterestTest.js index 7796206c0..1d080b0d1 100644 --- a/tests/Tokens/accrueInterestTest.js +++ b/tests/Tokens/accrueInterestTest.js @@ -18,7 +18,6 @@ async function pretendBlock(cToken, accrualBlock = blockNumber, deltaBlocks = 1) } async function preAccrue(cToken) { - await pretendBlock(cToken, blockNumber, 0); await setBorrowRate(cToken, borrowRate); await send(cToken.interestRateModel, 'setFailBorrowRate', [false]); await send(cToken, 'harnessExchangeRateDetails', [0, 0, 0]); @@ -38,12 +37,14 @@ describe('CToken', () => { describe('accrueInterest', () => { it('reverts if the interest rate is absurdly high', async () => { + await pretendBlock(cToken, blockNumber, 1); expect(await call(cToken, 'getBorrowRateMaxMantissa')).toEqualNumber(etherMantissa(0.000005)); // 0.0005% per block await setBorrowRate(cToken, 0.001e-2); // 0.0010% per block await expect(send(cToken, 'accrueInterest')).rejects.toRevert("revert borrow rate is absurdly high"); }); it('fails if new borrow rate calculation fails', async () => { + await pretendBlock(cToken, blockNumber, 1); await send(cToken.interestRateModel, 'setFailBorrowRate', [true]); await expect(send(cToken, 'accrueInterest')).rejects.toRevert("revert INTEREST_RATE_MODEL_ERROR"); }); diff --git a/tests/Tokens/borrowAndRepayCEtherTest.js b/tests/Tokens/borrowAndRepayCEtherTest.js index b455b841f..edff95ddd 100644 --- a/tests/Tokens/borrowAndRepayCEtherTest.js +++ b/tests/Tokens/borrowAndRepayCEtherTest.js @@ -38,6 +38,7 @@ async function borrowFresh(cToken, borrower, borrowAmount) { } async function borrow(cToken, borrower, borrowAmount, opts = {}) { + await send(cToken, 'harnessFastForward', [1]); return send(cToken, 'borrow', [borrowAmount], {from: borrower}); } @@ -54,10 +55,12 @@ async function repayBorrowFresh(cToken, payer, borrower, repayAmount) { } async function repayBorrow(cToken, borrower, repayAmount) { + await send(cToken, 'harnessFastForward', [1]); return send(cToken, 'repayBorrow', [], {from: borrower, value: repayAmount}); } async function repayBorrowBehalf(cToken, payer, borrower, repayAmount) { + await send(cToken, 'harnessFastForward', [1]); return send(cToken, 'repayBorrowBehalf', [borrower], {from: payer, value: repayAmount}); } @@ -155,6 +158,7 @@ describe('CEther', function () { it("emits a borrow failure if interest accrual fails", async () => { await send(cToken.interestRateModel, 'setFailBorrowRate', [true]); + await send(cToken, 'harnessFastForward', [1]); await expect(borrow(cToken, borrower, borrowAmount)).rejects.toRevert("revert INTEREST_RATE_MODEL_ERROR"); }); diff --git a/tests/Tokens/borrowAndRepayTest.js b/tests/Tokens/borrowAndRepayTest.js index c1d57d4f4..7ada8eeca 100644 --- a/tests/Tokens/borrowAndRepayTest.js +++ b/tests/Tokens/borrowAndRepayTest.js @@ -32,6 +32,8 @@ async function borrowFresh(cToken, borrower, borrowAmount) { } async function borrow(cToken, borrower, borrowAmount, opts = {}) { + // make sure to have a block delta so we accrue interest + await send(cToken, 'harnessFastForward', [1]); return send(cToken, 'borrow', [borrowAmount], {from: borrower}); } @@ -52,10 +54,14 @@ async function repayBorrowFresh(cToken, payer, borrower, repayAmount) { } async function repayBorrow(cToken, borrower, repayAmount) { + // make sure to have a block delta so we accrue interest + await send(cToken, 'harnessFastForward', [1]); return send(cToken, 'repayBorrow', [repayAmount], {from: borrower}); } async function repayBorrowBehalf(cToken, payer, borrower, repayAmount) { + // make sure to have a block delta so we accrue interest + await send(cToken, 'harnessFastForward', [1]); return send(cToken, 'repayBorrowBehalf', [borrower, repayAmount], {from: payer}); } @@ -192,12 +198,12 @@ describe('CToken', function () { it("fails if insufficient approval", async() => { await preApprove(cToken, payer, 1); - expect(await repayBorrowFresh(cToken, payer, borrower, repayAmount)).toHaveTokenFailure('TOKEN_INSUFFICIENT_ALLOWANCE', 'REPAY_BORROW_TRANSFER_IN_NOT_POSSIBLE'); + await expect(repayBorrowFresh(cToken, payer, borrower, repayAmount)).rejects.toRevert('revert Insufficient allowance'); }); it("fails if insufficient balance", async() => { await setBalance(cToken.underlying, payer, 1); - expect(await repayBorrowFresh(cToken, payer, borrower, repayAmount)).toHaveTokenFailure('TOKEN_INSUFFICIENT_BALANCE', 'REPAY_BORROW_TRANSFER_IN_NOT_POSSIBLE'); + await expect(repayBorrowFresh(cToken, payer, borrower, repayAmount)).rejects.toRevert('revert Insufficient balance'); }); @@ -265,7 +271,7 @@ describe('CToken', function () { it("returns error from repayBorrowFresh without emitting any extra logs", async () => { await setBalance(cToken.underlying, borrower, 1); - expect(await repayBorrow(cToken, borrower, repayAmount)).toHaveTokenFailure('TOKEN_INSUFFICIENT_BALANCE', 'REPAY_BORROW_TRANSFER_IN_NOT_POSSIBLE'); + await expect(repayBorrow(cToken, borrower, repayAmount)).rejects.toRevert('revert Insufficient balance'); }); it("returns success from repayBorrowFresh and repays the right amount", async () => { @@ -286,7 +292,7 @@ describe('CToken', function () { it("fails gracefully if payer does not have enough", async () => { await setBalance(cToken.underlying, borrower, 3); await fastForward(cToken); - expect(await repayBorrow(cToken, borrower, -1)).toHaveTokenFailure('TOKEN_INSUFFICIENT_BALANCE', 'REPAY_BORROW_TRANSFER_IN_NOT_POSSIBLE'); + await expect(repayBorrow(cToken, borrower, -1)).rejects.toRevert('revert Insufficient balance'); }); }); @@ -305,7 +311,7 @@ describe('CToken', function () { it("returns error from repayBorrowFresh without emitting any extra logs", async () => { await setBalance(cToken.underlying, payer, 1); - expect(await repayBorrowBehalf(cToken, payer, borrower, repayAmount)).toHaveTokenFailure('TOKEN_INSUFFICIENT_BALANCE', 'REPAY_BORROW_TRANSFER_IN_NOT_POSSIBLE'); + await expect(repayBorrowBehalf(cToken, payer, borrower, repayAmount)).rejects.toRevert('revert Insufficient balance'); }); it("returns success from repayBorrowFresh and repays the right amount", async () => { diff --git a/tests/Tokens/cTokenTest.js b/tests/Tokens/cTokenTest.js index 4327e4e12..efe13910b 100644 --- a/tests/Tokens/cTokenTest.js +++ b/tests/Tokens/cTokenTest.js @@ -113,6 +113,8 @@ describe('CToken', function () { it("reverts if interest accrual fails", async () => { await send(cToken.interestRateModel, 'setFailBorrowRate', [true]); + // make sure we accrue interest + await send(cToken, 'harnessFastForward', [1]); await expect(send(cToken, 'borrowBalanceCurrent', [borrower])).rejects.toRevert("revert INTEREST_RATE_MODEL_ERROR"); }); diff --git a/tests/Tokens/liquidateTest.js b/tests/Tokens/liquidateTest.js index 8fe9e9172..ac22a114d 100644 --- a/tests/Tokens/liquidateTest.js +++ b/tests/Tokens/liquidateTest.js @@ -42,6 +42,9 @@ async function liquidateFresh(cToken, liquidator, borrower, repayAmount, cTokenC } async function liquidate(cToken, liquidator, borrower, repayAmount, cTokenCollateral) { + // make sure to have a block delta so we accrue interest + await fastForward(cToken, 1); + await fastForward(cTokenCollateral, 1); return send(cToken, 'liquidateBorrow', [borrower, repayAmount, cTokenCollateral._address], {from: liquidator}); } @@ -235,4 +238,4 @@ describe('CToken', function () { ])); }); }); -}); \ No newline at end of file +}); diff --git a/tests/Tokens/mintAndRedeemCEtherTest.js b/tests/Tokens/mintAndRedeemCEtherTest.js index 859c6968d..baf5b3401 100644 --- a/tests/Tokens/mintAndRedeemCEtherTest.js +++ b/tests/Tokens/mintAndRedeemCEtherTest.js @@ -61,6 +61,7 @@ describe('CEther', () => { beforeEach(async () => { [root, minter, redeemer, ...accounts] = saddle.accounts; cToken = await makeCToken({kind: 'cether', comptrollerOpts: {kind: 'bool'}}); + await fastForward(cToken, 1); }); [mintExplicit, mintFallback].forEach((mint) => { diff --git a/tests/Tokens/mintAndRedeemTest.js b/tests/Tokens/mintAndRedeemTest.js index 5faa80469..a1ef70e25 100644 --- a/tests/Tokens/mintAndRedeemTest.js +++ b/tests/Tokens/mintAndRedeemTest.js @@ -92,12 +92,12 @@ describe('CToken', function () { expect( await send(cToken.underlying, 'approve', [cToken._address, 1], {from: minter}) ).toSucceed(); - expect(await mintFresh(cToken, minter, mintAmount)).toHaveTokenFailure('TOKEN_INSUFFICIENT_ALLOWANCE', 'MINT_TRANSFER_IN_NOT_POSSIBLE'); + await expect(mintFresh(cToken, minter, mintAmount)).rejects.toRevert('revert Insufficient allowance'); }); it("fails if insufficient balance", async() => { await setBalance(cToken.underlying, minter, 1); - expect(await mintFresh(cToken, minter, mintAmount)).toHaveTokenFailure('TOKEN_INSUFFICIENT_BALANCE', 'MINT_TRANSFER_IN_NOT_POSSIBLE'); + await expect(mintFresh(cToken, minter, mintAmount)).rejects.toRevert('revert Insufficient balance'); }); it("proceeds if sufficient approval and balance", async () =>{ @@ -150,7 +150,7 @@ describe('CToken', function () { it("returns error from mintFresh without emitting any extra logs", async () => { await send(cToken.underlying, 'harnessSetBalance', [minter, 1]); - expect(await quickMint(cToken, minter, mintAmount, {faucet: false})).toHaveTokenFailure('TOKEN_INSUFFICIENT_BALANCE', 'MINT_TRANSFER_IN_NOT_POSSIBLE'); + await expect(mintFresh(cToken, minter, mintAmount)).rejects.toRevert('revert Insufficient balance'); }); it("returns success from mintFresh and mints the correct number of tokens", async () => { diff --git a/tests/Tokens/reservesTest.js b/tests/Tokens/reservesTest.js index 210204ae9..8effe1e4a 100644 --- a/tests/Tokens/reservesTest.js +++ b/tests/Tokens/reservesTest.js @@ -4,7 +4,7 @@ const { both } = require('../Utils/Ethereum'); -const {makeCToken} = require('../Utils/Compound'); +const {fastForward, makeCToken} = require('../Utils/Compound'); const factor = etherMantissa(.02); @@ -78,6 +78,7 @@ describe('CToken', function () { it("emits a reserve factor failure if interest accrual fails", async () => { await send(cToken.interestRateModel, 'setFailBorrowRate', [true]); + await fastForward(cToken, 1); await expect(send(cToken, '_setReserveFactor', [factor])).rejects.toRevert("revert INTEREST_RATE_MODEL_ERROR"); expect(await call(cToken, 'reserveFactorMantissa')).toEqualNumber(0); }); @@ -162,6 +163,7 @@ describe('CToken', function () { it("emits a reserve-reduction failure if interest accrual fails", async () => { await send(cToken.interestRateModel, 'setFailBorrowRate', [true]); + await fastForward(cToken, 1); await expect(send(cToken, '_reduceReserves', [reduction])).rejects.toRevert("revert INTEREST_RATE_MODEL_ERROR"); }); @@ -177,4 +179,4 @@ describe('CToken', function () { expect(await send(cToken, '_reduceReserves', [reduction])).toSucceed(); }); }); -}); \ No newline at end of file +}); diff --git a/tests/Tokens/safeTokenTest.js b/tests/Tokens/safeTokenTest.js index 3c738486b..b38d3904e 100644 --- a/tests/Tokens/safeTokenTest.js +++ b/tests/Tokens/safeTokenTest.js @@ -48,19 +48,5 @@ describe('CEther', function () { await expect(call(cToken, 'harnessDoTransferOut', [root, 77], {value: 0})).rejects.toRevert(); }); }); - - describe("checkTransferIn", () => { - it("succeeds", async () => { - expect(await call(cToken, 'harnessCheckTransferIn', [root, 100], {value: 100})).toHaveTokenError('NO_ERROR'); - }); - - it("reverts if sender is not from", async () => { - await expect(call(cToken, 'harnessCheckTransferIn', [nonRoot, 100], {value: 100})).rejects.toRevert("revert sender mismatch"); - }); - - it("reverts if amount is not msg.value", async () => { - await expect(call(cToken, 'harnessCheckTransferIn', [root, 77], {value: 100})).rejects.toRevert("revert value mismatch"); - }); - }); }); }); diff --git a/tests/Tokens/setInterestRateModelTest.js b/tests/Tokens/setInterestRateModelTest.js index 123419d4a..f48b0e3ce 100644 --- a/tests/Tokens/setInterestRateModelTest.js +++ b/tests/Tokens/setInterestRateModelTest.js @@ -1,5 +1,6 @@ const {both} = require('../Utils/Ethereum'); const { + fastForward, makeCToken, makeInterestRateModel } = require('../Utils/Compound'); @@ -79,6 +80,7 @@ describe('CToken', function () { it("emits a set market interest rate model failure if interest accrual fails", async () => { await send(cToken.interestRateModel, 'setFailBorrowRate', [true]); + await fastForward(cToken, 1); await expect(send(cToken, '_setInterestRateModel', [newModel._address])).rejects.toRevert("revert INTEREST_RATE_MODEL_ERROR"); }); @@ -95,4 +97,4 @@ describe('CToken', function () { expect(await call(cToken, 'interestRateModel')).toEqual(newModel._address); }); }); -}); \ No newline at end of file +}); diff --git a/tests/Utils/Compound.js b/tests/Utils/Compound.js index 8d78f0679..6979f8a41 100644 --- a/tests/Utils/Compound.js +++ b/tests/Utils/Compound.js @@ -2,6 +2,7 @@ const { dfn } = require('./JS'); const { + encodeParameters, etherBalance, etherMantissa, etherUnsigned @@ -71,6 +72,7 @@ async function makeCToken(opts = {}) { const admin = opts.admin || root; let cToken, underlying; + let cDelegator, cDelegatee, cDaiMaker; switch (kind) { case 'cether': @@ -85,12 +87,33 @@ async function makeCToken(opts = {}) { admin ]) break; + + case 'cdai': + cDaiMaker = await deploy('CDaiDelegateMakerHarness'); + underlying = cDaiMaker; + cDelegatee = await deploy('CDaiDelegateHarness'); + cDelegator = await deploy('CErc20Delegator', + [ + underlying._address, + comptroller._address, + interestRateModel._address, + exchangeRate, + name, + symbol, + decimals, + admin, + cDelegatee._address, + encodeParameters(['address', 'address'], [cDaiMaker._address, cDaiMaker._address]) + ] + ); + cToken = await saddle.getContractAt('CDaiDelegateHarness', cDelegator._address); // XXXS at + break; + case 'cerc20': default: underlying = opts.underlying || await makeToken(opts.underlyingOpts); - let cDelegatee = await deploy('CErc20DelegateHarness'); - - let cDelegator = await deploy('CErc20Delegator', + cDelegatee = await deploy('CErc20DelegateHarness'); + cDelegator = await deploy('CErc20Delegator', [ underlying._address, comptroller._address, @@ -103,7 +126,7 @@ async function makeCToken(opts = {}) { cDelegatee._address, "0x0" ] - ); + ); cToken = await saddle.getContractAt('CErc20DelegateHarness', cDelegator._address); // XXXS at break; } @@ -178,7 +201,7 @@ async function makeToken(opts = {}) { const decimals = etherUnsigned(dfn(opts.decimals, 18)); const symbol = opts.symbol || 'OMG'; const name = opts.name || `Erc20 ${symbol}`; - return await deploy('EIP20Harness', [quantity, name, decimals, symbol]); + return await deploy('ERC20Harness', [quantity, name, decimals, symbol]); } } @@ -269,6 +292,9 @@ async function preApprove(cToken, from, amount, opts = {}) { } async function quickMint(cToken, minter, mintAmount, opts = {}) { + // make sure to accrue interest + await fastForward(cToken, 1); + if (dfn(opts.approve, true)) { expect(await preApprove(cToken, minter, mintAmount, opts)).toSucceed(); } @@ -287,6 +313,8 @@ async function preSupply(cToken, account, tokens, opts = {}) { } async function quickRedeem(cToken, redeemer, redeemTokens, opts = {}) { + await fastForward(cToken, 1); + if (dfn(opts.supply, true)) { expect(await preSupply(cToken, redeemer, redeemTokens, opts)).toSucceed(); } @@ -297,6 +325,8 @@ async function quickRedeem(cToken, redeemer, redeemTokens, opts = {}) { } async function quickRedeemUnderlying(cToken, redeemer, redeemAmount, opts = {}) { + await fastForward(cToken, 1); + if (dfn(opts.exchangeRate)) { expect(await send(cToken, 'harnessSetExchangeRate', [etherMantissa(opts.exchangeRate)])).toSucceed(); } diff --git a/tests/Utils/Ethereum.js b/tests/Utils/Ethereum.js index 77f819bc9..7c9ab324c 100644 --- a/tests/Utils/Ethereum.js +++ b/tests/Utils/Ethereum.js @@ -56,6 +56,10 @@ function unlockedAccount(a) { return unlockedAccounts()[a.toLowerCase()]; } +async function mineBlockNumber(blockNumber) { + return rpc({method: 'evm_mineBlockNumber', params: [blockNumber]}); +} + async function mineBlock() { return rpc({ method: 'evm_mine' }); } @@ -79,6 +83,11 @@ async function advanceBlocks(blocks) { await rpc({ method: 'evm_mineBlockNumber', params: [blocks + parseInt(num)] }); } +async function blockNumber() { + let { result: num } = await rpc({ method: 'eth_blockNumber' }); + return parseInt(num); +} + async function minerStart() { return rpc({ method: 'miner_start' }); } @@ -115,9 +124,11 @@ module.exports = { unlockedAccount, advanceBlocks, + blockNumber, freezeTime, increaseTime, mineBlock, + mineBlockNumber, minerStart, minerStop, rpc, diff --git a/tests/gasProfiler.js b/tests/gasProfiler.js new file mode 100644 index 000000000..92d6ebfd9 --- /dev/null +++ b/tests/gasProfiler.js @@ -0,0 +1,153 @@ +const { + etherUnsigned, + etherMantissa, +} = require('./Utils/Ethereum'); + +const { + makeCToken, + fastForward, + preApprove, + preSupply, + quickRedeem, +} = require('./Utils/Compound'); + +const fs = require('fs'); +const util = require('util'); +const diffStringsUnified = require('jest-diff'); + + +async function preRedeem( + cToken, + redeemer, + redeemTokens, + redeemAmount, + exchangeRate +) { + await preSupply(cToken, redeemer, redeemTokens); + await send(cToken.underlying, 'harnessSetBalance', [ + cToken._address, + redeemAmount + ]); +} + +const sortOpcodes = (opcodesMap) => { + return Object.values(opcodesMap) + .map(elem => [elem.fee, elem.name]) + .sort((a, b) => b[0] - a[0]); +}; + +const getGasCostFile = name => { + try { + const jsonString = fs.readFileSync(name); + return JSON.parse(jsonString); + } catch (err) { + console.log(err); + return {}; + } +}; + +const recordGasCost = (totalFee, key, filename, opcodes = {}) => { + let fileObj = getGasCostFile(filename); + const newCost = {fee: totalFee, opcodes: opcodes}; + console.log(diffStringsUnified(fileObj[key], newCost)); + fileObj[key] = newCost; + fs.writeFileSync(filename, JSON.stringify(fileObj, null, ' '), 'utf-8'); +}; + +async function mint(cToken, minter, mintAmount, exchangeRate) { + expect(await preApprove(cToken, minter, mintAmount, {})).toSucceed(); + return send(cToken, 'mint', [mintAmount], { from: minter }); +} + +/// GAS PROFILER: saves a digest of the gas prices of common CToken operations +/// transiently fails, not sure why + +describe('CToken', () => { + let root, minter, redeemer, accounts, cToken; + const exchangeRate = 50e3; + const preMintAmount = etherUnsigned(30e4); + const mintAmount = etherUnsigned(10e4); + const mintTokens = mintAmount.div(exchangeRate); + const redeemTokens = etherUnsigned(10e3); + const redeemAmount = redeemTokens.mul(exchangeRate); + const filename = './gasCosts.json'; + + beforeEach(async () => { + [root, minter, redeemer, ...accounts] = saddle.accounts; + cToken = await makeCToken({ + comptrollerOpts: { kind: 'bool' }, + interestRateModelOpts: { kind: 'white-paper'}, + exchangeRate + }); + }); + + it('first mint', async () => { + await send(cToken, 'harnessSetAccrualBlockNumber', [40]); + await send(cToken, 'harnessSetBlockNumber', [41]); + + const trxReceipt = await mint(cToken, minter, mintAmount, exchangeRate); + recordGasCost(trxReceipt.gasUsed, 'first mint', filename); + }); + + it.only('second mint', async () => { + await mint(cToken, minter, mintAmount, exchangeRate); + + await send(cToken, 'harnessSetAccrualBlockNumber', [40]); + await send(cToken, 'harnessSetBlockNumber', [41]); + + const mint2Receipt = await mint(cToken, minter, mintAmount, exchangeRate); + expect(Object.keys(mint2Receipt.events)).toEqual(['AccrueInterest', 'Transfer', 'Mint']); + + console.log(mint2Receipt.gasUsed); + const opcodeCount = {}; + + await saddle.trace(mint2Receipt, { + execLog: log => { + if (log.lastLog != undefined) { + const key = `${log.op} @ ${log.gasCost}`; + opcodeCount[key] = (opcodeCount[key] || 0) + 1; + } + } + }); + + recordGasCost(mint2Receipt.gasUsed, 'second mint', filename, opcodeCount); + }); + + it('second mint, no interest accrued', async () => { + await mint(cToken, minter, mintAmount, exchangeRate); + + await send(cToken, 'harnessSetAccrualBlockNumber', [40]); + await send(cToken, 'harnessSetBlockNumber', [40]); + + const mint2Receipt = await mint(cToken, minter, mintAmount, exchangeRate); + expect(Object.keys(mint2Receipt.events)).toEqual(['Transfer', 'Mint']); + recordGasCost(mint2Receipt.gasUsed, 'second mint, no interest accrued', filename); + + // console.log("NO ACCRUED"); + // const opcodeCount = {}; + // await saddle.trace(mint2Receipt, { + // execLog: log => { + // opcodeCount[log.op] = (opcodeCount[log.op] || 0) + 1; + // } + // }); + // console.log(getOpcodeDigest(opcodeCount)); + }); + + it('redeem', async () => { + await preRedeem(cToken, redeemer, redeemTokens, redeemAmount, exchangeRate); + const trxReceipt = await quickRedeem(cToken, redeemer, redeemTokens); + recordGasCost(trxReceipt.gasUsed, 'redeem', filename); + }); + + it.skip('print mint opcode list', async () => { + await preMint(cToken, minter, mintAmount, mintTokens, exchangeRate); + const trxReceipt = await quickMint(cToken, minter, mintAmount); + const opcodeCount = {}; + await saddle.trace(trxReceipt, { + execLog: log => { + opcodeCount[log.op] = (opcodeCount[log.op] || 0) + 1; + } + }); + console.log(getOpcodeDigest(opcodeCount)); + }); +}); diff --git a/yarn.lock b/yarn.lock index 4995ca918..e44824d53 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,129 +2,62 @@ # yarn lockfile v1 -"@0x/assert@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@0x/assert/-/assert-3.0.0.tgz#a5fa5defd6638431c76309968fed175ddab5956a" - integrity sha512-SiU9pWEtHzDsmFx80/uBGZScpVwN4EhMlqcqt3fGa3u4e3iK6rtqLCD9qvlN9OgEljbvyuq6pzI8bGr27xspkw== - dependencies: - "@0x/json-schemas" "^5.0.0" - "@0x/typescript-typings" "^5.0.0" - "@0x/utils" "^5.0.0" - lodash "^4.17.11" - valid-url "^1.0.9" - -"@0x/assert@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@0x/assert/-/assert-3.0.3.tgz#18f92aa4e5d87824259b3ddd1cc1882b59f29e8e" - integrity sha512-Yvu701gtykj44ggWe66E2sje4v9odBrO9uAoPwEj3EfN7Kk/AXJEthyWSZVGXQvj7MaFlAElq1Uw8VfzF/gtqA== +"@0x/assert@^3.0.7": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@0x/assert/-/assert-3.0.7.tgz#fb616533ed00480bd642f8419d28e88b547c30df" + integrity sha512-HYdVvIgj/wVb20MVveazLQwICxZGelNuyu/U09ZSMzRy1NrDgrBiMjrU4WrcpW2GTPZjl+7R4U4/7h/C8I/egQ== dependencies: - "@0x/json-schemas" "^5.0.3" - "@0x/typescript-typings" "^5.0.1" - "@0x/utils" "^5.1.2" + "@0x/json-schemas" "^5.0.7" + "@0x/typescript-typings" "^5.0.2" + "@0x/utils" "^5.4.1" lodash "^4.17.11" valid-url "^1.0.9" -"@0x/dev-utils@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@0x/dev-utils/-/dev-utils-3.0.0.tgz#c14a7ac03c9ca03a3063b700c933df70628a5031" - integrity sha512-lcRrANeRowlKaziL1goK9Fu1P/ZafEQbBUvgqThE9IOKXiThnhq79eUbHCzNwNGQHjFGrs112J03dFiRxjxVyw== - dependencies: - "@0x/subproviders" "^6.0.0" - "@0x/types" "^3.0.0" - "@0x/typescript-typings" "^5.0.0" - "@0x/utils" "^5.0.0" - "@0x/web3-wrapper" "^7.0.0" - "@types/web3-provider-engine" "^14.0.0" - chai "^4.0.1" - chai-as-promised "^7.1.0" - chai-bignumber "^3.0.0" - dirty-chai "^2.0.1" - ethereum-types "^3.0.0" - lodash "^4.17.11" - web3-provider-engine "14.0.6" - -"@0x/dev-utils@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@0x/dev-utils/-/dev-utils-3.1.0.tgz#a343f36aa819b2e748fe9946645fd959ebff843c" - integrity sha512-Xy2ub6gxsIu5MsWdmFpxsMaIg5o33lRwzeZshdfPLqGKx6GVM2Kk4GTWUiBrukpoUA8LvyV5nW8vzOrZm0UJfA== - dependencies: - "@0x/subproviders" "^6.0.3" - "@0x/types" "^3.1.1" - "@0x/typescript-typings" "^5.0.1" - "@0x/utils" "^5.1.2" - "@0x/web3-wrapper" "^7.0.3" +"@0x/dev-utils@^3.0.0", "@0x/dev-utils@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@0x/dev-utils/-/dev-utils-3.2.1.tgz#778b89a6ce47af143b526934cab0518f083eb831" + integrity sha512-+7YVtXTMkEGgnf7HYEO9uqUmgowP+NaIOaNzzzooTJo6SrnwF1EBc0evBQeS/NBzyFoEskLs2w/jcGYP92J0ag== + dependencies: + "@0x/subproviders" "^6.0.8" + "@0x/types" "^3.1.2" + "@0x/typescript-typings" "^5.0.2" + "@0x/utils" "^5.4.1" + "@0x/web3-wrapper" "^7.0.7" "@types/web3-provider-engine" "^14.0.0" chai "^4.0.1" chai-as-promised "^7.1.0" chai-bignumber "^3.0.0" dirty-chai "^2.0.1" - ethereum-types "^3.0.0" + ethereum-types "^3.1.0" lodash "^4.17.11" web3-provider-engine "14.0.6" -"@0x/json-schemas@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@0x/json-schemas/-/json-schemas-5.0.0.tgz#95c29fb7977adb19b9f0127122ec90efb38651ec" - integrity sha512-+OlJ5UBdX1MpXA/wD3j3GCD51IQmgp9zTvFriWbUIBn35imZe1gUETdn7tpeqxbTMOm4kHzwcSDrf5bdx6ztLA== - dependencies: - "@0x/typescript-typings" "^5.0.0" - "@types/node" "*" - jsonschema "^1.2.0" - lodash.values "^4.3.0" - -"@0x/json-schemas@^5.0.3": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@0x/json-schemas/-/json-schemas-5.0.3.tgz#8804d20eb13f2551146c399b83cb5e1597205bee" - integrity sha512-B8mAyEb2bPrWHdaIpQjODGRmiH+gCAxadppWibpa36fkHF+4c9FNJCFqRE98Eg5w/IYTOj7JkrsRnkA3Ux1ltQ== +"@0x/json-schemas@^5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@0x/json-schemas/-/json-schemas-5.0.7.tgz#4e68074b7ab06984f680df742de825b678a253d3" + integrity sha512-/7gbLno+qQRNjLWRkulbPVOnRoP7uN5CnNP+VKydpKArBgU/E38rUVzSl/Y6FaPbhwC/Rs0d0BmP2Y5DMozjyA== dependencies: - "@0x/typescript-typings" "^5.0.1" + "@0x/typescript-typings" "^5.0.2" "@types/node" "*" jsonschema "^1.2.0" lodash.values "^4.3.0" -"@0x/sol-compiler@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@0x/sol-compiler/-/sol-compiler-4.0.0.tgz#387bd6933c340124d0d2e78d5aa4a134840e3630" - integrity sha512-KOyM1OC3QbSTapazwjXV0fsuxseiXR/JHAvraLad1jGCFBRyo/MKktxhWLS0rzcbTeKx/iOyV5t3MpaxTTN9Zg== - dependencies: - "@0x/assert" "^3.0.0" - "@0x/json-schemas" "^5.0.0" - "@0x/sol-resolver" "^3.0.0" - "@0x/types" "^3.0.0" - "@0x/typescript-typings" "^5.0.0" - "@0x/utils" "^5.0.0" - "@0x/web3-wrapper" "^7.0.0" - "@types/yargs" "^11.0.0" - chalk "^2.3.0" - chokidar "^3.0.2" - ethereum-types "^3.0.0" - ethereumjs-util "^5.1.1" - lodash "^4.17.11" - mkdirp "^0.5.1" - pluralize "^7.0.0" - require-from-string "^2.0.1" - semver "5.5.0" - solc "^0.5.5" - source-map-support "^0.5.0" - web3-eth-abi "^1.0.0-beta.24" - yargs "^10.0.3" - -"@0x/sol-compiler@^4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@0x/sol-compiler/-/sol-compiler-4.0.3.tgz#8e44c352071d2fff5022807cffd011ff274a8857" - integrity sha512-Aj8PQz5yOqo57ciHeL3Da4v4Dkn+JB/t+gBaqIHkrk7IvJ/d/AjPB3LKpGmqRT/AHVljYt3XbWokKxI7gZYafQ== - dependencies: - "@0x/assert" "^3.0.3" - "@0x/json-schemas" "^5.0.3" - "@0x/sol-resolver" "^3.0.2" - "@0x/types" "^3.1.1" - "@0x/typescript-typings" "^5.0.1" - "@0x/utils" "^5.1.2" - "@0x/web3-wrapper" "^7.0.3" +"@0x/sol-compiler@^4.0.0", "@0x/sol-compiler@^4.0.8": + version "4.0.8" + resolved "https://registry.yarnpkg.com/@0x/sol-compiler/-/sol-compiler-4.0.8.tgz#e60634423d47c4241a404e48edbdfff99098ab5f" + integrity sha512-azwMQbPDcMmp81j/wHtZj9paaoq+Eo8SWkouVbygwUDxB+FSaBN7N+IURRzhKuTpKxY2w/vh2FBrJUE9ii6wog== + dependencies: + "@0x/assert" "^3.0.7" + "@0x/json-schemas" "^5.0.7" + "@0x/sol-resolver" "^3.0.3" + "@0x/types" "^3.1.2" + "@0x/typescript-typings" "^5.0.2" + "@0x/utils" "^5.4.1" + "@0x/web3-wrapper" "^7.0.7" "@types/yargs" "^11.0.0" chalk "^2.3.0" chokidar "^3.0.2" - ethereum-types "^3.0.0" + ethereum-types "^3.1.0" ethereumjs-util "^5.1.1" lodash "^4.17.11" mkdirp "^0.5.1" @@ -136,39 +69,30 @@ web3-eth-abi "^1.0.0-beta.24" yargs "^10.0.3" -"@0x/sol-resolver@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@0x/sol-resolver/-/sol-resolver-3.0.0.tgz#0b67ce0b39aa571d0ce24f3401f9315005dbe8ee" - integrity sha512-pHXC+W6EbJbJfMdus2ZBORSFYuyAPGuOAu0WsS1y7v71uepSt9Bz6QR5azOOC+fSBscpauiqBEJBwtUeECuoSQ== - dependencies: - "@0x/types" "^3.0.0" - "@0x/typescript-typings" "^5.0.0" - lodash "^4.17.11" - -"@0x/sol-resolver@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@0x/sol-resolver/-/sol-resolver-3.0.2.tgz#2f89df2f049d5ea8501ee1fc2a1d0866a0b3c761" - integrity sha512-+FseY6gmifzrrtnHt70hNezmCDavVd69MqT/r2uyxXtgz2F3oegkPBTBYo4/sxrdiSA+2tYFcqGHNiMDtx6ELA== +"@0x/sol-resolver@^3.0.0", "@0x/sol-resolver@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@0x/sol-resolver/-/sol-resolver-3.0.3.tgz#da969e04d5512f8cc88c117dd377bdb04f3f4410" + integrity sha512-8Pn53YZd8y8RCjWjZDcZlp39fcqZIuEJo7o4q1P2umfatIfl4ihXgfgzw7iNxA64jTY2CWtltLpRHLhyOcvqxw== dependencies: - "@0x/types" "^3.1.1" - "@0x/typescript-typings" "^5.0.1" + "@0x/types" "^3.1.2" + "@0x/typescript-typings" "^5.0.2" lodash "^4.17.11" "@0x/sol-tracing-utils@^7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@0x/sol-tracing-utils/-/sol-tracing-utils-7.0.3.tgz#33de0c07466b1faed2e7b3c9ffdf7fe3fd24315a" - integrity sha512-7LLAb+7EYIuT92xb84Ta560vbSs7EnbomgWztDeKK9HvQ13rRo0XPeu+TlsTsVbgPxVDba1rw30Ax0r9vmLdJw== - dependencies: - "@0x/dev-utils" "^3.1.0" - "@0x/sol-compiler" "^4.0.3" - "@0x/sol-resolver" "^3.0.2" - "@0x/subproviders" "^6.0.3" - "@0x/typescript-typings" "^5.0.1" - "@0x/utils" "^5.1.2" - "@0x/web3-wrapper" "^7.0.3" + version "7.0.8" + resolved "https://registry.yarnpkg.com/@0x/sol-tracing-utils/-/sol-tracing-utils-7.0.8.tgz#f1c2e1bf064d126d988d5574fbb6d45037064e8e" + integrity sha512-dFZ/CVl4hWJ2rDbcjsnIRif8gd/Eu4lT+5iEDlD427ns1tKaSg/sVPr7Qz0UubipxHDozFY0f69vGdZmNw7Uew== + dependencies: + "@0x/dev-utils" "^3.2.1" + "@0x/sol-compiler" "^4.0.8" + "@0x/sol-resolver" "^3.0.3" + "@0x/subproviders" "^6.0.8" + "@0x/typescript-typings" "^5.0.2" + "@0x/utils" "^5.4.1" + "@0x/web3-wrapper" "^7.0.7" "@types/solidity-parser-antlr" "^0.2.3" chalk "^2.3.0" - ethereum-types "^3.0.0" + ethereum-types "^3.1.0" ethereumjs-util "^5.1.1" ethers "~4.0.4" glob "^7.1.2" @@ -181,54 +105,26 @@ solc "^0.5.5" solidity-parser-antlr "^0.4.2" -"@0x/subproviders@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@0x/subproviders/-/subproviders-6.0.0.tgz#9d4b32e22c9e71f450b0f6d00978ca6b1129c0b3" - integrity sha512-5u0JpSGz6RtU0YKckV9FQeJAWkuESG6oR94GQujvkdxg1i1b/QGe9Njq+9VdPq6jhFwl7Hzr8K0JJYTXPlIo5A== +"@0x/subproviders@^6.0.0", "@0x/subproviders@^6.0.8": + version "6.0.8" + resolved "https://registry.yarnpkg.com/@0x/subproviders/-/subproviders-6.0.8.tgz#5fd7461201d434785f231e9d5f2b1b1015e8cc1b" + integrity sha512-OEFZ6qdkHfAvkkcvXSLiCJd2V87NGiZvNcZZkNeupCK77mlDnO0k/IpCe3hr9bUu8PV8vOBvrQaE973vjyCfgQ== dependencies: - "@0x/assert" "^3.0.0" - "@0x/types" "^3.0.0" - "@0x/typescript-typings" "^5.0.0" - "@0x/utils" "^5.0.0" - "@0x/web3-wrapper" "^7.0.0" - "@ledgerhq/hw-app-eth" "^4.3.0" - "@ledgerhq/hw-transport-u2f" "4.24.0" - "@types/hdkey" "^0.7.0" - "@types/web3-provider-engine" "^14.0.0" - bip39 "^2.5.0" - bn.js "^4.11.8" - ethereum-types "^3.0.0" - ethereumjs-tx "^1.3.5" - ethereumjs-util "^5.1.1" - ganache-core "^2.6.0" - hdkey "^0.7.1" - json-rpc-error "2.0.0" - lodash "^4.17.11" - semaphore-async-await "^1.5.1" - web3-provider-engine "14.0.6" - optionalDependencies: - "@ledgerhq/hw-transport-node-hid" "^4.3.0" - -"@0x/subproviders@^6.0.3": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@0x/subproviders/-/subproviders-6.0.3.tgz#5d88dc15efab2df6463de5e48706396645c2b5ed" - integrity sha512-sPw9I1rv/JMXxkf6c7xZVbwSMB0RizsuqG45NSHaIwPoWPh3/+IkmIgRv4M9nWignDu/q+F8v0D1ww3aIGMX0Q== - dependencies: - "@0x/assert" "^3.0.3" - "@0x/types" "^3.1.1" - "@0x/typescript-typings" "^5.0.1" - "@0x/utils" "^5.1.2" - "@0x/web3-wrapper" "^7.0.3" + "@0x/assert" "^3.0.7" + "@0x/types" "^3.1.2" + "@0x/typescript-typings" "^5.0.2" + "@0x/utils" "^5.4.1" + "@0x/web3-wrapper" "^7.0.7" "@ledgerhq/hw-app-eth" "^4.3.0" "@ledgerhq/hw-transport-u2f" "4.24.0" "@types/hdkey" "^0.7.0" "@types/web3-provider-engine" "^14.0.0" bip39 "^2.5.0" bn.js "^4.11.8" - ethereum-types "^3.0.0" + ethereum-types "^3.1.0" ethereumjs-tx "^1.3.5" ethereumjs-util "^5.1.1" - ganache-core "^2.6.0" + ganache-core "^2.9.0-istanbul.0" hdkey "^0.7.1" json-rpc-error "2.0.0" lodash "^4.17.11" @@ -237,268 +133,216 @@ optionalDependencies: "@ledgerhq/hw-transport-node-hid" "^4.3.0" -"@0x/types@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@0x/types/-/types-3.0.0.tgz#3cc815094fb9b73d3bc6bbe29735af982a0f519c" - integrity sha512-q+XRLgd/I7UbT73w0SRKLs9ZHe1FpIc5JZO1sLI3asNj+bb9FrFjuHiDJvZV33MjMI8u3IajN534YjVCMTBefg== - dependencies: - "@types/node" "*" - bignumber.js "~9.0.0" - ethereum-types "^3.0.0" - -"@0x/types@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@0x/types/-/types-3.1.1.tgz#b20ca76e9516201b9c27621f941696f41ffc9fac" - integrity sha512-+TQmzH+chWeDWpc+Lce3/q4X2UEHFfAwZcWrV7tEQ5EVAJvph7gpKawRW2XRsmHeQDSHBmiiBdSZ8Rc/OAjvlQ== +"@0x/types@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@0x/types/-/types-3.1.2.tgz#85fb2e6de4b459bcb162a6065dcd7dc8bdb233ce" + integrity sha512-jweDayth9SSmvhx2Z5cARqQAdB9luzDm+GCzmpqQXYpdPPUzUMXQWjepGouLUgLEoBEq7Xm7DkY+qcTq3ekrSQ== dependencies: "@types/node" "*" bignumber.js "~9.0.0" - ethereum-types "^3.0.0" - -"@0x/typescript-typings@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@0x/typescript-typings/-/typescript-typings-5.0.0.tgz#54bb89fe78216cd9a1a737dead329ad1cb05bd94" - integrity sha512-4ZgHGY5OniFC8giOMF4W2l6YuOccIt7L0a52BKbJvBGpPeaDIlKWGuqxhp9nXDd212SlkYxALyoXlJd/We2kew== - dependencies: - "@types/bn.js" "^4.11.0" - "@types/react" "*" - bignumber.js "~9.0.0" - ethereum-types "^3.0.0" - popper.js "1.14.3" + ethereum-types "^3.1.0" -"@0x/typescript-typings@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@0x/typescript-typings/-/typescript-typings-5.0.1.tgz#031e291cc506ecd26d3fe10adf618f4f51ff1510" - integrity sha512-zSA39URHkFnL16WD30VMa8wL8va0Khpx9APHffdPWpBOr9SUPdADtae5HO4iNCYvSgo3mrtPlKID2nIqREIHOQ== +"@0x/typescript-typings@^5.0.0", "@0x/typescript-typings@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@0x/typescript-typings/-/typescript-typings-5.0.2.tgz#5589ee8721165d0aa2e5290e28372c560970ab9d" + integrity sha512-syOJE/cN8lg4Homh/TGZPiS493NBmKBFjlaeOpnrjjzGcCG2SqY4nbj+VjGrvhJdw9/KM/J1nWqsCV+KSDORhg== dependencies: "@types/bn.js" "^4.11.0" "@types/react" "*" bignumber.js "~9.0.0" - ethereum-types "^3.0.0" + ethereum-types "^3.1.0" popper.js "1.14.3" -"@0x/utils@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@0x/utils/-/utils-5.0.0.tgz#4b0acff872c9b158c9293849f8bd2bb62f17b8c5" - integrity sha512-Nsa8VHdSo4jhWmsEuuIAJIBG55swbtDn5vb4/Kh+pXWRoOhkCuJyE6E0OIikL0wmgasIISD+xaOnpgqCY1N/mQ== - dependencies: - "@0x/types" "^3.0.0" - "@0x/typescript-typings" "^5.0.0" - "@types/node" "*" - abortcontroller-polyfill "^1.1.9" - bignumber.js "~9.0.0" - chalk "^2.3.0" - detect-node "2.0.3" - ethereum-types "^3.0.0" - ethereumjs-util "^5.1.1" - ethers "~4.0.4" - isomorphic-fetch "2.2.1" - js-sha3 "^0.7.0" - lodash "^4.17.11" - -"@0x/utils@^5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@0x/utils/-/utils-5.1.2.tgz#defc545a42343729c9bf7252f0b7413d7ba47694" - integrity sha512-p5BZxs3krXwkjBY8hrmGLkLp4BziVQ6z4tRFIcWSR8C4ptAlZ4QfFL1zqK6O6/rbOsGj+JSIpqRRrxJr2Is6LQ== +"@0x/utils@^5.0.0", "@0x/utils@^5.4.1": + version "5.4.1" + resolved "https://registry.yarnpkg.com/@0x/utils/-/utils-5.4.1.tgz#5ec5f0d08dad38543b6ff8199bdf8f3d0e63488e" + integrity sha512-zmolzXYt1FZlF3nGI9I1FaMdPp3kQAO/ZmtObFjN2KHG35dl+BBk/lSlWtmaqlVLaSLBQzLREKgjswKEcyT+xA== dependencies: - "@0x/types" "^3.1.1" - "@0x/typescript-typings" "^5.0.1" + "@0x/types" "^3.1.2" + "@0x/typescript-typings" "^5.0.2" "@types/node" "*" abortcontroller-polyfill "^1.1.9" bignumber.js "~9.0.0" chalk "^2.3.0" detect-node "2.0.3" - ethereum-types "^3.0.0" + ethereum-types "^3.1.0" ethereumjs-util "^5.1.1" ethers "~4.0.4" isomorphic-fetch "2.2.1" js-sha3 "^0.7.0" lodash "^4.17.11" -"@0x/web3-wrapper@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@0x/web3-wrapper/-/web3-wrapper-7.0.0.tgz#323e7931f067f7f9ed88cca30bd1ed1f7505fc48" - integrity sha512-Cyd4/LIP69XDRkLA+OCRjFxx3mba0M+gG5zoXcc69HFTvZXV/mB36ibsQBvBI/CNVxUkxkrOQA/lG4+/zl3Dcg== - dependencies: - "@0x/assert" "^3.0.0" - "@0x/json-schemas" "^5.0.0" - "@0x/typescript-typings" "^5.0.0" - "@0x/utils" "^5.0.0" - ethereum-types "^3.0.0" - ethereumjs-util "^5.1.1" - ethers "~4.0.4" - lodash "^4.17.11" - -"@0x/web3-wrapper@^7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@0x/web3-wrapper/-/web3-wrapper-7.0.3.tgz#b6015a820909b36e00115047ca1c0c693d56fff8" - integrity sha512-ocUhIz04KORg1Hu3j+w/pKgJ3VF6WiFhwN0VbZkMBggK2eIAYsb3VncLY5hl9g63bTxSk0l3GI5WFgGuxMMn6Q== +"@0x/web3-wrapper@^7.0.0", "@0x/web3-wrapper@^7.0.7": + version "7.0.7" + resolved "https://registry.yarnpkg.com/@0x/web3-wrapper/-/web3-wrapper-7.0.7.tgz#c88b46b1b79e1775e3581d3cbd3e8f26ce220bd1" + integrity sha512-4dqtJW14W2E/hFBL0mTBd6w7QYp3l+OxAsJwhbmB9xnhZj8DfLrQA2RC+cFZnUarhjUeXlUh2B1Zr6YXLv3lEQ== dependencies: - "@0x/assert" "^3.0.3" - "@0x/json-schemas" "^5.0.3" - "@0x/typescript-typings" "^5.0.1" - "@0x/utils" "^5.1.2" - ethereum-types "^3.0.0" + "@0x/assert" "^3.0.7" + "@0x/json-schemas" "^5.0.7" + "@0x/typescript-typings" "^5.0.2" + "@0x/utils" "^5.4.1" + ethereum-types "^3.1.0" ethereumjs-util "^5.1.1" ethers "~4.0.4" lodash "^4.17.11" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" - integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== dependencies: - "@babel/highlight" "^7.0.0" + "@babel/highlight" "^7.8.3" "@babel/core@^7.1.0": - version "7.7.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.7.tgz#ee155d2e12300bcc0cff6a8ad46f2af5063803e9" - integrity sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.7" - "@babel/helpers" "^7.7.4" - "@babel/parser" "^7.7.7" - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.6.tgz#27d7df9258a45c2e686b6f18b6c659e563aa4636" + integrity sha512-Sheg7yEJD51YHAvLEV/7Uvw95AeWqYPL3Vk3zGujJKIhJ+8oLw2ALaf3hbucILhKsgSoADOvtKRJuNVdcJkOrg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.8.6" + "@babel/helpers" "^7.8.4" + "@babel/parser" "^7.8.6" + "@babel/template" "^7.8.6" + "@babel/traverse" "^7.8.6" + "@babel/types" "^7.8.6" convert-source-map "^1.7.0" debug "^4.1.0" + gensync "^1.0.0-beta.1" json5 "^2.1.0" lodash "^4.17.13" resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.4.0", "@babel/generator@^7.7.4", "@babel/generator@^7.7.7": - version "7.7.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.7.tgz#859ac733c44c74148e1a72980a64ec84b85f4f45" - integrity sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ== +"@babel/generator@^7.4.0", "@babel/generator@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.6.tgz#57adf96d370c9a63c241cd719f9111468578537a" + integrity sha512-4bpOR5ZBz+wWcMeVtcf7FbjcFzCp+817z2/gHNncIRcM9MmKzUhtWCYAq27RAfUrAFwb+OCG1s9WEaVxfi6cjg== dependencies: - "@babel/types" "^7.7.4" + "@babel/types" "^7.8.6" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" -"@babel/helper-function-name@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz#ab6e041e7135d436d8f0a3eca15de5b67a341a2e" - integrity sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ== +"@babel/helper-function-name@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" + integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== dependencies: - "@babel/helper-get-function-arity" "^7.7.4" - "@babel/template" "^7.7.4" - "@babel/types" "^7.7.4" + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helper-get-function-arity@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz#cb46348d2f8808e632f0ab048172130e636005f0" - integrity sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA== +"@babel/helper-get-function-arity@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" + integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== dependencies: - "@babel/types" "^7.7.4" + "@babel/types" "^7.8.3" -"@babel/helper-module-imports@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz#e5a92529f8888bf319a6376abfbd1cebc491ad91" - integrity sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ== +"@babel/helper-module-imports@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" + integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== dependencies: - "@babel/types" "^7.7.4" + "@babel/types" "^7.8.3" -"@babel/helper-plugin-utils@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" - integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" + integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== -"@babel/helper-split-export-declaration@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz#57292af60443c4a3622cf74040ddc28e68336fd8" - integrity sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug== +"@babel/helper-split-export-declaration@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" + integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== dependencies: - "@babel/types" "^7.7.4" + "@babel/types" "^7.8.3" -"@babel/helpers@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.4.tgz#62c215b9e6c712dadc15a9a0dcab76c92a940302" - integrity sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg== +"@babel/helpers@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.4.tgz#754eb3ee727c165e0a240d6c207de7c455f36f73" + integrity sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w== dependencies: - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.4" + "@babel/types" "^7.8.3" -"@babel/highlight@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" - integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== +"@babel/highlight@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" + integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg== dependencies: chalk "^2.0.0" esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.7.4", "@babel/parser@^7.7.7": - version "7.7.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.7.tgz#1b886595419cf92d811316d5b715a53ff38b4937" - integrity sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw== +"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.6.tgz#ba5c9910cddb77685a008e3c587af8d27b67962c" + integrity sha512-trGNYSfwq5s0SgM1BMEB8hX3NDmO7EP2wsDGDexiaKMB92BaRpS+qZfpkMqUBhcsOTBwNy9B/jieo4ad/t/z2g== "@babel/plugin-syntax-object-rest-spread@^7.0.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz#47cf220d19d6d0d7b154304701f468fc1cc6ff46" - integrity sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg== + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-transform-runtime@^7.5.5": - version "7.7.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.7.6.tgz#4f2b548c88922fb98ec1c242afd4733ee3e12f61" - integrity sha512-tajQY+YmXR7JjTwRvwL4HePqoL3DYxpYXIHKVvrOIvJmeHe2y1w4tz5qz9ObUDC9m76rCzIMPyn4eERuwA4a4A== + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.8.3.tgz#c0153bc0a5375ebc1f1591cb7eea223adea9f169" + integrity sha512-/vqUt5Yh+cgPZXXjmaG9NT8aVfThKk7G4OqkVhrXqwsC5soMn/qTCxs36rZ2QFhpfTJcjw4SNDIZ4RUb8OL4jQ== dependencies: - "@babel/helper-module-imports" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" resolve "^1.8.1" semver "^5.5.1" "@babel/runtime@^7.5.5": - version "7.7.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.6.tgz#d18c511121aff1b4f2cd1d452f1bac9601dd830f" - integrity sha512-BWAJxpNVa0QlE5gZdWjSxXtemZyZ9RmrmVozxt3NUXeZhVIJ5ANyqmMc0JDrivBZyxUuQvFxlvH4OWWOogGfUw== + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.4.tgz#d79f5a2040f7caa24d53e563aad49cbc05581308" + integrity sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ== dependencies: regenerator-runtime "^0.13.2" -"@babel/template@^7.4.0", "@babel/template@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b" - integrity sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.4" - "@babel/types" "^7.7.4" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558" - integrity sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.4" - "@babel/helper-function-name" "^7.7.4" - "@babel/helper-split-export-declaration" "^7.7.4" - "@babel/parser" "^7.7.4" - "@babel/types" "^7.7.4" +"@babel/template@^7.4.0", "@babel/template@^7.8.3", "@babel/template@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" + integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.8.4", "@babel/traverse@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.6.tgz#acfe0c64e1cd991b3e32eae813a6eb564954b5ff" + integrity sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.8.6" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193" - integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA== +"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.6.tgz#629ecc33c2557fcde7126e58053127afdb3e6d01" + integrity sha512-wqz7pgWMIrht3gquyEFPVXeXCti72Rm8ep9b5tQKz9Yg9LzJA3HxosF1SB3Kc81KD1A3XBkkVYtJvCKS2Z/QrA== dependencies: esutils "^2.0.2" lodash "^4.17.13" to-fast-properties "^2.0.0" "@cnakazawa/watch@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" - integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== dependencies: exec-sh "^0.3.2" minimist "^1.2.0" @@ -805,9 +649,9 @@ defer-to-connect "^1.0.1" "@types/babel__core@^7.1.0": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.3.tgz#e441ea7df63cd080dfcd02ab199e6d16a735fc30" - integrity sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA== + version "7.1.6" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.6.tgz#16ff42a5ae203c9af1c6e190ed1f30f83207b610" + integrity sha512-tTnhWszAqvXnhW7m5jQU9PomXSiKXk2sFxpahXvI20SZKu9ylPi8WtIxueZ6ehDWikPT0jeFujMj3X4ZHuf3Tg== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -831,9 +675,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.0.8" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.8.tgz#479a4ee3e291a403a1096106013ec22cf9b64012" - integrity sha512-yGeB2dHEdvxjP0y4UbRtQaSkXJ9649fYCmIdRoul5kfAoGCwxuCbMhag0k3RPfnuh9kPGm8x89btcfDEXdVWGw== + version "7.0.9" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.9.tgz#be82fab304b141c3eee81a4ce3b034d0eba1590a" + integrity sha512-jEFQ8L1tuvPjOI8lnpaf73oCJe+aoxL6ygqSy6c8LcW98zaC+4mzWuQIRCEvKeCOu+lbqdXcg4Uqmm1S8AP1tw== dependencies: "@babel/types" "^7.3.0" @@ -845,9 +689,9 @@ bignumber.js "*" "@types/bn.js@^4.11.0", "@types/bn.js@^4.11.3", "@types/bn.js@^4.11.4": - version "4.11.5" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.5.tgz#40e36197433f78f807524ec623afcf0169ac81dc" - integrity sha512-AEAZcIZga0JgVMHNtl1CprA/hXX7/wPt79AgR4XqaDt7jyj3QWYw6LPoOiznPtugDmlubUnAahMs2PFxGcQrng== + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== dependencies: "@types/node" "*" @@ -876,9 +720,9 @@ integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== "@types/istanbul-lib-report@*": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#e5471e7fa33c61358dd38426189c037a58433b8c" - integrity sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg== + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== dependencies: "@types/istanbul-lib-coverage" "*" @@ -891,9 +735,9 @@ "@types/istanbul-lib-report" "*" "@types/jest@^24.0.15": - version "24.0.25" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.25.tgz#2aba377824ce040114aa906ad2cac2c85351360f" - integrity sha512-hnP1WpjN4KbGEK4dLayul6lgtys6FPz0UfxMeMQCv0M+sTnzN3ConfiO72jHgLxl119guHgI8gLqDOrRLsyp2g== + version "24.9.1" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.9.1.tgz#02baf9573c78f1b9974a5f36778b366aa77bd534" + integrity sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q== dependencies: jest-diff "^24.3.0" @@ -902,15 +746,20 @@ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== -"@types/node@*", "@types/node@^12.6.1": - version "12.12.14" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.14.tgz#1c1d6e3c75dba466e0326948d56e8bd72a1903d2" - integrity sha512-u/SJDyXwuihpwjXy7hOOghagLEV1KdAST6syfnOk6QZAMzZuWZqXy5aYYZbh8Jdpd4escVFP0MvftHNDb9pruA== +"@types/node@*": + version "13.7.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.7.6.tgz#cb734a7c191472ae6a2b3a502b4dfffcea974113" + integrity sha512-eyK7MWD0R1HqVTp+PtwRgFeIsemzuj4gBFSQxfPHY5iMjS7474e5wq+VFgTcdpyHeNxyKSaetYAjdMLJlKoWqA== "@types/node@^10.12.18", "@types/node@^10.3.2": - version "10.17.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.6.tgz#1aaabd6f6470a6ac3824ab1e94d731ca1326d93d" - integrity sha512-0a2X6cgN3RdPBL2MIlR6Lt0KlM7fOFsutuXcdglcOq6WvLnYXgPQSh0Mx6tO1KCAE8MxbHSOSTWDoUxRq+l3DA== + version "10.17.16" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.16.tgz#ee96ddac1a38d98d2c8a71c7df0cdad5758e8993" + integrity sha512-A4283YSA1OmnIivcpy/4nN86YlnKRiQp8PYwI2KdPCONEBN093QTb0gCtERtkLyVNGKKIGazTZ2nAmVzQU51zA== + +"@types/node@^12.6.1": + version "12.12.28" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.28.tgz#3a2b5f8d21f96ace690a8832ae9779114612575f" + integrity sha512-g73GJYJDXgf0jqg+P9S8h2acWbDXNkoCX8DLtJVu7Fkn788pzQ/oJsrdJz/2JejRf/SjfZaAhsw+3nd1D5EWGg== "@types/prop-types@*": version "15.7.3" @@ -918,9 +767,9 @@ integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== "@types/react@*": - version "16.9.15" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.15.tgz#aeabb7a50f96c9e31a16079ada20ede9ed602977" - integrity sha512-WsmM1b6xQn1tG3X2Hx4F3bZwc2E82pJXt5OPs2YJgg71IzvUoKOSSSYOvLXYCg1ttipM+UuA4Lj3sfvqjVxyZw== + version "16.9.23" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.23.tgz#1a66c6d468ba11a8943ad958a8cb3e737568271c" + integrity sha512-SsGVT4E7L2wLN3tPYLiF20hmZTPGuzaayVunfgXzUn1x4uHVsKH6QDJQ/TdpHqwsTLd4CwrmQ2vOgxN7gE24gw== dependencies: "@types/prop-types" "*" csstype "^2.2.0" @@ -943,19 +792,19 @@ "@types/ethereum-protocol" "*" "@types/yargs-parser@*": - version "13.1.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228" - integrity sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg== + version "15.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" + integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== "@types/yargs@^11.0.0": - version "11.1.3" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-11.1.3.tgz#33c8ebf05f78f1edeb249c1cde1a42ae57f5664e" - integrity sha512-moBUF6X8JsK5MbLZGP3vCfG/TVHZHsaePj3EimlLKp8+ESUjGjpXalxyn90a2L9fTM2ZGtW4swb6Am1DvVRNGA== + version "11.1.5" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-11.1.5.tgz#8d71dfe4848ac5d714b75eca3df9cac75a4f8dac" + integrity sha512-1jmXgoIyzxQSm33lYgEXvegtkhloHbed2I0QGlTN66U2F9/ExqJWSCSmaWC0IB/g1tW+IYSp+tDhcZBYB1ZGog== "@types/yargs@^13.0.0": - version "13.0.3" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.3.tgz#76482af3981d4412d65371a318f992d33464a380" - integrity sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ== + version "13.0.8" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.8.tgz#a38c22def2f1c2068f8971acb3ea734eb3c64a99" + integrity sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA== dependencies: "@types/yargs-parser" "*" @@ -1085,11 +934,11 @@ ajv@^5.2.2: json-schema-traverse "^0.3.0" ajv@^6.5.5: - version "6.10.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" - integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== + version "6.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" + integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== dependencies: - fast-deep-equal "^2.0.1" + fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" @@ -1099,11 +948,25 @@ amdefine@>=0.0.4: resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= +ansi-colors@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" + integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA== + dependencies: + ansi-wrap "^0.1.0" + ansi-escapes@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== +ansi-gray@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" + integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE= + dependencies: + ansi-wrap "0.1.0" + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -1144,6 +1007,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: "@types/color-name" "^1.1.1" color-convert "^2.0.1" +ansi-wrap@0.1.0, ansi-wrap@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" + integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= + any-promise@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" @@ -1173,11 +1041,23 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" +append-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" + integrity sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE= + dependencies: + buffer-equal "^1.0.0" + aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" @@ -1205,16 +1085,35 @@ arr-diff@^4.0.0: resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= +arr-filter@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/arr-filter/-/arr-filter-1.1.2.tgz#43fdddd091e8ef11aa4c45d9cdc18e2dff1711ee" + integrity sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4= + dependencies: + make-iterator "^1.0.0" + arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== +arr-map@^2.0.0, arr-map@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/arr-map/-/arr-map-2.0.2.tgz#3a77345ffc1cf35e2a91825601f9e58f2e24cac4" + integrity sha1-Onc0X/wc814qkYJWAfnljy4kysQ= + dependencies: + make-iterator "^1.0.0" + arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +array-each@^1.0.0, array-each@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" + integrity sha1-p5SvDAWrF1KEbudTofIRoFugxE8= + array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" @@ -1225,6 +1124,35 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= +array-initial@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/array-initial/-/array-initial-1.1.0.tgz#2fa74b26739371c3947bd7a7adc73be334b3d795" + integrity sha1-L6dLJnOTccOUe9enrcc74zSz15U= + dependencies: + array-slice "^1.0.0" + is-number "^4.0.0" + +array-last@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/array-last/-/array-last-1.3.0.tgz#7aa77073fec565ddab2493f5f88185f404a9d336" + integrity sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg== + dependencies: + is-number "^4.0.0" + +array-slice@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" + integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== + +array-sort@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-sort/-/array-sort-1.0.0.tgz#e4c05356453f56f53512a7d1d6123f2c54c0a88a" + integrity sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg== + dependencies: + default-compare "^1.0.0" + get-value "^2.0.6" + kind-of "^5.0.2" + array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" @@ -1271,7 +1199,17 @@ astral-regex@^1.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== -async-each@^1.0.0: +async-done@^1.2.0, async-done@^1.2.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/async-done/-/async-done-1.3.2.tgz#5e15aa729962a4b07414f528a88cdf18e0b290a2" + integrity sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.2" + process-nextick-args "^2.0.0" + stream-exhaust "^1.0.1" + +async-each@^1.0.0, async-each@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== @@ -1288,6 +1226,13 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== +async-settle@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-settle/-/async-settle-1.0.0.tgz#1d0a914bb02575bec8a8f3a74e5080f72b2c0c6b" + integrity sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs= + dependencies: + async-done "^1.2.2" + async@1.x, async@^1.4.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -1312,7 +1257,7 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -atob@^2.1.1: +atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== @@ -1328,9 +1273,9 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.0.tgz#24390e6ad61386b0a747265754d2a17219de862c" - integrity sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A== + version "1.9.1" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" + integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== babel-code-frame@^6.26.0: version "6.26.0" @@ -1889,6 +1834,21 @@ babylon@^6.18.0: resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== +bach@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/bach/-/bach-1.2.0.tgz#4b3ce96bf27134f79a1b414a51c14e34c3bd9880" + integrity sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA= + dependencies: + arr-filter "^1.1.1" + arr-flatten "^1.0.1" + arr-map "^2.0.0" + array-each "^1.0.0" + array-initial "^1.0.0" + array-last "^1.1.1" + async-done "^1.2.2" + async-settle "^1.0.0" + now-and-later "^2.0.0" + backoff@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f" @@ -1902,9 +1862,9 @@ balanced-match@^1.0.0: integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= base-x@^3.0.2: - version "3.0.7" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.7.tgz#1c5a7fafe8f66b4114063e8da102799d4e7c408f" - integrity sha512-zAKJGuQPihXW22fkrfOclUUZXM2g92z5GzlSMHxhO6r6Qj+Nm0ccaGNBzDZojzwOMkpjAv4J0fOv1U4go+a4iw== + version "3.0.8" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d" + integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA== dependencies: safe-buffer "^5.0.1" @@ -2057,7 +2017,7 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" -braces@^2.3.1: +braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== @@ -2228,6 +2188,11 @@ buffer-crc32@~0.2.3: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= +buffer-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" + integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74= + buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" @@ -2317,6 +2282,11 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= + camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" @@ -2328,9 +2298,9 @@ camelcase@^5.0.0, camelcase@^5.3.1: integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== caniuse-lite@^1.0.30000844: - version "1.0.30001015" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001015.tgz#15a7ddf66aba786a71d99626bc8f2b91c6f0f5f0" - integrity sha512-/xL2AbW/XWHNu1gnIrO8UitBGoFthcsDgU9VLK1/dpsoxbaD5LscHozKze05R6WLsBvLhqv78dAPozMFQBYLbQ== + version "1.0.30001030" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001030.tgz#78076c4c6d67d3e41d6eb9399853fb27fe6e44ee" + integrity sha512-QGK0W4Ft/Ac+zTjEiRJfwDNATvS3fodDczBXrH42784kcfqcDKpEPfN08N0HQjrAp8He/Jw8QiSS9QRn7XAbUw== capture-exit@^2.0.0: version "2.0.0" @@ -2424,10 +2394,29 @@ chokidar@^1.6.0: optionalDependencies: fsevents "^1.0.0" +chokidar@^2.0.0: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + chokidar@^3.0.2: - version "3.3.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" - integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== + version "3.3.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" + integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -2435,14 +2424,14 @@ chokidar@^3.0.2: is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.2.0" + readdirp "~3.3.0" optionalDependencies: - fsevents "~2.1.1" + fsevents "~2.1.2" chownr@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" - integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== ci-info@^2.0.0: version "2.0.0" @@ -2467,6 +2456,15 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + cliui@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" @@ -2485,6 +2483,11 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" +clone-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" + integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= + clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" @@ -2492,11 +2495,25 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" +clone-stats@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" + integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= + clone@2.1.2, clone@^2.0.0, clone@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= +cloneable-readable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" + integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== + dependencies: + inherits "^2.0.1" + process-nextick-args "^2.0.0" + readable-stream "^2.3.5" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -2515,6 +2532,15 @@ coinstring@^2.0.0: bs58 "^2.0.1" create-hash "^1.1.1" +collection-map@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c" + integrity sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw= + dependencies: + arr-map "^2.0.2" + for-own "^1.0.0" + make-iterator "^1.0.0" + collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" @@ -2547,6 +2573,11 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + colors@^1.1.2: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" @@ -2596,7 +2627,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.1: +concat-stream@^1.5.1, concat-stream@^1.6.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -2623,7 +2654,7 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@^1.4.0, convert-source-map@^1.5.1, convert-source-map@^1.7.0: +convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -2650,15 +2681,23 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +copy-props@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/copy-props/-/copy-props-2.0.4.tgz#93bb1cadfafd31da5bb8a9d4b41f471ec3a72dfe" + integrity sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A== + dependencies: + each-props "^1.3.0" + is-plain-object "^2.0.1" + core-js-pure@^3.0.1: - version "3.6.2" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.2.tgz#81f08059134d1c7318838024e1b8e866bcb1ddb3" - integrity sha512-PRasaCPjjCB65au2dMBPtxuIR6LM8MVNdbIbN57KxcDV1FAYQWlF0pqje/HC2sM6nm/s9KqSTkMTU75pozaghA== + version "3.6.4" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.4.tgz#4bf1ba866e25814f149d4e9aaa08c36173506e3a" + integrity sha512-epIhRLkXdgv32xIUFaaAry2wdxZYBi6bgM7cB136dzzXXa+dFyRLTZeLUJxnd8ShrmyVXBub63n2NHo2JAt8Cw== core-js@^2.4.0, core-js@^2.5.0: - version "2.6.10" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.10.tgz#8a5b8391f8cc7013da703411ce5b585706300d7f" - integrity sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA== + version "2.6.11" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -2762,9 +2801,9 @@ cssstyle@^1.0.0: cssom "0.3.x" csstype@^2.2.0: - version "2.6.7" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.7.tgz#20b0024c20b6718f4eda3853a1f5a1cce7f5e4a5" - integrity sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ== + version "2.6.9" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.9.tgz#05141d0cd557a56b8891394c1911c40c8a98d098" + integrity sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q== d@1, d@^1.0.1: version "1.0.1" @@ -2804,7 +2843,7 @@ debug@3.1.0: dependencies: ms "2.0.0" -debug@3.2.6, debug@^3.2.6: +debug@3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -2902,10 +2941,17 @@ deep-eql@^3.0.1: dependencies: type-detect "^4.0.0" -deep-equal@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= +deep-equal@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" deep-extend@^0.6.0: version "0.6.0" @@ -2917,10 +2963,22 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +default-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-compare/-/default-compare-1.0.0.tgz#cb61131844ad84d84788fb68fd01681ca7781a2f" + integrity sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ== + dependencies: + kind-of "^5.0.2" + +default-resolution@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/default-resolution/-/default-resolution-2.0.0.tgz#bcb82baa72ad79b426a76732f1a81ad6df26d684" + integrity sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ= + defer-to-connect@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.1.tgz#88ae694b93f67b81815a2c8c769aef6574ac8f2f" - integrity sha512-J7thop4u3mRTkYRQ+Vpfwy2G5Ehoy82I14+14W4YMDLKdWloI9gSzRbV30s/NckQGVJtPkWNcW4oMAUigTdqiQ== + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== deferred-leveldown@~1.2.1: version "1.2.2" @@ -2999,6 +3057,11 @@ destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= + detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" @@ -3006,7 +3069,7 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" -detect-libc@^1.0.2, detect-libc@^1.0.3: +detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= @@ -3067,6 +3130,13 @@ domexception@^1.0.1: dependencies: webidl-conversions "^4.0.2" +dotignore@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" + integrity sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw== + dependencies: + minimatch "^3.0.4" + drbg.js@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/drbg.js/-/drbg.js-1.0.1.tgz#3e36b6c42b37043823cdbc332d58f31e2445480b" @@ -3081,6 +3151,24 @@ duplexer3@^0.1.4: resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= +duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +each-props@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/each-props/-/each-props-1.3.2.tgz#ea45a414d16dd5cfa419b1a81720d5ca06892333" + integrity sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA== + dependencies: + is-plain-object "^2.0.1" + object.defaults "^1.1.0" + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -3095,9 +3183,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.47: - version "1.3.322" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz#a6f7e1c79025c2b05838e8e344f6e89eb83213a8" - integrity sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA== + version "1.3.362" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.362.tgz#9ed33f9d0673888d6a2614347b4b63b490009408" + integrity sha512-xdU5VCoZyMPMOWtCaMgbr48OwWZHrMLbGnAOlEqibXiIGsb4kiCGWEHK5NOghcVLdBVIbr/BW+yuKxVuGTtzEg== elliptic@6.3.3: version "6.3.3" @@ -3109,7 +3197,7 @@ elliptic@6.3.3: hash.js "^1.0.0" inherits "^2.0.1" -elliptic@6.5.2, elliptic@^6.0.0, elliptic@^6.4.0, elliptic@^6.4.1: +elliptic@6.5.2, elliptic@^6.0.0, elliptic@^6.4.0, elliptic@^6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== @@ -3169,17 +3257,17 @@ errno@~0.1.1: dependencies: prr "~1.0.1" -error-ex@^1.3.1: +error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0-next.1: - version "1.17.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.0.tgz#f42a517d0036a5591dbb2c463591dc8bb50309b1" - integrity sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug== +es-abstract@^1.17.0-next.1, es-abstract@^1.17.2: + version "1.17.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184" + integrity sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ== dependencies: es-to-primitive "^1.2.1" function-bind "^1.1.1" @@ -3193,22 +3281,6 @@ es-abstract@^1.17.0-next.1: string.prototype.trimleft "^2.1.1" string.prototype.trimright "^2.1.1" -es-abstract@^1.5.0: - version "1.16.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.3.tgz#52490d978f96ff9f89ec15b5cf244304a5bca161" - integrity sha512-WtY7Fx5LiOnSYgF5eg/1T+GONaGmpvpPdCpSnYij+U2gDTL0UPfWrhDw7b2IYb+9NQJsYpCA0wOQvZfsd6YwRw== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-inspect "^1.7.0" - object-keys "^1.1.1" - string.prototype.trimleft "^2.1.0" - string.prototype.trimright "^2.1.0" - es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -3218,7 +3290,7 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.35, es5-ext@^0.10.50: +es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50: version "0.10.53" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== @@ -3227,7 +3299,7 @@ es5-ext@^0.10.35, es5-ext@^0.10.50: es6-symbol "~3.1.3" next-tick "~1.0.0" -es6-iterator@~2.0.3: +es6-iterator@^2.0.1, es6-iterator@^2.0.3, es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= @@ -3244,6 +3316,16 @@ es6-symbol@^3.1.1, es6-symbol@~3.1.3: d "^1.0.1" ext "^1.1.2" +es6-weak-map@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" + integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== + dependencies: + d "1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + es6-symbol "^3.1.1" + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -3267,11 +3349,11 @@ escodegen@1.8.x: source-map "~0.2.0" escodegen@^1.9.1: - version "1.12.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.1.tgz#08770602a74ac34c7a90ca9229e7d51e379abc76" - integrity sha512-Q8t2YZ+0e0pc7NRVj3B4tSQ9rim1oi4Fh46k2xhJ2qOiEwhQfdjyEQddWdj7ZFaKmU+5104vn1qrcjEPWq+bgQ== + version "1.14.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" + integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ== dependencies: - esprima "^3.1.3" + esprima "^4.0.1" estraverse "^4.2.0" esutils "^2.0.2" optionator "^0.8.1" @@ -3283,12 +3365,7 @@ esprima@2.7.x, esprima@^2.7.1: resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= -esprima@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - -esprima@^4.0.0: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -3353,10 +3430,10 @@ eth-json-rpc-errors@^1.0.1: dependencies: fast-safe-stringify "^2.0.6" -eth-json-rpc-errors@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eth-json-rpc-errors/-/eth-json-rpc-errors-2.0.0.tgz#bdc19df8b80a820844709193372f0d75fb74fed8" - integrity sha512-casdSTVOxbC3ptfUdclJRvU0Sgmdm/QtezLku8l4iVR5wNFe+KF+tfnlm2I84xxpx7mkyyHeeUxmRkcB5Os6mw== +eth-json-rpc-errors@^2.0.1, eth-json-rpc-errors@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/eth-json-rpc-errors/-/eth-json-rpc-errors-2.0.2.tgz#c1965de0301fe941c058e928bebaba2e1285e3c4" + integrity sha512-uBCRM2w2ewusRHGxN8JhcuOb2RN3ueAOYH/0BhqdFmQkZx5lj5+fLKTz0mIVOzd4FG5/kUksCzCD7eTEim6gaA== dependencies: fast-safe-stringify "^2.0.6" @@ -3412,9 +3489,9 @@ eth-json-rpc-middleware@^1.5.0: tape "^4.6.3" eth-json-rpc-middleware@^4.1.4, eth-json-rpc-middleware@^4.1.5: - version "4.3.0" - resolved "https://registry.yarnpkg.com/eth-json-rpc-middleware/-/eth-json-rpc-middleware-4.3.0.tgz#d3e72efb60b6f601f022ce01384481eaed552b6b" - integrity sha512-Acr+FaIHB0oIV0nWrCvepQghgA3FzYFvnMDXdTUeHQvAX/G6ioMbw1exGJs+6HirRjJ+MmkZqaArphx+PTrRNQ== + version "4.4.1" + resolved "https://registry.yarnpkg.com/eth-json-rpc-middleware/-/eth-json-rpc-middleware-4.4.1.tgz#07d3dd0724c24a8d31e4a172ee96271da71b4228" + integrity sha512-yoSuRgEYYGFdVeZg3poWOwAlRI+MoBIltmOB86MtpoZjvLbou9EB/qWMOWSmH2ryCWLW97VYY6NWsmWm3OAA7A== dependencies: btoa "^1.2.1" clone "^2.1.1" @@ -3452,6 +3529,15 @@ eth-lib@^0.1.26: ws "^3.0.0" xhr-request-promise "^0.1.2" +eth-lib@^0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" + integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + xhr-request-promise "^0.1.2" + eth-query@^2.0.2, eth-query@^2.1.0, eth-query@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/eth-query/-/eth-query-2.1.2.tgz#d6741d9000106b51510c72db92d6365456a6da5e" @@ -3460,7 +3546,7 @@ eth-query@^2.0.2, eth-query@^2.1.0, eth-query@^2.1.2: json-rpc-random-id "^1.0.0" xtend "^4.0.1" -eth-saddle@0.1.17: +eth-saddle@^0.1.17: version "0.1.17" resolved "https://registry.yarnpkg.com/eth-saddle/-/eth-saddle-0.1.17.tgz#54c7bf89970739f0154b382cfbdda9ccdae314f5" integrity sha512-o+ZhnasyFmlBtmeAI8MV/pnCPtjxnkJ058qQ9H0k27Ew6f+Aj7k/k0HuEElCMkczELTa57UJIv0nZqjCVNARxw== @@ -3546,10 +3632,10 @@ ethereum-common@^0.0.18: resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.18.tgz#2fdc3576f232903358976eb39da783213ff9523f" integrity sha1-L9w1dvIykDNYl26znaeDIT/5Uj8= -ethereum-types@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ethereum-types/-/ethereum-types-3.0.0.tgz#9fa3a98b8b9b64a0fab1864de7bc7fd7b1699fcd" - integrity sha512-jRSsiua+e4/89r7M3mqPcP1M2f3TgXxpVmWysy+7pEg2H4lwEQRWarbYfIpWp81NtxrcMQv5bMK+yR1MN4sDpg== +ethereum-types@^3.0.0, ethereum-types@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/ethereum-types/-/ethereum-types-3.1.0.tgz#76de33b398b5b5375e08e647c92ac00e87a647d9" + integrity sha512-E4lBfxzRSFjd2OM+BATc0b3nN+xWVpAQhBCwSNS9kbsXVPV2LNhIduwCR8Poc8seQukFfuXp0QoVXOlQbUS2pQ== dependencies: "@types/node" "*" bignumber.js "~9.0.0" @@ -3595,7 +3681,7 @@ ethereumjs-account@^2.0.3: rlp "^2.0.0" safe-buffer "^5.1.1" -ethereumjs-block@2.2.1, ethereumjs-block@~2.2.0: +ethereumjs-block@2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-2.2.1.tgz#5fba423305b40ab6486a6b81922e5312b2667c8d" integrity sha512-ze8I1844m5oKZL7hiHuezRcPzqdi4Iv0ssqQyuRaJ9Je0/YCYfXobJHvNLnex2ETgs5JypicdtLYrCNWdgcLvg== @@ -3617,7 +3703,7 @@ ethereumjs-block@^1.2.2, ethereumjs-block@^1.4.1, ethereumjs-block@^1.6.0: ethereumjs-util "^5.0.0" merkle-patricia-tree "^2.1.2" -ethereumjs-block@^2.2.1, ethereumjs-block@~2.2.2: +ethereumjs-block@^2.2.1, ethereumjs-block@~2.2.0, ethereumjs-block@~2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz#c7654be7e22df489fda206139ecd63e2e9c04965" integrity sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg== @@ -3644,17 +3730,17 @@ ethereumjs-blockchain@^4.0.2: rlp "^2.2.2" semaphore "^1.1.0" -ethereumjs-common@1.4.0, ethereumjs-common@^1.1.0, ethereumjs-common@^1.3.1: +ethereumjs-common@1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.4.0.tgz#a940685f88f3c2587e4061630fe720b089c965b8" integrity sha512-ser2SAplX/YI5W2AnzU8wmSjKRy4KQd4uxInJ36BzjS3m18E/B9QedPUIresZN1CSEQb/RgNQ2gN7C/XbpTafA== -ethereumjs-common@^1.3.2, ethereumjs-common@^1.5.0: +ethereumjs-common@^1.1.0, ethereumjs-common@^1.3.1, ethereumjs-common@^1.3.2, ethereumjs-common@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.0.tgz#d3e82fc7c47c0cef95047f431a99485abc9bb1cd" integrity sha512-SZOjgK1356hIY7MRj3/ma5qtfr/4B5BL+G4rP/XSMYr2z1H5el4RX5GReYCKmQmYI/nSBmRnwrZ17IfHuG0viQ== -ethereumjs-tx@2.1.1, ethereumjs-tx@^2.1.1: +ethereumjs-tx@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-2.1.1.tgz#7d204e2b319156c9bc6cec67e9529424a26e8ccc" integrity sha512-QtVriNqowCFA19X9BCRPMgdVNJ0/gMBS91TQb1DfrhsbR748g4STwxZptFAwfqehMyrF8rDwB23w87PQwru0wA== @@ -3662,7 +3748,7 @@ ethereumjs-tx@2.1.1, ethereumjs-tx@^2.1.1: ethereumjs-common "^1.3.1" ethereumjs-util "^6.0.0" -ethereumjs-tx@2.1.2: +ethereumjs-tx@2.1.2, ethereumjs-tx@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz#5dfe7688bf177b45c9a23f86cf9104d47ea35fed" integrity sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw== @@ -3798,9 +3884,9 @@ ethers@4.0.0-beta.3: xmlhttprequest "1.8.0" ethers@~4.0.4: - version "4.0.40" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.40.tgz#6e1963d10b5d336a13cd81b519c230cc17624653" - integrity sha512-MC9BtV7Hpq4dgFONEfanx9aU9GhhoWU270F+/wegHZXA7FR+2KXFdt36YIQYLmVY5ykUWswDxd+f9EVkIa7JOA== + version "4.0.45" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.45.tgz#8d4cd764d7c7690836b583d4849203c225eb56e2" + integrity sha512-N/Wmc6Mw4pQO+Sss1HnKDCSS6KSCx0luoBMiPNq+1GbOaO3YaZOyplBEhj+NEoYsizZYODtkITg2oecPeNnidQ== dependencies: aes-js "3.0.0" bn.js "^4.4.0" @@ -3834,9 +3920,9 @@ eventemitter3@3.1.2: integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== events@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" - integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" + integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" @@ -3914,6 +4000,13 @@ expand-template@^2.0.3: resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + expect@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/expect/-/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca" @@ -3984,7 +4077,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@~3.0.2: +extend@^3.0.0, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -4027,15 +4120,25 @@ fake-merkle-patricia-tree@^1.0.1: dependencies: checkpoint-store "^1.1.0" +fancy-log@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" + integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== + dependencies: + ansi-gray "^0.1.1" + color-support "^1.1.3" + parse-node-version "^1.0.0" + time-stamp "^1.0.0" + fast-deep-equal@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-deep-equal@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== fast-glob@^3.2.2: version "3.2.2" @@ -4049,16 +4152,11 @@ fast-glob@^3.2.2: micromatch "^4.0.2" picomatch "^2.2.1" -fast-json-stable-stringify@2.x: +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= - fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" @@ -4163,6 +4261,14 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -4177,11 +4283,55 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" +findup-sync@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" + integrity sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw= + dependencies: + detect-file "^1.0.0" + is-glob "^3.1.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + +findup-sync@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" + integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + +fined@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fined/-/fined-1.2.0.tgz#d00beccf1aa2b475d16d423b0238b713a2c4a37b" + integrity sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng== + dependencies: + expand-tilde "^2.0.2" + is-plain-object "^2.0.3" + object.defaults "^1.1.0" + object.pick "^1.2.0" + parse-filepath "^1.0.1" + +flagged-respawn@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" + integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== + flow-stoplight@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/flow-stoplight/-/flow-stoplight-1.0.0.tgz#4a292c5bcff8b39fa6cc0cb1a853d86f27eeff7b" integrity sha1-SiksW8/4s5+mzAyxqFPYbyfu/3s= +flush-write-stream@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + for-each@~0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -4201,6 +4351,13 @@ for-own@^0.1.4: dependencies: for-in "^1.0.1" +for-own@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" + integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs= + dependencies: + for-in "^1.0.1" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -4264,20 +4421,20 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.6.0" +fs-mkdirp-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" + integrity sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes= + dependencies: + graceful-fs "^4.1.11" + through2 "^2.0.3" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.0.0: - version "1.2.9" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" - integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== - dependencies: - nan "^2.12.1" - node-pre-gyp "^0.12.0" - -fsevents@^1.2.7: +fsevents@^1.0.0, fsevents@^1.2.7: version "1.2.11" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.11.tgz#67bf57f4758f02ede88fb2a1712fef4d15358be3" integrity sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw== @@ -4285,12 +4442,12 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fsevents@~2.1.1: +fsevents@~2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== -function-bind@^1.0.2, function-bind@^1.1.1, function-bind@~1.1.1: +function-bind@^1.1.1, function-bind@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== @@ -4300,7 +4457,7 @@ functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -ganache-core@^2.6.0, ganache-core@^2.9.1, "ganache-core@https://github.com/compound-finance/ganache-core.git#compound": +ganache-core@^2.9.0-istanbul.0, ganache-core@^2.9.1, "ganache-core@https://github.com/compound-finance/ganache-core.git#compound": version "2.9.1" resolved "https://github.com/compound-finance/ganache-core.git#1d1610a2a0b921e2120fade845658c6238100e21" dependencies: @@ -4347,6 +4504,11 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -4421,6 +4583,14 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + glob-parent@^5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" @@ -4435,6 +4605,34 @@ glob-parent@~5.1.0: dependencies: is-glob "^4.0.1" +glob-stream@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" + integrity sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ= + dependencies: + extend "^3.0.0" + glob "^7.1.1" + glob-parent "^3.1.0" + is-negated-glob "^1.0.0" + ordered-read-streams "^1.0.0" + pumpify "^1.3.5" + readable-stream "^2.1.5" + remove-trailing-separator "^1.0.1" + to-absolute-glob "^2.0.0" + unique-stream "^2.0.2" + +glob-watcher@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-5.0.3.tgz#88a8abf1c4d131eb93928994bc4a593c2e5dd626" + integrity sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg== + dependencies: + anymatch "^2.0.0" + async-done "^1.2.0" + chokidar "^2.0.0" + is-negated-glob "^1.0.0" + just-debounce "^1.0.0" + object.defaults "^1.1.0" + glob@7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" @@ -4458,7 +4656,7 @@ glob@^5.0.15: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.4: +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -4470,6 +4668,26 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + global@~4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" @@ -4488,6 +4706,13 @@ globals@^9.18.0: resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== +glogg@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.2.tgz#2d7dd702beda22eb3bffadf880696da6d846313f" + integrity sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA== + dependencies: + sparkles "^1.0.0" + got@9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -4525,7 +4750,7 @@ got@^7.1.0: url-parse-lax "^1.0.0" url-to-options "^1.0.1" -graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: +graceful-fs@^4.0.0, graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== @@ -4545,10 +4770,51 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -handlebars@^4.0.1, handlebars@^4.1.2: - version "4.5.3" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" - integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== +gulp-cli@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/gulp-cli/-/gulp-cli-2.2.0.tgz#5533126eeb7fe415a7e3e84a297d334d5cf70ebc" + integrity sha512-rGs3bVYHdyJpLqR0TUBnlcZ1O5O++Zs4bA0ajm+zr3WFCfiSLjGwoCBqFs18wzN+ZxahT9DkOK5nDf26iDsWjA== + dependencies: + ansi-colors "^1.0.1" + archy "^1.0.0" + array-sort "^1.0.0" + color-support "^1.1.3" + concat-stream "^1.6.0" + copy-props "^2.0.1" + fancy-log "^1.3.2" + gulplog "^1.0.0" + interpret "^1.1.0" + isobject "^3.0.1" + liftoff "^3.1.0" + matchdep "^2.0.0" + mute-stdout "^1.0.0" + pretty-hrtime "^1.0.0" + replace-homedir "^1.0.0" + semver-greatest-satisfied-range "^1.1.0" + v8flags "^3.0.1" + yargs "^7.1.0" + +gulp@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/gulp/-/gulp-4.0.2.tgz#543651070fd0f6ab0a0650c6a3e6ff5a7cb09caa" + integrity sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA== + dependencies: + glob-watcher "^5.0.3" + gulp-cli "^2.2.0" + undertaker "^1.2.1" + vinyl-fs "^3.0.0" + +gulplog@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" + integrity sha1-4oxNRdBey77YGDY86PnFkmIp/+U= + dependencies: + glogg "^1.0.0" + +handlebars@^4.0.1: + version "4.7.3" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.3.tgz#8ece2797826886cf8082d1726ff21d2a022550ee" + integrity sha512-SRGwSYuNfx8DwHD/6InAPzD6RgeruWLT+B8e8a7gGs8FWgHzlExpTFMEq2IA6QpAfOClpKHy6+8IqTjeBCu6Kg== dependencies: neo-async "^2.6.0" optimist "^0.6.1" @@ -4561,7 +4827,7 @@ har-schema@^2.0.0: resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= -har-validator@~5.1.0: +har-validator@~5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== @@ -4649,7 +4915,7 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.1, has@^1.0.3, has@~1.0.3: +has@^1.0.3, has@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== @@ -4724,10 +4990,17 @@ home-or-tmp@^2.0.0: os-homedir "^1.0.0" os-tmpdir "^1.0.1" +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + hosted-git-info@^2.1.4: - version "2.8.5" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" - integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== + version "2.8.7" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.7.tgz#4d2e0d5248e1cfabc984b0f6a6d75fe36e679511" + integrity sha512-ChkjQtKJ3GI6SsI4O5jwr8q8EPrWCnxuc4Tbx+vRI5x6mDOpjKKltNo1lRlszw3xwgTOSns1ZRBiMmmwpcvLxg== html-encoding-sniffer@^1.0.2: version "1.0.2" @@ -4736,10 +5009,15 @@ html-encoding-sniffer@^1.0.2: dependencies: whatwg-encoding "^1.0.1" +html-escaper@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.0.tgz#71e87f931de3fe09e56661ab9a29aadec707b491" + integrity sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig== + http-cache-semantics@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz#495704773277eeef6e43f9ab2c2c7d259dda25c5" - integrity sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew== + version "4.0.4" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#13eeb612424bb113d52172c28a13109c46fa85d7" + integrity sha512-Z2EICWNJou7Tr9Bd2M2UqDJq3A9F2ePG9w3lIpjoyuSyXFP9QbniJVu3XQYytuw5ebmG7dXSXO9PgAjJG8DDKA== http-errors@1.7.2: version "1.7.2" @@ -4777,7 +5055,7 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -iconv-lite@0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: +iconv-lite@0.4.24, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -4796,13 +5074,6 @@ ieee754@^1.1.4: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== -ignore-walk@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" - integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== - dependencies: - minimatch "^3.0.4" - immediate@^3.2.3, immediate@~3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" @@ -4839,11 +5110,16 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@~1.3.0: +ini@^1.3.4, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== +interpret@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== + invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -4856,10 +5132,18 @@ invert-kv@^1.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= -ipaddr.js@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" - integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" + integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== + dependencies: + is-relative "^1.0.0" + is-windows "^1.0.1" is-accessor-descriptor@^0.1.6: version "0.1.6" @@ -4875,6 +5159,11 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -4899,12 +5188,7 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.3, is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== - -is-callable@^1.1.5: +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== @@ -4931,9 +5215,9 @@ is-data-descriptor@^1.0.0: kind-of "^6.0.0" is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== is-descriptor@^0.1.0: version "0.1.6" @@ -4982,17 +5266,15 @@ is-extglob@^1.0.0: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= -is-extglob@^2.1.1: +is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= - dependencies: - number-is-nan "^1.0.0" + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== is-fn@^1.0.0: version "1.0.0" @@ -5028,7 +5310,14 @@ is-glob@^2.0.0, is-glob@^2.0.1: dependencies: is-extglob "^1.0.0" -is-glob@^4.0.1, is-glob@~4.0.1: +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -5045,6 +5334,11 @@ is-natural-number@^4.0.1: resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" integrity sha1-q5124dtM7VHjXeDHLr7PCfc0zeg= +is-negated-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" + integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI= + is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" @@ -5079,7 +5373,7 @@ is-plain-obj@^1.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= -is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== @@ -5096,20 +5390,20 @@ is-primitive@^2.0.0: resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= - dependencies: - has "^1.0.1" - -is-regex@^1.0.5: +is-regex@^1.0.4, is-regex@^1.0.5, is-regex@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== dependencies: has "^1.0.3" +is-relative@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" + integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== + dependencies: + is-unc-path "^1.0.0" + is-retry-allowed@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" @@ -5132,7 +5426,24 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-windows@^1.0.2: +is-unc-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" + integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== + dependencies: + unc-path-regex "^0.1.2" + +is-utf8@^0.2.0, is-utf8@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-valid-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" + integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= + +is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== @@ -5221,11 +5532,11 @@ istanbul-lib-source-maps@^3.0.1: source-map "^0.6.1" istanbul-reports@^2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af" - integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA== + version "2.2.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931" + integrity sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg== dependencies: - handlebars "^4.1.2" + html-escaper "^2.0.0" istanbul@^0.4.5: version "0.4.5" @@ -5752,12 +6063,12 @@ json-rpc-engine@^3.4.0, json-rpc-engine@^3.6.0: safe-event-emitter "^1.0.1" json-rpc-engine@^5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-5.1.5.tgz#a5f9915356ea916d5305716354080723c63dede7" - integrity sha512-HTT9HixG4j8vHYrmJIckgbISW9Q8tCkySv7x7Q8zjMpcw10wSe/dZSQ0w08VkDm3y195K4074UlvD3hxaznvlw== + version "5.1.8" + resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-5.1.8.tgz#5ba0147ce571899bbaa7133ffbc05317c34a3c7f" + integrity sha512-vTBSDEPJV1fPAsbm2g5sEuPjsgLdiab2f1CTn2PyRr8nxggUpA996PDlNQDsM0gnrA99F8KIBLq2nIKrOFl1Mg== dependencies: async "^2.0.1" - eth-json-rpc-errors "^2.0.0" + eth-json-rpc-errors "^2.0.1" promise-to-callback "^1.0.0" safe-event-emitter "^1.0.1" @@ -5788,6 +6099,11 @@ json-schema@0.2.3: resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" @@ -5846,6 +6162,11 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +just-debounce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/just-debounce/-/just-debounce-1.0.0.tgz#87fccfaeffc0b68cd19d55f6722943f929ea35ea" + integrity sha1-h/zPrv/AtozRnVX2cilD+SnqNeo= + keccak@^1.0.2: version "1.4.0" resolved "https://registry.yarnpkg.com/keccak/-/keccak-1.4.0.tgz#572f8a6dbee8e7b3aa421550f9e6408ca2186f80" @@ -5895,15 +6216,15 @@ kind-of@^4.0.0: dependencies: is-buffer "^1.1.5" -kind-of@^5.0.0: +kind-of@^5.0.0, kind-of@^5.0.2: version "5.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== klaw@^1.0.0: version "1.3.1" @@ -5917,6 +6238,21 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +last-run@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/last-run/-/last-run-1.1.1.tgz#45b96942c17b1c79c772198259ba943bebf8ca5b" + integrity sha1-RblpQsF7HHnHchmCWbqUO+v4yls= + dependencies: + default-resolution "^2.0.0" + es6-weak-map "^2.0.1" + +lazystream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" + integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= + dependencies: + readable-stream "^2.0.5" + lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -5924,6 +6260,13 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +lead@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" + integrity sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI= + dependencies: + flush-write-stream "^1.0.2" + left-pad@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" @@ -6071,6 +6414,31 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +liftoff@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" + integrity sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog== + dependencies: + extend "^3.0.0" + findup-sync "^3.0.0" + fined "^1.0.1" + flagged-respawn "^1.0.0" + is-plain-object "^2.0.4" + object.map "^1.0.0" + rechoir "^0.6.2" + resolve "^1.1.7" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" @@ -6128,9 +6496,9 @@ lodash@^4.14.2, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17. integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== loglevel@^1.6.1: - version "1.6.6" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.6.tgz#0ee6300cc058db6b3551fa1c4bf73b83bb771312" - integrity sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ== + version "1.6.7" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.7.tgz#b3e034233188c68b889f5b862415306f565e2c56" + integrity sha512-cY2eLFrQSAfVPhCgH1s7JI73tMbg9YC3v3+ZHVW67sBS7UxWzNEk/ZBbSfLykBWHp33dqqtOv82gjhKEi81T/A== looper@^2.0.0: version "2.0.0" @@ -6207,9 +6575,16 @@ make-dir@^2.1.0: semver "^5.6.0" make-error@1.x: - version "1.3.5" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" - integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +make-iterator@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" + integrity sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw== + dependencies: + kind-of "^6.0.2" makeerror@1.0.x: version "1.0.11" @@ -6218,7 +6593,7 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" -map-cache@^0.2.2: +map-cache@^0.2.0, map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= @@ -6230,6 +6605,16 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +matchdep@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/matchdep/-/matchdep-2.0.0.tgz#c6f34834a0d8dbc3b37c27ee8bbcb27c7775582e" + integrity sha1-xvNINKDY28OzfCfui7yyfHd1WC4= + dependencies: + findup-sync "^2.0.0" + micromatch "^3.0.4" + resolve "^1.4.0" + stack-trace "0.0.10" + math-random@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" @@ -6338,7 +6723,7 @@ micromatch@^2.1.5: parse-glob "^3.0.4" regex-cache "^0.4.2" -micromatch@^3.1.10, micromatch@^3.1.4: +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -6373,17 +6758,17 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.42.0: - version "1.42.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac" - integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ== +mime-db@1.43.0: + version "1.43.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" + integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.25" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.25.tgz#39772d46621f93e2a80a856c53b86a62156a6437" - integrity sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg== + version "2.1.26" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" + integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== dependencies: - mime-db "1.42.0" + mime-db "1.43.0" mime@1.6.0: version "1.6.0" @@ -6401,9 +6786,9 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== mimic-response@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.0.0.tgz#996a51c60adf12cb8a87d7fb8ef24c2f3d5ebb46" - integrity sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" + integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== min-document@^2.19.0: version "2.19.0" @@ -6474,7 +6859,12 @@ mkdirp-promise@^5.0.1: dependencies: mkdirp "*" -mkdirp@*, mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@*: + version "1.0.3" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.3.tgz#4cf2e30ad45959dddea53ad97d518b6c8205e1ea" + integrity sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g== + +mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -6498,9 +6888,9 @@ mocha@^4.0.1: supports-color "4.4.0" mock-fs@^4.1.0: - version "4.10.4" - resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.10.4.tgz#4eaa3d6f7da2f44e1f3dd6b462cbbcb7b082e3d4" - integrity sha512-gDfZDLaPIvtOusbusLinfx6YSe2YpQsDT8qdP41P47dQ/NQggtkHukz7hwqgt8QvMBmAv+Z6DGmXPyb5BWX2nQ== + version "4.11.0" + resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.11.0.tgz#0828107e4b843a6ba855ecebfe3c6e073b69db92" + integrity sha512-Yp4o3/ZA15wsXqJTT+R+9w2AYIkD1i80Lds47wDbuUhOvQvm+O2EfjFZSz0pMgZZSPHRhGxgcd2+GL4+jZMtdw== ms@2.0.0: version "2.0.0" @@ -6517,12 +6907,17 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +mute-stdout@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mute-stdout/-/mute-stdout-1.0.1.tgz#acb0300eb4de23a7ddeec014e3e96044b3472331" + integrity sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg== + nan@2.13.2: version "2.13.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw== -nan@^2.12.1, nan@^2.13.2, nan@^2.14.0, nan@^2.2.1: +nan@^2.11.0, nan@^2.12.1, nan@^2.13.2, nan@^2.14.0, nan@^2.2.1: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== @@ -6559,15 +6954,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -needle@^2.2.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -6589,9 +6975,9 @@ nice-try@^1.0.4: integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== node-abi@^2.7.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.13.0.tgz#e2f2ec444d0aca3ea1b3874b6de41d1665828f63" - integrity sha512-9HrZGFVTR5SOu3PZAnAY2hLO36aW1wmA+FDsVkr85BTST32TLCA1H/AEcatVRAsWLyXS3bqUDYCAjq5/QGuSTA== + version "2.15.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.15.0.tgz#51d55cc711bd9e4a24a572ace13b9231945ccb10" + integrity sha512-FeLpTS0F39U7hHZU1srAK4Vx+5AHNVOTP+hxBNQknR/54laTHSFIJkDWDqiquY1LeLUgTfPN7sLPhMubx0PLAg== dependencies: semver "^5.4.1" @@ -6638,22 +7024,6 @@ node-notifier@^5.4.2: shellwords "^0.1.1" which "^1.3.0" -node-pre-gyp@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" - integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - noop-logger@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" @@ -6666,14 +7036,6 @@ nopt@3.x: dependencies: abbrev "1" -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" - normalize-package-data@^2.3.2: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -6701,18 +7063,12 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== -npm-bundled@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.0.tgz#2e8fdb7e69eff2df963937b696243316537c284b" - integrity sha512-ez6dcKBFNo4FvlMqscBEFUum6M2FTLW5grqm3DyBKB5XOyKVCeeWvAuoZtbmW/5Cv8EM2bQUOA6ufxa/TKVN0g== - -npm-packlist@^1.1.6: - version "1.4.6" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.6.tgz#53ba3ed11f8523079f1457376dd379ee4ea42ff4" - integrity sha512-u65uQdb+qwtGvEJh/DgQgW1Xg7sqeNbmxYyrvlNznaVTjV3E5P6F/EFjM+BVHXl7JJlsdG8A64M0XI8FI/IOlg== +now-and-later@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c" + integrity sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ== dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" + once "^1.3.2" npm-run-path@^2.0.0: version "2.0.2" @@ -6721,7 +7077,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npmlog@^4.0.1, npmlog@^4.0.2: +npmlog@^4.0.1: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -6768,15 +7124,15 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.7.0: +object-inspect@^1.7.0, object-inspect@~1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== -object-inspect@~1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" - integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== +object-is@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4" + integrity sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ== object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -6795,7 +7151,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.0: +object.assign@^4.0.4, object.assign@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== @@ -6805,7 +7161,17 @@ object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" -object.getownpropertydescriptors@^2.0.3: +object.defaults@^1.0.0, object.defaults@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" + integrity sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8= + dependencies: + array-each "^1.0.1" + array-slice "^1.0.0" + for-own "^1.0.0" + isobject "^3.0.0" + +object.getownpropertydescriptors@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== @@ -6813,6 +7179,14 @@ object.getownpropertydescriptors@^2.0.3: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" +object.map@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" + integrity sha1-z4Plncj8wK1fQlDh94s7gb2AHTc= + dependencies: + for-own "^1.0.0" + make-iterator "^1.0.0" + object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -6821,13 +7195,21 @@ object.omit@^2.0.0: for-own "^0.1.4" is-extendable "^0.1.1" -object.pick@^1.3.0: +object.pick@^1.2.0, object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: isobject "^3.0.1" +object.reduce@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.reduce/-/object.reduce-1.0.1.tgz#6fe348f2ac7fa0f95ca621226599096825bb03ad" + integrity sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60= + dependencies: + for-own "^1.0.0" + make-iterator "^1.0.0" + oboe@2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.4.tgz#20c88cdb0c15371bb04119257d4fdd34b0aa49f6" @@ -6842,7 +7224,7 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" -once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@1.x, once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -6869,11 +7251,25 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" +ordered-read-streams@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" + integrity sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4= + dependencies: + readable-stream "^2.0.1" + os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= + dependencies: + lcid "^1.0.0" + os-locale@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" @@ -6883,19 +7279,11 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: +os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - p-cancelable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" @@ -6926,9 +7314,9 @@ p-limit@^1.1.0: p-try "^1.0.0" p-limit@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" - integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== + version "2.2.2" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" + integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== dependencies: p-try "^2.0.0" @@ -6980,6 +7368,15 @@ parse-asn1@^5.0.0: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" +parse-filepath@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" + integrity sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= + dependencies: + is-absolute "^1.0.0" + map-cache "^0.2.0" + path-root "^0.1.1" + parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -6995,6 +7392,13 @@ parse-headers@^2.0.0: resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515" integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA== +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -7003,6 +7407,16 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" +parse-node-version@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" + integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + parse5@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" @@ -7018,8 +7432,20 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= -path-exists@^3.0.0: - version "3.0.0" +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= @@ -7038,11 +7464,32 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +path-root-regex@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" + integrity sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0= + +path-root@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" + integrity sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc= + dependencies: + path-root-regex "^0.1.0" + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -7081,17 +7528,17 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4: - version "2.1.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.1.1.tgz#ecdfbea7704adb5fe6fb47f9866c4c0e15e905c5" - integrity sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA== +picomatch@^2.0.4, picomatch@^2.0.7: + version "2.2.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a" + integrity sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA== picomatch@^2.0.5, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== -pify@^2.3.0: +pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= @@ -7218,12 +7665,17 @@ pretty-format@^25.3.0: ansi-styles "^4.0.0" react-is "^16.12.0" +pretty-hrtime@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" + integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= + private@^0.1.6, private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== -process-nextick-args@~2.0.0: +process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== @@ -7242,20 +7694,20 @@ promise-to-callback@^1.0.0: set-immediate-shim "^1.0.1" prompts@^2.0.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.0.tgz#a444e968fa4cc7e86689a74050685ac8006c4cc4" - integrity sha512-NfbbPPg/74fT7wk2XYQ7hAIp9zJyZp5Fu19iRbORqqy1BhtrkZ0fPafBU+7bmn8ie69DpT0R6QpJIN2oisYjJg== + version "2.3.1" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.1.tgz#b63a9ce2809f106fa9ae1277c275b167af46ea05" + integrity sha512-qIP2lQyCwYbdzcqHIUi2HAxiWixhoM9OdLCWf8txXsapC/X9YdsCoeyRIXE/GP+Q0J37Q7+XN/MFqbUa7IzXNA== dependencies: kleur "^3.0.3" - sisteransi "^1.0.3" + sisteransi "^1.0.4" proxy-addr@~2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" - integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== dependencies: forwarded "~0.1.2" - ipaddr.js "1.9.0" + ipaddr.js "1.9.1" prr@~1.0.1: version "1.0.1" @@ -7267,11 +7719,6 @@ pseudomap@^1.0.1, pseudomap@^1.0.2: resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= -psl@^1.1.24: - version "1.6.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.6.0.tgz#60557582ee23b6c43719d9890fb4170ecd91e110" - integrity sha512-SYKKmVel98NCOYXpkwUqZqh0ahZeeKfmisiLIcEZdsb+WbLv02g/dI5BUmZnIyOe7RzZtLax81nnb2HbvC2tzA== - psl@^1.1.28: version "1.7.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" @@ -7337,6 +7784,14 @@ pull-window@^2.1.4: dependencies: looper "^2.0.0" +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -7345,16 +7800,20 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" +pumpify@^1.3.5: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + punycode@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" integrity sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0= -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -7434,9 +7893,17 @@ react-is@^16.12.0: integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== react-is@^16.8.4: - version "16.12.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" - integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== + version "16.13.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.0.tgz#0f37c3613c34fe6b37cd7f763a0d6293ab15c527" + integrity sha512-GFMtL0vHkiBv9HluwNZTggSn/sCyEt9n02aM0dSAjGGyqyNlAyftYm4phPxdvCigG15JreC5biwxCgTAJZ7yAA== + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" read-pkg-up@^4.0.0: version "4.0.0" @@ -7446,6 +7913,15 @@ read-pkg-up@^4.0.0: find-up "^3.0.0" read-pkg "^3.0.0" +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" @@ -7465,10 +7941,10 @@ readable-stream@^1.0.33: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -7479,9 +7955,9 @@ readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable util-deprecate "~1.0.1" readable-stream@^3.0.1, readable-stream@^3.1.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" - integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -7497,7 +7973,7 @@ readable-stream@~1.0.15: isarray "0.0.1" string_decoder "~0.10.x" -readdirp@^2.0.0: +readdirp@^2.0.0, readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== @@ -7506,12 +7982,12 @@ readdirp@^2.0.0: micromatch "^3.1.10" readable-stream "^2.0.2" -readdirp@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" - integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== +readdirp@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" + integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ== dependencies: - picomatch "^2.0.4" + picomatch "^2.0.7" realpath-native@^1.1.0: version "1.1.0" @@ -7520,6 +7996,13 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + regenerate@^1.2.1: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" @@ -7559,6 +8042,14 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexp.prototype.flags@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + regexpu-core@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" @@ -7580,7 +8071,24 @@ regjsparser@^0.1.4: dependencies: jsesc "~0.5.0" -remove-trailing-separator@^1.0.1: +remove-bom-buffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" + integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== + dependencies: + is-buffer "^1.1.5" + is-utf8 "^0.2.1" + +remove-bom-stream@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" + integrity sha1-BfGlk/FuQuH7kOv1nejlaVJflSM= + dependencies: + remove-bom-buffer "^3.0.0" + safe-buffer "^5.1.0" + through2 "^2.0.3" + +remove-trailing-separator@^1.0.1, remove-trailing-separator@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= @@ -7602,6 +8110,20 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" +replace-ext@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" + integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= + +replace-homedir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/replace-homedir/-/replace-homedir-1.0.0.tgz#e87f6d513b928dde808260c12be7fec6ff6e798c" + integrity sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw= + dependencies: + homedir-polyfill "^1.0.1" + is-absolute "^1.0.0" + remove-trailing-separator "^1.1.0" + request-promise-core@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" @@ -7619,9 +8141,9 @@ request-promise-native@^1.0.5: tough-cookie "^2.3.3" request@^2.67.0, request@^2.79.0, request@^2.85.0, request@^2.87.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== dependencies: aws-sign2 "~0.7.0" aws4 "^1.8.0" @@ -7630,7 +8152,7 @@ request@^2.67.0, request@^2.79.0, request@^2.85.0, request@^2.87.0: extend "~3.0.2" forever-agent "~0.6.1" form-data "~2.3.2" - har-validator "~5.1.0" + har-validator "~5.1.3" http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" @@ -7640,7 +8162,7 @@ request@^2.67.0, request@^2.79.0, request@^2.85.0, request@^2.87.0: performance-now "^2.1.0" qs "~6.5.2" safe-buffer "^5.1.2" - tough-cookie "~2.4.3" + tough-cookie "~2.5.0" tunnel-agent "^0.6.0" uuid "^3.3.2" @@ -7671,11 +8193,26 @@ resolve-cwd@^2.0.0: dependencies: resolve-from "^3.0.0" +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" integrity sha1-six699nWiBvItuZTM17rywoYh0g= +resolve-options@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" + integrity sha1-MrueOcBtZzONyTeMDW1gdFZq0TE= + dependencies: + value-or-function "^3.0.0" + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" @@ -7686,24 +8223,17 @@ resolve@1.1.7, resolve@1.1.x: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@1.x, resolve@^1.10.0, resolve@^1.3.2: - version "1.14.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.2.tgz#dbf31d0fa98b1f29aa5169783b9c290cb865fea2" - integrity sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ== - dependencies: - path-parse "^1.0.6" - -resolve@^1.8.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.13.1.tgz#be0aa4c06acd53083505abb35f4d66932ab35d16" - integrity sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w== +resolve@1.x, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.8.1: + version "1.15.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" + integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== dependencies: path-parse "^1.0.6" -resolve@~1.11.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" - integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== +resolve@~1.14.2: + version "1.14.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.2.tgz#dbf31d0fa98b1f29aa5169783b9c290cb865fea2" + integrity sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ== dependencies: path-parse "^1.0.6" @@ -7731,7 +8261,7 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: +rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -7746,14 +8276,7 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rlp@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.1.tgz#9cacf53ad2579163cc56fba64b1f4336f1f2fa46" - integrity sha512-nqB/qy+YjXdp/zj1CjCiDwfLMBPv/XFDol0ir/7O/+Ix90++rvi+QoK1CDJcn8JoqCu2WrPPeRucu4qyIDzALg== - dependencies: - safe-buffer "^5.1.1" - -rlp@^2.2.1, rlp@^2.2.2, rlp@^2.2.3: +rlp@^2.0.0, rlp@^2.2.1, rlp@^2.2.2, rlp@^2.2.3: version "2.2.4" resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.4.tgz#d6b0e1659e9285fc509a5d169a9bd06f704951c1" integrity sha512-fdq2yYCWpAQBhwkZv+Z8o/Z4sPmYm1CUq6P7n6lVTOdb949CnqA0sndXal5C1NleSVSZm6q5F3iEbauyVln/iw== @@ -7776,9 +8299,9 @@ rustbn.js@~0.2.0: integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== rxjs@^6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" - integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== + version "6.5.4" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" + integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== dependencies: tslib "^1.9.0" @@ -7860,16 +8383,16 @@ scryptsy@^2.1.0: integrity sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w== secp256k1@^3.0.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-3.7.1.tgz#12e473e0e9a7c2f2d4d4818e722ad0e14cc1e2f1" - integrity sha512-1cf8sbnRreXrQFdH6qsg2H71Xw91fCCS9Yp021GnUNJzWJS/py96fS4lHbnTnouLp08Xj6jBoBB6V78Tdbdu5g== + version "3.8.0" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-3.8.0.tgz#28f59f4b01dbee9575f56a47034b7d2e3b3b352d" + integrity sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw== dependencies: bindings "^1.5.0" bip66 "^1.1.5" bn.js "^4.11.8" create-hash "^1.2.0" drbg.js "^1.0.1" - elliptic "^6.4.1" + elliptic "^6.5.2" nan "^2.14.0" safe-buffer "^5.1.2" @@ -7895,6 +8418,13 @@ semaphore@>=1.0.1, semaphore@^1.0.3, semaphore@^1.1.0: resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== +semver-greatest-satisfied-range@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz#13e8c2658ab9691cb0cd71093240280d36f77a5b" + integrity sha1-E+jCZYq5aRywzXEJMkAoDTb3els= + dependencies: + sver-compat "^1.5.0" + "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -8050,7 +8580,7 @@ simple-get@^3.0.3: once "^1.3.1" simple-concat "^1.0.0" -sisteransi@^1.0.3: +sisteransi@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.4.tgz#386713f1ef688c7c0304dc4c0632898941cad2e3" integrity sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig== @@ -8106,9 +8636,9 @@ sol-explore@1.6.1: integrity sha1-tZ8HPGn+MyVg1aEMMrqMp/KYbPs= solc@^0.5.5: - version "0.5.13" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.5.13.tgz#2a5ba2b7681898c6293759441e0a768fb6955def" - integrity sha512-osybDVPGjAqcmSKLU3vh5iHuxbhGlJjQI5ZvI7nRDR0fgblQqYte4MGvNjbew8DPvCrmoH0ZBiz/KBBLlPxfMg== + version "0.5.16" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.5.16.tgz#6c8d710a3792ccc79db924606b558a1149b1c603" + integrity sha512-weEtRtisJyf+8UjELs7S4ST1KK7UIq6SRB7tpprfJBL9b5mTrZAT7m4gJKi2h6MiBpuSWfnraK8BnkyWzuTMRA== dependencies: command-exists "^1.2.8" commander "3.0.2" @@ -8158,11 +8688,11 @@ solparse@2.2.8, solparse@^2.2.8: yargs "^10.0.3" source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== dependencies: - atob "^2.1.1" + atob "^2.1.2" decode-uri-component "^0.2.0" resolve-url "^0.2.1" source-map-url "^0.4.0" @@ -8213,6 +8743,11 @@ source-map@~0.2.0: dependencies: amdefine ">=0.0.4" +sparkles@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c" + integrity sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw== + spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -8266,6 +8801,11 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +stack-trace@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= + stack-utils@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" @@ -8289,6 +8829,16 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= +stream-exhaust@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/stream-exhaust/-/stream-exhaust-1.0.2.tgz#acdac8da59ef2bc1e17a2c0ccf6c320d120e555d" + integrity sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw== + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + stream-to-pull-stream@^1.7.1: version "1.7.3" resolved "https://registry.yarnpkg.com/stream-to-pull-stream/-/stream-to-pull-stream-1.7.3.tgz#4161aa2d2eb9964de60bfa1af7feaf917e874ece" @@ -8310,7 +8860,7 @@ string-length@^2.0.0: astral-regex "^1.0.0" strip-ansi "^4.0.0" -string-width@^1.0.1: +string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= @@ -8336,21 +8886,13 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string.prototype.trim@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" - integrity sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo= - dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.0" - function-bind "^1.0.2" - -string.prototype.trimleft@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" - integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== +string.prototype.trim@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz#141233dff32c82bfad80684d7e5f0869ee0fb782" + integrity sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw== dependencies: define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" function-bind "^1.1.1" string.prototype.trimleft@^2.1.1: @@ -8361,14 +8903,6 @@ string.prototype.trimleft@^2.1.1: define-properties "^1.1.3" function-bind "^1.1.1" -string.prototype.trimright@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" - integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== - dependencies: - define-properties "^1.1.3" - function-bind "^1.1.1" - string.prototype.trimright@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" @@ -8417,6 +8951,13 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -8486,6 +9027,14 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +sver-compat@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/sver-compat/-/sver-compat-1.5.0.tgz#3cf87dfeb4d07b4a3f14827bc186b3fd0c645cd8" + integrity sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg= + dependencies: + es6-iterator "^2.0.1" + es6-symbol "^3.1.1" + swarm-js@0.1.39: version "0.1.39" resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.39.tgz#79becb07f291d4b2a178c50fee7aa6e10342c0e8" @@ -8510,22 +9059,24 @@ symbol-tree@^3.2.2: integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== tape@^4.4.0, tape@^4.6.3: - version "4.11.0" - resolved "https://registry.yarnpkg.com/tape/-/tape-4.11.0.tgz#63d41accd95e45a23a874473051c57fdbc58edc1" - integrity sha512-yixvDMX7q7JIs/omJSzSZrqulOV51EC9dK8dM0TzImTIkHWfe2/kFyL5v+d9C+SrCMaICk59ujsqFAVidDqDaA== + version "4.13.0" + resolved "https://registry.yarnpkg.com/tape/-/tape-4.13.0.tgz#e2f581ff5f12a7cbd787e9f83c76c2851782fce2" + integrity sha512-J/hvA+GJnuWJ0Sj8Z0dmu3JgMNU+MmusvkCT7+SN4/2TklW18FNCp/UuHIEhPZwHfy4sXfKYgC7kypKg4umbOw== dependencies: - deep-equal "~1.0.1" + deep-equal "~1.1.1" defined "~1.0.0" + dotignore "~0.1.2" for-each "~0.3.3" function-bind "~1.1.1" - glob "~7.1.4" + glob "~7.1.6" has "~1.0.3" inherits "~2.0.4" + is-regex "~1.0.5" minimist "~1.2.0" - object-inspect "~1.6.0" - resolve "~1.11.1" + object-inspect "~1.7.0" + resolve "~1.14.2" resumer "~0.0.0" - string.prototype.trim "~1.1.2" + string.prototype.trim "~1.2.1" through "~2.3.8" tar-fs@^2.0.0: @@ -8562,7 +9113,7 @@ tar-stream@^2.0.0: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^4, tar@^4.0.2: +tar@^4.0.2: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== @@ -8595,7 +9146,15 @@ throat@^4.0.0: resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= -through2@^2.0.3: +through2-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" + integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== + dependencies: + through2 "~2.0.0" + xtend "~4.0.0" + +through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -8608,6 +9167,11 @@ through@^2.3.8, through@~2.3.4, through@~2.3.8: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= +time-stamp@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" + integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= + timed-out@^4.0.0, timed-out@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" @@ -8632,6 +9196,14 @@ tmpl@1.0.x: resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= +to-absolute-glob@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" + integrity sha1-GGX0PZ50sIItufFFt4z/fQ98hJs= + dependencies: + is-absolute "^1.0.0" + is-negated-glob "^1.0.0" + to-buffer@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" @@ -8684,12 +9256,19 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +to-through@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" + integrity sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY= + dependencies: + through2 "^2.0.3" + toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== -tough-cookie@^2.3.3, tough-cookie@^2.3.4: +tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== @@ -8697,14 +9276,6 @@ tough-cookie@^2.3.3, tough-cookie@^2.3.4: psl "^1.1.28" punycode "^2.1.1" -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== - dependencies: - psl "^1.1.24" - punycode "^1.4.1" - tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" @@ -8734,9 +9305,9 @@ ts-jest@^24.0.2: yargs-parser "10.x" tslib@^1.9.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" - integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== + version "1.11.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" + integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== tunnel-agent@^0.6.0: version "0.6.0" @@ -8746,9 +9317,9 @@ tunnel-agent@^0.6.0: safe-buffer "^5.0.1" tweetnacl-util@^0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.0.tgz#4576c1cee5e2d63d207fee52f1ba02819480bc75" - integrity sha1-RXbBzuXi1j0gf+5S8boCgZSAvHU= + version "0.15.1" + resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" + integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" @@ -8756,9 +9327,9 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= tweetnacl@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.1.tgz#2594d42da73cd036bd0d2a54683dd35a6b55ca17" - integrity sha512-kcoMoKTPYnoeS50tzoqjPY3Uv9axeuuFAZY9M/9zFnhoVvRfxz9K29IMPD7jGmt2c8SW7i3gT9WqDl2+nV7p4A== + version "1.0.3" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" + integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== type-check@~0.3.2: version "0.3.2" @@ -8803,9 +9374,9 @@ typedarray@^0.0.6: integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= typescript@^3.5.1: - version "3.7.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.4.tgz#1743a5ec5fef6a1fa9f3e4708e33c81c73876c19" - integrity sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw== + version "3.8.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.2.tgz#91d6868aaead7da74f493c553aeff76c0c0b1d5a" + integrity sha512-EgOVgL/4xfVrCMbhYKUQTdF37SQn4Iw73H5BgCrF1Abdun7Kwy/QZsE/ssAy0y4LxBbvua3PIbFsbRczWWnDdQ== typewise-core@^1.2, typewise-core@^1.2.0: version "1.2.0" @@ -8830,9 +9401,9 @@ u2f-api@0.2.7: integrity sha512-fqLNg8vpvLOD5J/z4B6wpPg4Lvowz1nJ9xdHcCzdUPKcFE/qNCceV2gNZxSJd5vhAZemHr/K/hbzVA0zxB5mkg== uglify-js@^3.1.4: - version "3.7.1" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.1.tgz#35c7de17971a4aa7689cd2eae0a5b39bb838c0c5" - integrity sha512-pnOF7jY82wdIhATVn87uUY/FHU+MDUdPLkmGFvGoclQmeu229eTkbG5gjGGBi3R7UuYYSEeYXY/TTY5j2aym2g== + version "3.8.0" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.8.0.tgz#f3541ae97b2f048d7e7e3aa4f39fd8a1f5d7a805" + integrity sha512-ugNSTT8ierCsDHso2jkBHXYrU8Y5/fY2ZUprfrJUiD7YpuFvV4jODLFmb3h4btQjqr5Nh4TX4XtgDfCU1WdioQ== dependencies: commander "~2.20.3" source-map "~0.6.1" @@ -8850,11 +9421,36 @@ unbzip2-stream@^1.0.9: buffer "^5.2.1" through "^2.3.8" +unc-path-regex@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= + underscore@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== +undertaker-registry@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/undertaker-registry/-/undertaker-registry-1.0.1.tgz#5e4bda308e4a8a2ae584f9b9a4359a499825cc50" + integrity sha1-XkvaMI5KiirlhPm5pDWaSZglzFA= + +undertaker@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/undertaker/-/undertaker-1.2.1.tgz#701662ff8ce358715324dfd492a4f036055dfe4b" + integrity sha512-71WxIzDkgYk9ZS+spIB8iZXchFhAdEo2YU8xYqBYJ39DIUIqziK78ftm26eecoIY49X0J2MLhG4hr18Yp6/CMA== + dependencies: + arr-flatten "^1.0.1" + arr-map "^2.0.0" + bach "^1.0.0" + collection-map "^1.0.0" + es6-weak-map "^2.0.1" + last-run "^1.1.0" + object.defaults "^1.0.0" + object.reduce "^1.0.0" + undertaker-registry "^1.0.0" + union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -8865,6 +9461,14 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" +unique-stream@^2.0.2: + version "2.3.1" + resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" + integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== + dependencies: + json-stable-stringify-without-jsonify "^1.0.1" + through2-filter "^3.0.0" + universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -8888,6 +9492,11 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -8949,12 +9558,14 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= util.promisify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" utils-merge@1.0.1: version "1.0.1" @@ -8972,9 +9583,16 @@ uuid@3.3.2: integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== uuid@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" - integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8flags@^3.0.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.1.3.tgz#fc9dc23521ca20c5433f81cc4eb9b3033bb105d8" + integrity sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w== + dependencies: + homedir-polyfill "^1.0.1" valid-url@^1.0.9: version "1.0.9" @@ -8989,6 +9607,11 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +value-or-function@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" + integrity sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM= + vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -9003,6 +9626,54 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +vinyl-fs@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" + integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== + dependencies: + fs-mkdirp-stream "^1.0.0" + glob-stream "^6.1.0" + graceful-fs "^4.0.0" + is-valid-glob "^1.0.0" + lazystream "^1.0.0" + lead "^1.0.0" + object.assign "^4.0.4" + pumpify "^1.3.5" + readable-stream "^2.3.3" + remove-bom-buffer "^3.0.0" + remove-bom-stream "^1.2.0" + resolve-options "^1.1.0" + through2 "^2.0.0" + to-through "^2.0.0" + value-or-function "^3.0.0" + vinyl "^2.0.0" + vinyl-sourcemap "^1.1.0" + +vinyl-sourcemap@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" + integrity sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY= + dependencies: + append-buffer "^1.0.2" + convert-source-map "^1.5.0" + graceful-fs "^4.1.6" + normalize-path "^2.1.1" + now-and-later "^2.0.0" + remove-bom-buffer "^3.0.0" + vinyl "^2.0.0" + +vinyl@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" + integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg== + dependencies: + clone "^2.1.1" + clone-buffer "^1.0.0" + clone-stats "^1.0.0" + cloneable-readable "^1.0.0" + remove-trailing-separator "^1.0.1" + replace-ext "^1.0.0" + w3c-hr-time@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" @@ -9027,6 +9698,16 @@ web3-bzz@1.2.4: swarm-js "0.1.39" underscore "1.9.1" +web3-bzz@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.6.tgz#0b88c0b96029eaf01b10cb47c4d5f79db4668883" + integrity sha512-9NiHLlxdI1XeFtbPJAmi2jnnIHVF+GNy517wvOS72P7ZfuJTPwZaSNXfT01vWgPPE9R96/uAHDWHOg+T4WaDQQ== + dependencies: + "@types/node" "^10.12.18" + got "9.6.0" + swarm-js "0.1.39" + underscore "1.9.1" + web3-core-helpers@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.4.tgz#ffd425861f4d66b3f38df032afdb39ea0971fc0f" @@ -9036,6 +9717,15 @@ web3-core-helpers@1.2.4: web3-eth-iban "1.2.4" web3-utils "1.2.4" +web3-core-helpers@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.6.tgz#7aacd25bf8015adcdfc0f3243d0dcfdff0373f7d" + integrity sha512-gYKWmC2HmO7RcDzpo4L1K8EIoy5L8iubNDuTC6q69UxczwqKF/Io0kbK/1Z10Av++NlzOSiuyGp2gc4t4UOsDw== + dependencies: + underscore "1.9.1" + web3-eth-iban "1.2.6" + web3-utils "1.2.6" + web3-core-method@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.4.tgz#a0fbc50b8ff5fd214021435cc2c6d1e115807aed" @@ -9047,6 +9737,17 @@ web3-core-method@1.2.4: web3-core-subscriptions "1.2.4" web3-utils "1.2.4" +web3-core-method@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.6.tgz#f5a3e4d304abaf382923c8ab88ec8eeef45c1b3b" + integrity sha512-r2dzyPEonqkBg7Mugq5dknhV5PGaZTHBZlS/C+aMxNyQs3T3eaAsCTqlQDitwNUh/sUcYPEGF0Vo7ahYK4k91g== + dependencies: + underscore "1.9.1" + web3-core-helpers "1.2.6" + web3-core-promievent "1.2.6" + web3-core-subscriptions "1.2.6" + web3-utils "1.2.6" + web3-core-promievent@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.4.tgz#75e5c0f2940028722cdd21ba503ebd65272df6cb" @@ -9055,6 +9756,14 @@ web3-core-promievent@1.2.4: any-promise "1.3.0" eventemitter3 "3.1.2" +web3-core-promievent@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.6.tgz#b1550a3a4163e48b8b704c1fe4b0084fc2dad8f5" + integrity sha512-km72kJef/qtQNiSjDJJVHIZvoVOm6ytW3FCYnOcCs7RIkviAb5JYlPiye0o4pJOLzCXYID7DK7Q9bhY8qWb1lw== + dependencies: + any-promise "1.3.0" + eventemitter3 "3.1.2" + web3-core-requestmanager@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.4.tgz#0a7020a23fb91c6913c611dfd3d8c398d1e4b4a8" @@ -9066,6 +9775,17 @@ web3-core-requestmanager@1.2.4: web3-providers-ipc "1.2.4" web3-providers-ws "1.2.4" +web3-core-requestmanager@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.6.tgz#5808c0edc0d6e2991a87b65508b3a1ab065b68ec" + integrity sha512-QU2cbsj9Dm0r6om40oSwk8Oqbp3wTa08tXuMpSmeOTkGZ3EMHJ1/4LiJ8shwg1AvPMrKVU0Nri6+uBNCdReZ+g== + dependencies: + underscore "1.9.1" + web3-core-helpers "1.2.6" + web3-providers-http "1.2.6" + web3-providers-ipc "1.2.6" + web3-providers-ws "1.2.6" + web3-core-subscriptions@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.4.tgz#0dc095b5cfd82baa527a39796e3515a846b21b99" @@ -9075,6 +9795,15 @@ web3-core-subscriptions@1.2.4: underscore "1.9.1" web3-core-helpers "1.2.4" +web3-core-subscriptions@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.6.tgz#9d44189e2321f8f1abc31f6c09103b5283461b57" + integrity sha512-M0PzRrP2Ct13x3wPulFtc5kENH4UtnPxO9YxkfQlX2WRKENWjt4Rfq+BCVGYEk3rTutDfWrjfzjmqMRvXqEY5Q== + dependencies: + eventemitter3 "3.1.2" + underscore "1.9.1" + web3-core-helpers "1.2.6" + web3-core@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.4.tgz#2df13b978dcfc59c2abaa887d27f88f21ad9a9d6" @@ -9088,7 +9817,19 @@ web3-core@1.2.4: web3-core-requestmanager "1.2.4" web3-utils "1.2.4" -web3-eth-abi@1.2.4, web3-eth-abi@^1.0.0-beta.24: +web3-core@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.6.tgz#bb42a1d7ae49a7258460f0d95ddb00906f59ef92" + integrity sha512-y/QNBFtr5cIR8vxebnotbjWJpOnO8LDYEAzZjeRRUJh2ijmhjoYk7dSNx9ExgC0UCfNFRoNCa9dGRu/GAxwRlw== + dependencies: + "@types/bn.js" "^4.11.4" + "@types/node" "^12.6.1" + web3-core-helpers "1.2.6" + web3-core-method "1.2.6" + web3-core-requestmanager "1.2.6" + web3-utils "1.2.6" + +web3-eth-abi@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.4.tgz#5b73e5ef70b03999227066d5d1310b168845e2b8" integrity sha512-8eLIY4xZKoU3DSVu1pORluAw9Ru0/v4CGdw5so31nn+7fR8zgHMgwbFe0aOqWQ5VU42PzMMXeIJwt4AEi2buFg== @@ -9097,6 +9838,15 @@ web3-eth-abi@1.2.4, web3-eth-abi@^1.0.0-beta.24: underscore "1.9.1" web3-utils "1.2.4" +web3-eth-abi@1.2.6, web3-eth-abi@^1.0.0-beta.24: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.6.tgz#b495383cc5c0d8e2857b26e7fe25606685983b25" + integrity sha512-w9GAyyikn8nSifSDZxAvU9fxtQSX+W2xQWMmrtTXmBGCaE4/ywKOSPAO78gq8AoU4Wq5yqVGKZLLbfpt7/sHlA== + dependencies: + ethers "4.0.0-beta.3" + underscore "1.9.1" + web3-utils "1.2.6" + web3-eth-accounts@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.4.tgz#ada6edc49542354328a85cafab067acd7f88c288" @@ -9115,6 +9865,24 @@ web3-eth-accounts@1.2.4: web3-core-method "1.2.4" web3-utils "1.2.4" +web3-eth-accounts@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.6.tgz#a1ba4bf75fa8102a3ec6cddd0eccd72462262720" + integrity sha512-cDVtonHRgzqi/ZHOOf8kfCQWFEipcfQNAMzXIaKZwc0UUD9mgSI5oJrN45a89Ze+E6Lz9m77cDG5Ax9zscSkcw== + dependencies: + "@web3-js/scrypt-shim" "^0.1.0" + any-promise "1.3.0" + crypto-browserify "3.12.0" + eth-lib "^0.2.8" + ethereumjs-common "^1.3.2" + ethereumjs-tx "^2.1.1" + underscore "1.9.1" + uuid "3.3.2" + web3-core "1.2.6" + web3-core-helpers "1.2.6" + web3-core-method "1.2.6" + web3-utils "1.2.6" + web3-eth-contract@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.4.tgz#68ef7cc633232779b0a2c506a810fbe903575886" @@ -9130,6 +9898,21 @@ web3-eth-contract@1.2.4: web3-eth-abi "1.2.4" web3-utils "1.2.4" +web3-eth-contract@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.6.tgz#39111543960035ed94c597a239cf5aa1da796741" + integrity sha512-ak4xbHIhWgsbdPCkSN+HnQc1SH4c856y7Ly+S57J/DQVzhFZemK5HvWdpwadJrQTcHET3ZeId1vq3kmW7UYodw== + dependencies: + "@types/bn.js" "^4.11.4" + underscore "1.9.1" + web3-core "1.2.6" + web3-core-helpers "1.2.6" + web3-core-method "1.2.6" + web3-core-promievent "1.2.6" + web3-core-subscriptions "1.2.6" + web3-eth-abi "1.2.6" + web3-utils "1.2.6" + web3-eth-ens@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.4.tgz#b95b3aa99fb1e35c802b9e02a44c3046a3fa065e" @@ -9144,6 +9927,20 @@ web3-eth-ens@1.2.4: web3-eth-contract "1.2.4" web3-utils "1.2.4" +web3-eth-ens@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.6.tgz#bf86a624c4c72bc59913c2345180d3ea947e110d" + integrity sha512-8UEqt6fqR/dji/jBGPFAyBs16OJjwi0t2dPWXPyGXmty/fH+osnXwWXE4HRUyj4xuafiM5P1YkXMsPhKEadjiw== + dependencies: + eth-ens-namehash "2.0.8" + underscore "1.9.1" + web3-core "1.2.6" + web3-core-helpers "1.2.6" + web3-core-promievent "1.2.6" + web3-eth-abi "1.2.6" + web3-eth-contract "1.2.6" + web3-utils "1.2.6" + web3-eth-iban@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.4.tgz#8e0550fd3fd8e47a39357d87fe27dee9483ee476" @@ -9152,6 +9949,14 @@ web3-eth-iban@1.2.4: bn.js "4.11.8" web3-utils "1.2.4" +web3-eth-iban@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.6.tgz#0b22191fd1aa6e27f7ef0820df75820bfb4ed46b" + integrity sha512-TPMc3BW9Iso7H+9w+ytbqHK9wgOmtocyCD3PaAe5Eie50KQ/j7ThA60dGJnxItVo6yyRv5pZAYxPVob9x/fJlg== + dependencies: + bn.js "4.11.8" + web3-utils "1.2.6" + web3-eth-personal@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.4.tgz#3224cca6851c96347d9799b12c1b67b2a6eb232b" @@ -9164,6 +9969,18 @@ web3-eth-personal@1.2.4: web3-net "1.2.4" web3-utils "1.2.4" +web3-eth-personal@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.6.tgz#47a0a0657ec04dd77f95451a6869d4751d324b6b" + integrity sha512-T2NUkh1plY8d7wePXSoHnaiKOd8dLNFaQfgBl9JHU6S7IJrG9jnYD9bVxLEgRUfHs9gKf9tQpDf7AcPFdq/A8g== + dependencies: + "@types/node" "^12.6.1" + web3-core "1.2.6" + web3-core-helpers "1.2.6" + web3-core-method "1.2.6" + web3-net "1.2.6" + web3-utils "1.2.6" + web3-eth@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.4.tgz#24c3b1f1ac79351bbfb808b2ab5c585fa57cdd00" @@ -9183,6 +10000,25 @@ web3-eth@1.2.4: web3-net "1.2.4" web3-utils "1.2.4" +web3-eth@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.6.tgz#15a8c65fdde0727872848cae506758d302d8d046" + integrity sha512-ROWlDPzh4QX6tlGGGlAK6X4kA2n0/cNj/4kb0nNVWkRouGmYO0R8k6s47YxYHvGiXt0s0++FUUv5vAbWovtUQw== + dependencies: + underscore "1.9.1" + web3-core "1.2.6" + web3-core-helpers "1.2.6" + web3-core-method "1.2.6" + web3-core-subscriptions "1.2.6" + web3-eth-abi "1.2.6" + web3-eth-accounts "1.2.6" + web3-eth-contract "1.2.6" + web3-eth-ens "1.2.6" + web3-eth-iban "1.2.6" + web3-eth-personal "1.2.6" + web3-net "1.2.6" + web3-utils "1.2.6" + web3-net@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.4.tgz#1d246406d3aaffbf39c030e4e98bce0ca5f25458" @@ -9192,6 +10028,15 @@ web3-net@1.2.4: web3-core-method "1.2.4" web3-utils "1.2.4" +web3-net@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.6.tgz#035ca0fbe55282fda848ca17ebb4c8966147e5ea" + integrity sha512-hsNHAPddrhgjWLmbESW0KxJi2GnthPcow0Sqpnf4oB6+/+ZnQHU9OsIyHb83bnC1OmunrK2vf9Ye2mLPdFIu3A== + dependencies: + web3-core "1.2.6" + web3-core-method "1.2.6" + web3-utils "1.2.6" + web3-provider-engine@14.0.6: version "14.0.6" resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-14.0.6.tgz#cbdd66fe20c0136a3a495cbe40d18b6c4160d5f0" @@ -9246,16 +10091,16 @@ web3-provider-engine@14.2.1: xtend "^4.0.1" web3-provider-engine@^15.0.4: - version "15.0.4" - resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-15.0.4.tgz#5c336bcad2274dff5218bc8db003fa4e9e464c24" - integrity sha512-Ob9oK0TUZfVC7NXkB7CQSWAiCdCD/Xnlh2zTnV8NdJR8LCrMAy2i6JedU70JHaxw59y7mM4GnsYOTTGkquFnNQ== + version "15.0.6" + resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-15.0.6.tgz#bb64d49d0718bb6a12f146bdd542d5f2f8fa4e48" + integrity sha512-KdIHmRmB7VG6HeSu4hlB+Iypsbv/dAbNV/UWBDxsTwLJuuTSobmtowOq5BEsegXtjWhSSzSi9O0Ci/DVG0kB1g== dependencies: async "^2.5.0" backoff "^2.5.0" clone "^2.0.0" cross-fetch "^2.1.0" eth-block-tracker "^4.4.2" - eth-json-rpc-errors "^1.0.1" + eth-json-rpc-errors "^2.0.2" eth-json-rpc-filters "^4.1.1" eth-json-rpc-infura "^4.0.1" eth-json-rpc-middleware "^4.1.5" @@ -9281,6 +10126,14 @@ web3-providers-http@1.2.4: web3-core-helpers "1.2.4" xhr2-cookies "1.1.0" +web3-providers-http@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.6.tgz#3c7b1252751fb37e53b873fce9dbb6340f5e31d9" + integrity sha512-2+SaFCspb5f82QKuHB3nEPQOF9iSWxRf7c18fHtmnLNVkfG9SwLN1zh67bYn3tZGUdOI3gj8aX4Uhfpwx9Ezpw== + dependencies: + web3-core-helpers "1.2.6" + xhr2-cookies "1.1.0" + web3-providers-ipc@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.4.tgz#9d6659f8d44943fb369b739f48df09092be459bd" @@ -9290,6 +10143,15 @@ web3-providers-ipc@1.2.4: underscore "1.9.1" web3-core-helpers "1.2.4" +web3-providers-ipc@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.6.tgz#adabab5ac66b3ff8a26c7dc97af3f1a6a7609701" + integrity sha512-b0Es+/GTZyk5FG3SgUDW+2/mBwJAXWt5LuppODptiOas8bB2khLjG6+Gm1K4uwOb+1NJGPt5mZZ8Wi7vibtQ+A== + dependencies: + oboe "2.1.4" + underscore "1.9.1" + web3-core-helpers "1.2.6" + web3-providers-ws@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.4.tgz#099ee271ee03f6ea4f5df9cfe969e83f4ce0e36f" @@ -9299,6 +10161,15 @@ web3-providers-ws@1.2.4: underscore "1.9.1" web3-core-helpers "1.2.4" +web3-providers-ws@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.6.tgz#3cecc49f7c99f07a75076d3c54247050bc4f7e11" + integrity sha512-20waSYX+gb5M5yKhug5FIwxBBvkKzlJH7sK6XEgdOx6BZ9YYamLmvg9wcRVtnSZO8hV/3cWenO/tRtTrHVvIgQ== + dependencies: + "@web3-js/websocket" "^1.0.29" + underscore "1.9.1" + web3-core-helpers "1.2.6" + web3-shh@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.4.tgz#5c8ff5ab624a3b14f08af0d24d2b16c10e9f70dd" @@ -9309,6 +10180,16 @@ web3-shh@1.2.4: web3-core-subscriptions "1.2.4" web3-net "1.2.4" +web3-shh@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.6.tgz#2492616da4cac32d4c7534b890f43bac63190c14" + integrity sha512-rouWyOOM6YMbLQd65grpj8BBezQfgNeRRX+cGyW4xsn6Xgu+B73Zvr6OtA/ftJwwa9bqHGpnLrrLMeWyy4YLUw== + dependencies: + web3-core "1.2.6" + web3-core-method "1.2.6" + web3-core-subscriptions "1.2.6" + web3-net "1.2.6" + web3-utils@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.4.tgz#96832a39a66b05bf8862a5b0bdad2799d709d951" @@ -9323,7 +10204,21 @@ web3-utils@1.2.4: underscore "1.9.1" utf8 "3.0.0" -web3@1.2.4, web3@^1.2.4: +web3-utils@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.6.tgz#b9a25432da00976457fcc1094c4af8ac6d486db9" + integrity sha512-8/HnqG/l7dGmKMgEL9JeKPTtjScxOePTzopv5aaKFExPfaBrYRkgoMqhoowCiAl/s16QaTn4DoIF1QC4YsT7Mg== + dependencies: + bn.js "4.11.8" + eth-lib "0.2.7" + ethereum-bloom-filters "^1.0.6" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + underscore "1.9.1" + utf8 "3.0.0" + +web3@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.4.tgz#6e7ab799eefc9b4648c2dab63003f704a1d5e7d9" integrity sha512-xPXGe+w0x0t88Wj+s/dmAdASr3O9wmA9mpZRtixGZxmBexAF0MjfqYM+MS4tVl5s11hMTN3AZb8cDD4VLfC57A== @@ -9337,6 +10232,20 @@ web3@1.2.4, web3@^1.2.4: web3-shh "1.2.4" web3-utils "1.2.4" +web3@^1.2.4: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.6.tgz#c497dcb14cdd8d6d9fb6b445b3b68ff83f8ccf68" + integrity sha512-tpu9fLIComgxGrFsD8LUtA4s4aCZk7px8UfcdEy6kS2uDi/ZfR07KJqpXZMij7Jvlq+cQrTAhsPSiBVvoMaivA== + dependencies: + "@types/node" "^12.6.1" + web3-bzz "1.2.6" + web3-core "1.2.6" + web3-eth "1.2.6" + web3-eth-personal "1.2.6" + web3-net "1.2.6" + web3-shh "1.2.6" + web3-utils "1.2.6" + webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -9344,11 +10253,12 @@ webidl-conversions@^4.0.2: websocket@1.0.29: version "1.0.29" - resolved "https://codeload.github.com/web3-js/WebSocket-Node/tar.gz/905deb4812572b344f5801f8c9ce8bb02799d82e" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.29.tgz#3f83e49d3279657c58b02a22d90749c806101b98" + integrity sha512-WhU8jKXC8sTh6ocLSqpZRlOKMNYGwUvjA5+XcIgIk/G3JCaDfkZUr0zA19sVSxJ0TEvm0i5IBzr54RZC4vzW7g== dependencies: debug "^2.2.0" - es5-ext "^0.10.50" - nan "^2.14.0" + gulp "^4.0.2" + nan "^2.11.0" typedarray-to-buffer "^3.1.5" yaeti "^0.0.6" @@ -9392,6 +10302,11 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -9402,7 +10317,7 @@ which-pm-runs@^1.0.0: resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= -which@^1.1.1, which@^1.2.9, which@^1.3.0: +which@^1.1.1, which@^1.2.14, which@^1.2.9, which@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -9582,6 +10497,13 @@ yargs-parser@^13.1.1: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo= + dependencies: + camelcase "^3.0.0" + yargs-parser@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" @@ -9623,6 +10545,25 @@ yargs@^13.2.4, yargs@^13.3.0: y18n "^4.0.0" yargs-parser "^13.1.1" +yargs@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg= + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^5.0.0" + yauzl@^2.4.2: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"