diff --git a/.env b/.env new file mode 100644 index 0000000..b7b16c5 --- /dev/null +++ b/.env @@ -0,0 +1,4 @@ +MNEMONIC="call glow acoustic vintage front ring trade assist shuffle mimic volume reject" +INFURA_TOKEN="a30ce8978acb4d7da82e6d7e6b71afb7" +ETHERSCAN_KEY="HSR39CEBP479H5TBJTXR693XMATW8T68KE" +BSCSCAN_KEY="JQX4RQZFG69R7UUWEACP5VGSI7ZVREDY8S" diff --git a/contracts/GreenToken.sol b/contracts/GreenToken.sol new file mode 100644 index 0000000..ef39408 --- /dev/null +++ b/contracts/GreenToken.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.6.0; +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; + +contract GreenToken is ERC20, Ownable { + constructor() public ERC20("GREEN", "GREEN") { + _mint(msg.sender, 100000 ether); + } + + function mint(address account, uint256 amount) external onlyOwner { + _mint(account, amount); + } +} diff --git a/contracts/PancakeRouter.sol b/contracts/PancakeRouter.sol index 6cdf9c0..1e84f0d 100644 --- a/contracts/PancakeRouter.sol +++ b/contracts/PancakeRouter.sol @@ -1,6 +1,6 @@ pragma solidity =0.6.6; -import '@uniswap/v2-core/contracts/interfaces/IPancakeFactory.sol'; +import '@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol'; import '@uniswap/lib/contracts/libraries/TransferHelper.sol'; import './interfaces/IPancakeRouter02.sol'; @@ -39,8 +39,8 @@ contract PancakeRouter is IPancakeRouter02 { uint amountBMin ) internal virtual returns (uint amountA, uint amountB) { // create the pair if it doesn't exist yet - if (IPancakeFactory(factory).getPair(tokenA, tokenB) == address(0)) { - IPancakeFactory(factory).createPair(tokenA, tokenB); + if (IUniswapV2Factory(factory).getPair(tokenA, tokenB) == address(0)) { + IUniswapV2Factory(factory).createPair(tokenA, tokenB); } (uint reserveA, uint reserveB) = PancakeLibrary.getReserves(factory, tokenA, tokenB); if (reserveA == 0 && reserveB == 0) { @@ -72,7 +72,7 @@ contract PancakeRouter is IPancakeRouter02 { address pair = PancakeLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); - liquidity = IPancakePair(pair).mint(to); + liquidity = IUniswapV2Pair(pair).mint(to); } function addLiquidityETH( address token, @@ -94,7 +94,7 @@ contract PancakeRouter is IPancakeRouter02 { TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); - liquidity = IPancakePair(pair).mint(to); + liquidity = IUniswapV2Pair(pair).mint(to); // refund dust eth, if any if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH); } @@ -110,8 +110,8 @@ contract PancakeRouter is IPancakeRouter02 { uint deadline ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) { address pair = PancakeLibrary.pairFor(factory, tokenA, tokenB); - IPancakePair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair - (uint amount0, uint amount1) = IPancakePair(pair).burn(to); + IUniswapV2Pair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair + (uint amount0, uint amount1) = IUniswapV2Pair(pair).burn(to); (address token0,) = PancakeLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, 'PancakeRouter: INSUFFICIENT_A_AMOUNT'); @@ -150,7 +150,7 @@ contract PancakeRouter is IPancakeRouter02 { ) external virtual override returns (uint amountA, uint amountB) { address pair = PancakeLibrary.pairFor(factory, tokenA, tokenB); uint value = approveMax ? uint(-1) : liquidity; - IPancakePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); + IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline); } function removeLiquidityETHWithPermit( @@ -164,7 +164,7 @@ contract PancakeRouter is IPancakeRouter02 { ) external virtual override returns (uint amountToken, uint amountETH) { address pair = PancakeLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; - IPancakePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); + IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline); } @@ -201,7 +201,7 @@ contract PancakeRouter is IPancakeRouter02 { ) external virtual override returns (uint amountETH) { address pair = PancakeLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; - IPancakePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); + IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); amountETH = removeLiquidityETHSupportingFeeOnTransferTokens( token, liquidity, amountTokenMin, amountETHMin, to, deadline ); @@ -216,7 +216,7 @@ contract PancakeRouter is IPancakeRouter02 { uint amountOut = amounts[i + 1]; (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0)); address to = i < path.length - 2 ? PancakeLibrary.pairFor(factory, output, path[i + 2]) : _to; - IPancakePair(PancakeLibrary.pairFor(factory, input, output)).swap( + IUniswapV2Pair(PancakeLibrary.pairFor(factory, input, output)).swap( amount0Out, amount1Out, to, new bytes(0) ); } @@ -322,7 +322,7 @@ contract PancakeRouter is IPancakeRouter02 { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = PancakeLibrary.sortTokens(input, output); - IPancakePair pair = IPancakePair(PancakeLibrary.pairFor(factory, input, output)); + IUniswapV2Pair pair = IUniswapV2Pair(PancakeLibrary.pairFor(factory, input, output)); uint amountInput; uint amountOutput; { // scope to avoid stack too deep errors diff --git a/contracts/PancakeRouter01.sol b/contracts/PancakeRouter01.sol index 2e35f86..71dd8b2 100644 --- a/contracts/PancakeRouter01.sol +++ b/contracts/PancakeRouter01.sol @@ -1,6 +1,6 @@ pragma solidity =0.6.6; -import '@uniswap/v2-core/contracts/interfaces/IPancakeFactory.sol'; +import '@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol'; import '@uniswap/lib/contracts/libraries/TransferHelper.sol'; import './libraries/PancakeLibrary.sol'; @@ -26,7 +26,7 @@ contract PancakeRouter01 is IPancakeRouter01 { assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract } - // **** ADD LIQUIDITY **** + // **** ADD LIQUIDITY **** function _addLiquidity( address tokenA, address tokenB, @@ -36,8 +36,8 @@ contract PancakeRouter01 is IPancakeRouter01 { uint amountBMin ) private returns (uint amountA, uint amountB) { // create the pair if it doesn't exist yet - if (IPancakeFactory(factory).getPair(tokenA, tokenB) == address(0)) { - IPancakeFactory(factory).createPair(tokenA, tokenB); + if (IUniswapV2Factory(factory).getPair(tokenA, tokenB) == address(0)) { + IUniswapV2Factory(factory).createPair(tokenA, tokenB); } (uint reserveA, uint reserveB) = PancakeLibrary.getReserves(factory, tokenA, tokenB); if (reserveA == 0 && reserveB == 0) { @@ -69,7 +69,7 @@ contract PancakeRouter01 is IPancakeRouter01 { address pair = PancakeLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); - liquidity = IPancakePair(pair).mint(to); + liquidity = IUniswapV2Pair(pair).mint(to); } function addLiquidityETH( address token, @@ -91,7 +91,7 @@ contract PancakeRouter01 is IPancakeRouter01 { TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); - liquidity = IPancakePair(pair).mint(to); + liquidity = IUniswapV2Pair(pair).mint(to); if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH); // refund dust eth, if any } @@ -106,8 +106,8 @@ contract PancakeRouter01 is IPancakeRouter01 { uint deadline ) public override ensure(deadline) returns (uint amountA, uint amountB) { address pair = PancakeLibrary.pairFor(factory, tokenA, tokenB); - IPancakePair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair - (uint amount0, uint amount1) = IPancakePair(pair).burn(to); + IUniswapV2Pair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair + (uint amount0, uint amount1) = IUniswapV2Pair(pair).burn(to); (address token0,) = PancakeLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, 'PancakeRouter: INSUFFICIENT_A_AMOUNT'); @@ -146,7 +146,7 @@ contract PancakeRouter01 is IPancakeRouter01 { ) external override returns (uint amountA, uint amountB) { address pair = PancakeLibrary.pairFor(factory, tokenA, tokenB); uint value = approveMax ? uint(-1) : liquidity; - IPancakePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); + IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline); } function removeLiquidityETHWithPermit( @@ -160,7 +160,7 @@ contract PancakeRouter01 is IPancakeRouter01 { ) external override returns (uint amountToken, uint amountETH) { address pair = PancakeLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; - IPancakePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); + IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline); } @@ -173,7 +173,7 @@ contract PancakeRouter01 is IPancakeRouter01 { uint amountOut = amounts[i + 1]; (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0)); address to = i < path.length - 2 ? PancakeLibrary.pairFor(factory, output, path[i + 2]) : _to; - IPancakePair(PancakeLibrary.pairFor(factory, input, output)).swap(amount0Out, amount1Out, to, new bytes(0)); + IUniswapV2Pair(PancakeLibrary.pairFor(factory, input, output)).swap(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokens( diff --git a/contracts/WETH.sol b/contracts/WETH.sol new file mode 100644 index 0000000..d72068c --- /dev/null +++ b/contracts/WETH.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.6.0; +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; + +contract WETH is ERC20, Ownable { + constructor() public ERC20("WETH", "WETH") { + _mint(msg.sender, 100000 ether); + } + + function mint(address account, uint256 amount) external onlyOwner { + _mint(account, amount); + } +} diff --git a/contracts/YellowToken.sol b/contracts/YellowToken.sol new file mode 100644 index 0000000..846b18c --- /dev/null +++ b/contracts/YellowToken.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.6.0; +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; + +contract YellowToken is ERC20, Ownable { + constructor() public ERC20("YELO", "YELO") { + _mint(msg.sender, 100000 ether); + } + + function mint(address account, uint256 amount) external onlyOwner { + _mint(account, amount); + } +} diff --git a/contracts/examples/ExampleFlashSwap.sol b/contracts/examples/ExampleFlashSwap.sol index f09d54e..5c5dd92 100644 --- a/contracts/examples/ExampleFlashSwap.sol +++ b/contracts/examples/ExampleFlashSwap.sol @@ -1,67 +1,67 @@ pragma solidity =0.6.6; -import '@uniswap/v2-core/contracts/interfaces/IPancakeCallee.sol'; +// import '@uniswap/v2-core/contracts/interfaces/IPancakeCallee.sol'; -import '../libraries/PancakeLibrary.sol'; -import '../interfaces/V1/IUniswapV1Factory.sol'; -import '../interfaces/V1/IUniswapV1Exchange.sol'; -import '../interfaces/IPancakeRouter01.sol'; -import '../interfaces/IERC20.sol'; -import '../interfaces/IWETH.sol'; +// import '../libraries/PancakeLibrary.sol'; +// import '../interfaces/V1/IUniswapV1Factory.sol'; +// import '../interfaces/V1/IUniswapV1Exchange.sol'; +// import '../interfaces/IPancakeRouter01.sol'; +// import '../interfaces/IERC20.sol'; +// import '../interfaces/IWETH.sol'; -contract ExampleFlashSwap is IPancakeCallee { - IUniswapV1Factory immutable factoryV1; - address immutable factory; - IWETH immutable WETH; +// contract ExampleFlashSwap is IPancakeCallee { +// IUniswapV1Factory immutable factoryV1; +// address immutable factory; +// IWETH immutable WETH; - constructor(address _factory, address _factoryV1, address router) public { - factoryV1 = IUniswapV1Factory(_factoryV1); - factory = _factory; - WETH = IWETH(IPancakeRouter01(router).WETH()); - } +// constructor(address _factory, address _factoryV1, address router) public { +// factoryV1 = IUniswapV1Factory(_factoryV1); +// factory = _factory; +// WETH = IWETH(IPancakeRouter01(router).WETH()); +// } - // needs to accept ETH from any V1 exchange and WETH. ideally this could be enforced, as in the router, - // but it's not possible because it requires a call to the v1 factory, which takes too much gas - receive() external payable {} +// // needs to accept ETH from any V1 exchange and WETH. ideally this could be enforced, as in the router, +// // but it's not possible because it requires a call to the v1 factory, which takes too much gas +// receive() external payable {} - // gets tokens/WETH via a V2 flash swap, swaps for the ETH/tokens on V1, repays V2, and keeps the rest! - function pancakeCall(address sender, uint amount0, uint amount1, bytes calldata data) external override { - address[] memory path = new address[](2); - uint amountToken; - uint amountETH; - { // scope for token{0,1}, avoids stack too deep errors - address token0 = IPancakePair(msg.sender).token0(); - address token1 = IPancakePair(msg.sender).token1(); - assert(msg.sender == PancakeLibrary.pairFor(factory, token0, token1)); // ensure that msg.sender is actually a V2 pair - assert(amount0 == 0 || amount1 == 0); // this strategy is unidirectional - path[0] = amount0 == 0 ? token0 : token1; - path[1] = amount0 == 0 ? token1 : token0; - amountToken = token0 == address(WETH) ? amount1 : amount0; - amountETH = token0 == address(WETH) ? amount0 : amount1; - } +// // gets tokens/WETH via a V2 flash swap, swaps for the ETH/tokens on V1, repays V2, and keeps the rest! +// function pancakeCall(address sender, uint amount0, uint amount1, bytes calldata data) external override { +// address[] memory path = new address[](2); +// uint amountToken; +// uint amountETH; +// { // scope for token{0,1}, avoids stack too deep errors +// address token0 = IPancakePair(msg.sender).token0(); +// address token1 = IPancakePair(msg.sender).token1(); +// assert(msg.sender == PancakeLibrary.pairFor(factory, token0, token1)); // ensure that msg.sender is actually a V2 pair +// assert(amount0 == 0 || amount1 == 0); // this strategy is unidirectional +// path[0] = amount0 == 0 ? token0 : token1; +// path[1] = amount0 == 0 ? token1 : token0; +// amountToken = token0 == address(WETH) ? amount1 : amount0; +// amountETH = token0 == address(WETH) ? amount0 : amount1; +// } - assert(path[0] == address(WETH) || path[1] == address(WETH)); // this strategy only works with a V2 WETH pair - IERC20 token = IERC20(path[0] == address(WETH) ? path[1] : path[0]); - IUniswapV1Exchange exchangeV1 = IUniswapV1Exchange(factoryV1.getExchange(address(token))); // get V1 exchange +// assert(path[0] == address(WETH) || path[1] == address(WETH)); // this strategy only works with a V2 WETH pair +// IERC20 token = IERC20(path[0] == address(WETH) ? path[1] : path[0]); +// IUniswapV1Exchange exchangeV1 = IUniswapV1Exchange(factoryV1.getExchange(address(token))); // get V1 exchange - if (amountToken > 0) { - (uint minETH) = abi.decode(data, (uint)); // slippage parameter for V1, passed in by caller - token.approve(address(exchangeV1), amountToken); - uint amountReceived = exchangeV1.tokenToEthSwapInput(amountToken, minETH, uint(-1)); - uint amountRequired = PancakeLibrary.getAmountsIn(factory, amountToken, path)[0]; - assert(amountReceived > amountRequired); // fail if we didn't get enough ETH back to repay our flash loan - WETH.deposit{value: amountRequired}(); - assert(WETH.transfer(msg.sender, amountRequired)); // return WETH to V2 pair - (bool success,) = sender.call{value: amountReceived - amountRequired}(new bytes(0)); // keep the rest! (ETH) - assert(success); - } else { - (uint minTokens) = abi.decode(data, (uint)); // slippage parameter for V1, passed in by caller - WETH.withdraw(amountETH); - uint amountReceived = exchangeV1.ethToTokenSwapInput{value: amountETH}(minTokens, uint(-1)); - uint amountRequired = PancakeLibrary.getAmountsIn(factory, amountETH, path)[0]; - assert(amountReceived > amountRequired); // fail if we didn't get enough tokens back to repay our flash loan - assert(token.transfer(msg.sender, amountRequired)); // return tokens to V2 pair - assert(token.transfer(sender, amountReceived - amountRequired)); // keep the rest! (tokens) - } - } -} +// if (amountToken > 0) { +// (uint minETH) = abi.decode(data, (uint)); // slippage parameter for V1, passed in by caller +// token.approve(address(exchangeV1), amountToken); +// uint amountReceived = exchangeV1.tokenToEthSwapInput(amountToken, minETH, uint(-1)); +// uint amountRequired = PancakeLibrary.getAmountsIn(factory, amountToken, path)[0]; +// assert(amountReceived > amountRequired); // fail if we didn't get enough ETH back to repay our flash loan +// WETH.deposit{value: amountRequired}(); +// assert(WETH.transfer(msg.sender, amountRequired)); // return WETH to V2 pair +// (bool success,) = sender.call{value: amountReceived - amountRequired}(new bytes(0)); // keep the rest! (ETH) +// assert(success); +// } else { +// (uint minTokens) = abi.decode(data, (uint)); // slippage parameter for V1, passed in by caller +// WETH.withdraw(amountETH); +// uint amountReceived = exchangeV1.ethToTokenSwapInput{value: amountETH}(minTokens, uint(-1)); +// uint amountRequired = PancakeLibrary.getAmountsIn(factory, amountETH, path)[0]; +// assert(amountReceived > amountRequired); // fail if we didn't get enough tokens back to repay our flash loan +// assert(token.transfer(msg.sender, amountRequired)); // return tokens to V2 pair +// assert(token.transfer(sender, amountReceived - amountRequired)); // keep the rest! (tokens) +// } +// } +// } diff --git a/contracts/examples/ExampleOracleSimple.sol b/contracts/examples/ExampleOracleSimple.sol index b8f806b..5365aca 100644 --- a/contracts/examples/ExampleOracleSimple.sol +++ b/contracts/examples/ExampleOracleSimple.sol @@ -1,67 +1,67 @@ pragma solidity =0.6.6; -import '@uniswap/v2-core/contracts/interfaces/IPancakeFactory.sol'; -import '@uniswap/v2-core/contracts/interfaces/IPancakePair.sol'; -import '@uniswap/lib/contracts/libraries/FixedPoint.sol'; +// import '@uniswap/v2-core/contracts/interfaces/IPancakeFactory.sol'; +// import '@uniswap/v2-core/contracts/interfaces/IPancakePair.sol'; +// import '@uniswap/lib/contracts/libraries/FixedPoint.sol'; -import '../libraries/PancakeOracleLibrary.sol'; -import '../libraries/PancakeLibrary.sol'; +// import '../libraries/PancakeOracleLibrary.sol'; +// import '../libraries/PancakeLibrary.sol'; -// fixed window oracle that recomputes the average price for the entire period once every period -// note that the price average is only guaranteed to be over at least 1 period, but may be over a longer period -contract ExampleOracleSimple { - using FixedPoint for *; +// // fixed window oracle that recomputes the average price for the entire period once every period +// // note that the price average is only guaranteed to be over at least 1 period, but may be over a longer period +// contract ExampleOracleSimple { +// using FixedPoint for *; - uint public constant PERIOD = 24 hours; +// uint public constant PERIOD = 24 hours; - IPancakePair immutable pair; - address public immutable token0; - address public immutable token1; +// IPancakePair immutable pair; +// address public immutable token0; +// address public immutable token1; - uint public price0CumulativeLast; - uint public price1CumulativeLast; - uint32 public blockTimestampLast; - FixedPoint.uq112x112 public price0Average; - FixedPoint.uq112x112 public price1Average; +// uint public price0CumulativeLast; +// uint public price1CumulativeLast; +// uint32 public blockTimestampLast; +// FixedPoint.uq112x112 public price0Average; +// FixedPoint.uq112x112 public price1Average; - constructor(address factory, address tokenA, address tokenB) public { - IPancakePair _pair = IPancakePair(PancakeLibrary.pairFor(factory, tokenA, tokenB)); - pair = _pair; - token0 = _pair.token0(); - token1 = _pair.token1(); - price0CumulativeLast = _pair.price0CumulativeLast(); // fetch the current accumulated price value (1 / 0) - price1CumulativeLast = _pair.price1CumulativeLast(); // fetch the current accumulated price value (0 / 1) - uint112 reserve0; - uint112 reserve1; - (reserve0, reserve1, blockTimestampLast) = _pair.getReserves(); - require(reserve0 != 0 && reserve1 != 0, 'ExampleOracleSimple: NO_RESERVES'); // ensure that there's liquidity in the pair - } +// constructor(address factory, address tokenA, address tokenB) public { +// IPancakePair _pair = IPancakePair(PancakeLibrary.pairFor(factory, tokenA, tokenB)); +// pair = _pair; +// token0 = _pair.token0(); +// token1 = _pair.token1(); +// price0CumulativeLast = _pair.price0CumulativeLast(); // fetch the current accumulated price value (1 / 0) +// price1CumulativeLast = _pair.price1CumulativeLast(); // fetch the current accumulated price value (0 / 1) +// uint112 reserve0; +// uint112 reserve1; +// (reserve0, reserve1, blockTimestampLast) = _pair.getReserves(); +// require(reserve0 != 0 && reserve1 != 0, 'ExampleOracleSimple: NO_RESERVES'); // ensure that there's liquidity in the pair +// } - function update() external { - (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) = - PancakeOracleLibrary.currentCumulativePrices(address(pair)); - uint32 timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired +// function update() external { +// (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) = +// PancakeOracleLibrary.currentCumulativePrices(address(pair)); +// uint32 timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired - // ensure that at least one full period has passed since the last update - require(timeElapsed >= PERIOD, 'ExampleOracleSimple: PERIOD_NOT_ELAPSED'); +// // ensure that at least one full period has passed since the last update +// require(timeElapsed >= PERIOD, 'ExampleOracleSimple: PERIOD_NOT_ELAPSED'); - // overflow is desired, casting never truncates - // cumulative price is in (uq112x112 price * seconds) units so we simply wrap it after division by time elapsed - price0Average = FixedPoint.uq112x112(uint224((price0Cumulative - price0CumulativeLast) / timeElapsed)); - price1Average = FixedPoint.uq112x112(uint224((price1Cumulative - price1CumulativeLast) / timeElapsed)); +// // overflow is desired, casting never truncates +// // cumulative price is in (uq112x112 price * seconds) units so we simply wrap it after division by time elapsed +// price0Average = FixedPoint.uq112x112(uint224((price0Cumulative - price0CumulativeLast) / timeElapsed)); +// price1Average = FixedPoint.uq112x112(uint224((price1Cumulative - price1CumulativeLast) / timeElapsed)); - price0CumulativeLast = price0Cumulative; - price1CumulativeLast = price1Cumulative; - blockTimestampLast = blockTimestamp; - } +// price0CumulativeLast = price0Cumulative; +// price1CumulativeLast = price1Cumulative; +// blockTimestampLast = blockTimestamp; +// } - // note this will always return 0 before update has been called successfully for the first time. - function consult(address token, uint amountIn) external view returns (uint amountOut) { - if (token == token0) { - amountOut = price0Average.mul(amountIn).decode144(); - } else { - require(token == token1, 'ExampleOracleSimple: INVALID_TOKEN'); - amountOut = price1Average.mul(amountIn).decode144(); - } - } -} +// // note this will always return 0 before update has been called successfully for the first time. +// function consult(address token, uint amountIn) external view returns (uint amountOut) { +// if (token == token0) { +// amountOut = price0Average.mul(amountIn).decode144(); +// } else { +// require(token == token1, 'ExampleOracleSimple: INVALID_TOKEN'); +// amountOut = price1Average.mul(amountIn).decode144(); +// } +// } +// } diff --git a/contracts/examples/ExampleSlidingWindowOracle.sol b/contracts/examples/ExampleSlidingWindowOracle.sol index cc73109..9f8c13a 100644 --- a/contracts/examples/ExampleSlidingWindowOracle.sol +++ b/contracts/examples/ExampleSlidingWindowOracle.sol @@ -1,125 +1,125 @@ pragma solidity =0.6.6; -import '@uniswap/v2-core/contracts/interfaces/IPancakeFactory.sol'; -import '@uniswap/v2-core/contracts/interfaces/IPancakePair.sol'; -import '@uniswap/lib/contracts/libraries/FixedPoint.sol'; - -import '../libraries/SafeMath.sol'; -import '../libraries/PancakeLibrary.sol'; -import '../libraries/PancakeOracleLibrary.sol'; - -// sliding window oracle that uses observations collected over a window to provide moving price averages in the past -// `windowSize` with a precision of `windowSize / granularity` -// note this is a singleton oracle and only needs to be deployed once per desired parameters, which -// differs from the simple oracle which must be deployed once per pair. -contract ExampleSlidingWindowOracle { - using FixedPoint for *; - using SafeMath for uint; - - struct Observation { - uint timestamp; - uint price0Cumulative; - uint price1Cumulative; - } - - address public immutable factory; - // the desired amount of time over which the moving average should be computed, e.g. 24 hours - uint public immutable windowSize; - // the number of observations stored for each pair, i.e. how many price observations are stored for the window. - // as granularity increases from 1, more frequent updates are needed, but moving averages become more precise. - // averages are computed over intervals with sizes in the range: - // [windowSize - (windowSize / granularity) * 2, windowSize] - // e.g. if the window size is 24 hours, and the granularity is 24, the oracle will return the average price for - // the period: - // [now - [22 hours, 24 hours], now] - uint8 public immutable granularity; - // this is redundant with granularity and windowSize, but stored for gas savings & informational purposes. - uint public immutable periodSize; - - // mapping from pair address to a list of price observations of that pair - mapping(address => Observation[]) public pairObservations; - - constructor(address factory_, uint windowSize_, uint8 granularity_) public { - require(granularity_ > 1, 'SlidingWindowOracle: GRANULARITY'); - require( - (periodSize = windowSize_ / granularity_) * granularity_ == windowSize_, - 'SlidingWindowOracle: WINDOW_NOT_EVENLY_DIVISIBLE' - ); - factory = factory_; - windowSize = windowSize_; - granularity = granularity_; - } - - // returns the index of the observation corresponding to the given timestamp - function observationIndexOf(uint timestamp) public view returns (uint8 index) { - uint epochPeriod = timestamp / periodSize; - return uint8(epochPeriod % granularity); - } - - // returns the observation from the oldest epoch (at the beginning of the window) relative to the current time - function getFirstObservationInWindow(address pair) private view returns (Observation storage firstObservation) { - uint8 observationIndex = observationIndexOf(block.timestamp); - // no overflow issue. if observationIndex + 1 overflows, result is still zero. - uint8 firstObservationIndex = (observationIndex + 1) % granularity; - firstObservation = pairObservations[pair][firstObservationIndex]; - } - - // update the cumulative price for the observation at the current timestamp. each observation is updated at most - // once per epoch period. - function update(address tokenA, address tokenB) external { - address pair = PancakeLibrary.pairFor(factory, tokenA, tokenB); - - // populate the array with empty observations (first call only) - for (uint i = pairObservations[pair].length; i < granularity; i++) { - pairObservations[pair].push(); - } - - // get the observation for the current period - uint8 observationIndex = observationIndexOf(block.timestamp); - Observation storage observation = pairObservations[pair][observationIndex]; - - // we only want to commit updates once per period (i.e. windowSize / granularity) - uint timeElapsed = block.timestamp - observation.timestamp; - if (timeElapsed > periodSize) { - (uint price0Cumulative, uint price1Cumulative,) = PancakeOracleLibrary.currentCumulativePrices(pair); - observation.timestamp = block.timestamp; - observation.price0Cumulative = price0Cumulative; - observation.price1Cumulative = price1Cumulative; - } - } - - // given the cumulative prices of the start and end of a period, and the length of the period, compute the average - // price in terms of how much amount out is received for the amount in - function computeAmountOut( - uint priceCumulativeStart, uint priceCumulativeEnd, - uint timeElapsed, uint amountIn - ) private pure returns (uint amountOut) { - // overflow is desired. - FixedPoint.uq112x112 memory priceAverage = FixedPoint.uq112x112( - uint224((priceCumulativeEnd - priceCumulativeStart) / timeElapsed) - ); - amountOut = priceAverage.mul(amountIn).decode144(); - } - - // returns the amount out corresponding to the amount in for a given token using the moving average over the time - // range [now - [windowSize, windowSize - periodSize * 2], now] - // update must have been called for the bucket corresponding to timestamp `now - windowSize` - function consult(address tokenIn, uint amountIn, address tokenOut) external view returns (uint amountOut) { - address pair = PancakeLibrary.pairFor(factory, tokenIn, tokenOut); - Observation storage firstObservation = getFirstObservationInWindow(pair); - - uint timeElapsed = block.timestamp - firstObservation.timestamp; - require(timeElapsed <= windowSize, 'SlidingWindowOracle: MISSING_HISTORICAL_OBSERVATION'); - // should never happen. - require(timeElapsed >= windowSize - periodSize * 2, 'SlidingWindowOracle: UNEXPECTED_TIME_ELAPSED'); - - (uint price0Cumulative, uint price1Cumulative,) = PancakeOracleLibrary.currentCumulativePrices(pair); - (address token0,) = PancakeLibrary.sortTokens(tokenIn, tokenOut); - - if (token0 == tokenIn) { - return computeAmountOut(firstObservation.price0Cumulative, price0Cumulative, timeElapsed, amountIn); - } else { - return computeAmountOut(firstObservation.price1Cumulative, price1Cumulative, timeElapsed, amountIn); - } - } -} +// import '@uniswap/v2-core/contracts/interfaces/IPancakeFactory.sol'; +// import '@uniswap/v2-core/contracts/interfaces/IPancakePair.sol'; +// import '@uniswap/lib/contracts/libraries/FixedPoint.sol'; + +// import '../libraries/SafeMath.sol'; +// import '../libraries/PancakeLibrary.sol'; +// import '../libraries/PancakeOracleLibrary.sol'; + +// // sliding window oracle that uses observations collected over a window to provide moving price averages in the past +// // `windowSize` with a precision of `windowSize / granularity` +// // note this is a singleton oracle and only needs to be deployed once per desired parameters, which +// // differs from the simple oracle which must be deployed once per pair. +// contract ExampleSlidingWindowOracle { +// using FixedPoint for *; +// using SafeMath for uint; + +// struct Observation { +// uint timestamp; +// uint price0Cumulative; +// uint price1Cumulative; +// } + +// address public immutable factory; +// // the desired amount of time over which the moving average should be computed, e.g. 24 hours +// uint public immutable windowSize; +// // the number of observations stored for each pair, i.e. how many price observations are stored for the window. +// // as granularity increases from 1, more frequent updates are needed, but moving averages become more precise. +// // averages are computed over intervals with sizes in the range: +// // [windowSize - (windowSize / granularity) * 2, windowSize] +// // e.g. if the window size is 24 hours, and the granularity is 24, the oracle will return the average price for +// // the period: +// // [now - [22 hours, 24 hours], now] +// uint8 public immutable granularity; +// // this is redundant with granularity and windowSize, but stored for gas savings & informational purposes. +// uint public immutable periodSize; + +// // mapping from pair address to a list of price observations of that pair +// mapping(address => Observation[]) public pairObservations; + +// constructor(address factory_, uint windowSize_, uint8 granularity_) public { +// require(granularity_ > 1, 'SlidingWindowOracle: GRANULARITY'); +// require( +// (periodSize = windowSize_ / granularity_) * granularity_ == windowSize_, +// 'SlidingWindowOracle: WINDOW_NOT_EVENLY_DIVISIBLE' +// ); +// factory = factory_; +// windowSize = windowSize_; +// granularity = granularity_; +// } + +// // returns the index of the observation corresponding to the given timestamp +// function observationIndexOf(uint timestamp) public view returns (uint8 index) { +// uint epochPeriod = timestamp / periodSize; +// return uint8(epochPeriod % granularity); +// } + +// // returns the observation from the oldest epoch (at the beginning of the window) relative to the current time +// function getFirstObservationInWindow(address pair) private view returns (Observation storage firstObservation) { +// uint8 observationIndex = observationIndexOf(block.timestamp); +// // no overflow issue. if observationIndex + 1 overflows, result is still zero. +// uint8 firstObservationIndex = (observationIndex + 1) % granularity; +// firstObservation = pairObservations[pair][firstObservationIndex]; +// } + +// // update the cumulative price for the observation at the current timestamp. each observation is updated at most +// // once per epoch period. +// function update(address tokenA, address tokenB) external { +// address pair = PancakeLibrary.pairFor(factory, tokenA, tokenB); + +// // populate the array with empty observations (first call only) +// for (uint i = pairObservations[pair].length; i < granularity; i++) { +// pairObservations[pair].push(); +// } + +// // get the observation for the current period +// uint8 observationIndex = observationIndexOf(block.timestamp); +// Observation storage observation = pairObservations[pair][observationIndex]; + +// // we only want to commit updates once per period (i.e. windowSize / granularity) +// uint timeElapsed = block.timestamp - observation.timestamp; +// if (timeElapsed > periodSize) { +// (uint price0Cumulative, uint price1Cumulative,) = PancakeOracleLibrary.currentCumulativePrices(pair); +// observation.timestamp = block.timestamp; +// observation.price0Cumulative = price0Cumulative; +// observation.price1Cumulative = price1Cumulative; +// } +// } + +// // given the cumulative prices of the start and end of a period, and the length of the period, compute the average +// // price in terms of how much amount out is received for the amount in +// function computeAmountOut( +// uint priceCumulativeStart, uint priceCumulativeEnd, +// uint timeElapsed, uint amountIn +// ) private pure returns (uint amountOut) { +// // overflow is desired. +// FixedPoint.uq112x112 memory priceAverage = FixedPoint.uq112x112( +// uint224((priceCumulativeEnd - priceCumulativeStart) / timeElapsed) +// ); +// amountOut = priceAverage.mul(amountIn).decode144(); +// } + +// // returns the amount out corresponding to the amount in for a given token using the moving average over the time +// // range [now - [windowSize, windowSize - periodSize * 2], now] +// // update must have been called for the bucket corresponding to timestamp `now - windowSize` +// function consult(address tokenIn, uint amountIn, address tokenOut) external view returns (uint amountOut) { +// address pair = PancakeLibrary.pairFor(factory, tokenIn, tokenOut); +// Observation storage firstObservation = getFirstObservationInWindow(pair); + +// uint timeElapsed = block.timestamp - firstObservation.timestamp; +// require(timeElapsed <= windowSize, 'SlidingWindowOracle: MISSING_HISTORICAL_OBSERVATION'); +// // should never happen. +// require(timeElapsed >= windowSize - periodSize * 2, 'SlidingWindowOracle: UNEXPECTED_TIME_ELAPSED'); + +// (uint price0Cumulative, uint price1Cumulative,) = PancakeOracleLibrary.currentCumulativePrices(pair); +// (address token0,) = PancakeLibrary.sortTokens(tokenIn, tokenOut); + +// if (token0 == tokenIn) { +// return computeAmountOut(firstObservation.price0Cumulative, price0Cumulative, timeElapsed, amountIn); +// } else { +// return computeAmountOut(firstObservation.price1Cumulative, price1Cumulative, timeElapsed, amountIn); +// } +// } +// } diff --git a/contracts/examples/ExampleSwapToPrice.sol b/contracts/examples/ExampleSwapToPrice.sol index f370659..d1a487f 100644 --- a/contracts/examples/ExampleSwapToPrice.sol +++ b/contracts/examples/ExampleSwapToPrice.sol @@ -1,95 +1,95 @@ pragma solidity =0.6.6; -import '@uniswap/v2-core/contracts/interfaces/IPancakePair.sol'; -import '@uniswap/lib/contracts/libraries/Babylonian.sol'; -import '@uniswap/lib/contracts/libraries/TransferHelper.sol'; +// import '@uniswap/v2-core/contracts/interfaces/IPancakePair.sol'; +// import '@uniswap/lib/contracts/libraries/Babylonian.sol'; +// import '@uniswap/lib/contracts/libraries/TransferHelper.sol'; -import '../interfaces/IERC20.sol'; -import '../interfaces/IPancakeRouter01.sol'; -import '../libraries/SafeMath.sol'; -import '../libraries/PancakeLibrary.sol'; +// import '../interfaces/IERC20.sol'; +// import '../interfaces/IPancakeRouter01.sol'; +// import '../libraries/SafeMath.sol'; +// import '../libraries/PancakeLibrary.sol'; -contract ExampleSwapToPrice { - using SafeMath for uint256; +// contract ExampleSwapToPrice { +// using SafeMath for uint256; - IPancakeRouter01 public immutable router; - address public immutable factory; +// IPancakeRouter01 public immutable router; +// address public immutable factory; - constructor(address factory_, IPancakeRouter01 router_) public { - factory = factory_; - router = router_; - } +// constructor(address factory_, IPancakeRouter01 router_) public { +// factory = factory_; +// router = router_; +// } - // computes the direction and magnitude of the profit-maximizing trade - function computeProfitMaximizingTrade( - uint256 truePriceTokenA, - uint256 truePriceTokenB, - uint256 reserveA, - uint256 reserveB - ) pure public returns (bool aToB, uint256 amountIn) { - aToB = reserveA.mul(truePriceTokenB) / reserveB < truePriceTokenA; +// // computes the direction and magnitude of the profit-maximizing trade +// function computeProfitMaximizingTrade( +// uint256 truePriceTokenA, +// uint256 truePriceTokenB, +// uint256 reserveA, +// uint256 reserveB +// ) pure public returns (bool aToB, uint256 amountIn) { +// aToB = reserveA.mul(truePriceTokenB) / reserveB < truePriceTokenA; - uint256 invariant = reserveA.mul(reserveB); +// uint256 invariant = reserveA.mul(reserveB); - uint256 leftSide = Babylonian.sqrt( - invariant.mul(aToB ? truePriceTokenA : truePriceTokenB).mul(1000) / - uint256(aToB ? truePriceTokenB : truePriceTokenA).mul(997) - ); - uint256 rightSide = (aToB ? reserveA.mul(1000) : reserveB.mul(1000)) / 997; +// uint256 leftSide = Babylonian.sqrt( +// invariant.mul(aToB ? truePriceTokenA : truePriceTokenB).mul(1000) / +// uint256(aToB ? truePriceTokenB : truePriceTokenA).mul(997) +// ); +// uint256 rightSide = (aToB ? reserveA.mul(1000) : reserveB.mul(1000)) / 997; - // compute the amount that must be sent to move the price to the profit-maximizing price - amountIn = leftSide.sub(rightSide); - } +// // compute the amount that must be sent to move the price to the profit-maximizing price +// amountIn = leftSide.sub(rightSide); +// } - // swaps an amount of either token such that the trade is profit-maximizing, given an external true price - // true price is expressed in the ratio of token A to token B - // caller must approve this contract to spend whichever token is intended to be swapped - function swapToPrice( - address tokenA, - address tokenB, - uint256 truePriceTokenA, - uint256 truePriceTokenB, - uint256 maxSpendTokenA, - uint256 maxSpendTokenB, - address to, - uint256 deadline - ) public { - // true price is expressed as a ratio, so both values must be non-zero - require(truePriceTokenA != 0 && truePriceTokenB != 0, "ExampleSwapToPrice: ZERO_PRICE"); - // caller can specify 0 for either if they wish to swap in only one direction, but not both - require(maxSpendTokenA != 0 || maxSpendTokenB != 0, "ExampleSwapToPrice: ZERO_SPEND"); +// // swaps an amount of either token such that the trade is profit-maximizing, given an external true price +// // true price is expressed in the ratio of token A to token B +// // caller must approve this contract to spend whichever token is intended to be swapped +// function swapToPrice( +// address tokenA, +// address tokenB, +// uint256 truePriceTokenA, +// uint256 truePriceTokenB, +// uint256 maxSpendTokenA, +// uint256 maxSpendTokenB, +// address to, +// uint256 deadline +// ) public { +// // true price is expressed as a ratio, so both values must be non-zero +// require(truePriceTokenA != 0 && truePriceTokenB != 0, "ExampleSwapToPrice: ZERO_PRICE"); +// // caller can specify 0 for either if they wish to swap in only one direction, but not both +// require(maxSpendTokenA != 0 || maxSpendTokenB != 0, "ExampleSwapToPrice: ZERO_SPEND"); - bool aToB; - uint256 amountIn; - { - (uint256 reserveA, uint256 reserveB) = PancakeLibrary.getReserves(factory, tokenA, tokenB); - (aToB, amountIn) = computeProfitMaximizingTrade( - truePriceTokenA, truePriceTokenB, - reserveA, reserveB - ); - } +// bool aToB; +// uint256 amountIn; +// { +// (uint256 reserveA, uint256 reserveB) = PancakeLibrary.getReserves(factory, tokenA, tokenB); +// (aToB, amountIn) = computeProfitMaximizingTrade( +// truePriceTokenA, truePriceTokenB, +// reserveA, reserveB +// ); +// } - // spend up to the allowance of the token in - uint256 maxSpend = aToB ? maxSpendTokenA : maxSpendTokenB; - if (amountIn > maxSpend) { - amountIn = maxSpend; - } +// // spend up to the allowance of the token in +// uint256 maxSpend = aToB ? maxSpendTokenA : maxSpendTokenB; +// if (amountIn > maxSpend) { +// amountIn = maxSpend; +// } - address tokenIn = aToB ? tokenA : tokenB; - address tokenOut = aToB ? tokenB : tokenA; - TransferHelper.safeTransferFrom(tokenIn, msg.sender, address(this), amountIn); - TransferHelper.safeApprove(tokenIn, address(router), amountIn); +// address tokenIn = aToB ? tokenA : tokenB; +// address tokenOut = aToB ? tokenB : tokenA; +// TransferHelper.safeTransferFrom(tokenIn, msg.sender, address(this), amountIn); +// TransferHelper.safeApprove(tokenIn, address(router), amountIn); - address[] memory path = new address[](2); - path[0] = tokenIn; - path[1] = tokenOut; +// address[] memory path = new address[](2); +// path[0] = tokenIn; +// path[1] = tokenOut; - router.swapExactTokensForTokens( - amountIn, - 0, // amountOutMin: we can skip computing this number because the math is tested - path, - to, - deadline - ); - } -} +// router.swapExactTokensForTokens( +// amountIn, +// 0, // amountOutMin: we can skip computing this number because the math is tested +// path, +// to, +// deadline +// ); +// } +// } diff --git a/contracts/libraries/PancakeLibrary.sol b/contracts/libraries/PancakeLibrary.sol index 60b1e0e..2b80a6a 100644 --- a/contracts/libraries/PancakeLibrary.sol +++ b/contracts/libraries/PancakeLibrary.sol @@ -1,6 +1,6 @@ pragma solidity >=0.5.0; -import '@uniswap/v2-core/contracts/interfaces/IPancakePair.sol'; +import '@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol'; import "./SafeMath.sol"; @@ -21,7 +21,7 @@ library PancakeLibrary { hex'ff', factory, keccak256(abi.encodePacked(token0, token1)), - hex'd0d4c4cd0848c93cb4fd1f498d7013ee6bfb25783ea21593d5834f5d250ece66' // init code hash + hex'f4c741b552690ebc6d0fbc9b0c881422ff1572ff8e78659b2f242021759f4e86' // init code hash )))); } @@ -29,7 +29,7 @@ library PancakeLibrary { function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) { (address token0,) = sortTokens(tokenA, tokenB); pairFor(factory, tokenA, tokenB); - (uint reserve0, uint reserve1,) = IPancakePair(pairFor(factory, tokenA, tokenB)).getReserves(); + (uint reserve0, uint reserve1,) = IUniswapV2Pair(pairFor(factory, tokenA, tokenB)).getReserves(); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } diff --git a/contracts/libraries/PancakeOracleLibrary.sol b/contracts/libraries/PancakeOracleLibrary.sol index 318c242..39a5d3b 100644 --- a/contracts/libraries/PancakeOracleLibrary.sol +++ b/contracts/libraries/PancakeOracleLibrary.sol @@ -1,6 +1,6 @@ pragma solidity >=0.5.0; -import '@uniswap/v2-core/contracts/interfaces/IPancakePair.sol'; +import '@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol'; import '@uniswap/lib/contracts/libraries/FixedPoint.sol'; // library with helper methods for oracles that are concerned with computing average prices @@ -17,11 +17,11 @@ library PancakeOracleLibrary { address pair ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) { blockTimestamp = currentBlockTimestamp(); - price0Cumulative = IPancakePair(pair).price0CumulativeLast(); - price1Cumulative = IPancakePair(pair).price1CumulativeLast(); + price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast(); + price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast(); // if time has elapsed since the last update on the pair, mock the accumulated price values - (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IPancakePair(pair).getReserves(); + (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves(); if (blockTimestampLast != blockTimestamp) { // subtraction overflow is desired uint32 timeElapsed = blockTimestamp - blockTimestampLast; diff --git a/migrations/1_initial_migration.js b/migrations/1_initial_migration.js new file mode 100644 index 0000000..762c081 --- /dev/null +++ b/migrations/1_initial_migration.js @@ -0,0 +1,32 @@ +const { MAX_INTEGER } = require('ethereumjs-util'); + +const Migrations = artifacts.require("Migrations"); +const WETH = artifacts.require("WETH"); +const GreenToken = artifacts.require("GreenToken"); +const YellowToken = artifacts.require("YellowToken"); +const PancakeRouter01 = artifacts.require("PancakeRouter01"); + +module.exports = async (deployer, net, accs) => { + await deployer.deploy(Migrations); + const weth = await deployer.deploy(WETH); + const greenToken = await deployer.deploy(GreenToken); + const yellowToken = await deployer.deploy(YellowToken); + const router = await deployer.deploy(PancakeRouter01, '0xD02F09b5131B9593BCBee5427562908f0F806Dda', WETH.address); + + await weth.approve(router.address, MAX_INTEGER); + await greenToken.approve(router.address, MAX_INTEGER); + await yellowToken.approve(router.address, MAX_INTEGER); + + await router.addLiquidity(GreenToken.address, YellowToken.address, toWei('100'), toWei('100'), toWei('100'), toWei('100'), accs[0] ,toWei(toWei('1'))) + + console.log("Green Token: ", GreenToken.address); + console.log("Yellow Token: ", YellowToken.address); +}; + +const toWei = (w) => web3.utils.toWei(w) + +//WETH 0x11E3E9f259e0273369542D1a1eE315e0EA065Cd0 +//Router01 0xCc58f119a8D0598EeEf19b6E5Bff07c9a0Bc4A17 + +//Green Token: 0x381316ed98bcd9E28661F953DECc22f910Fa98fD +// Yellow Token: 0x5683e8c773E9fD01CAa9bD59b74f7Ed925745774 \ No newline at end of file diff --git a/package.json b/package.json index d4dd6e0..7b87074 100644 --- a/package.json +++ b/package.json @@ -15,10 +15,13 @@ "contracts" ], "dependencies": { + "@openzeppelin/contracts": "3.1.0", + "@truffle/hdwallet-provider": "^1.2.6", "@uniswap/lib": "1.1.1", "@uniswap/v2-core": "^1.0.1", + "dotenv": "^8.2.0", "truffle-hdwallet-provider": "^1.0.17", - "truffle-plugin-verify": "^0.4.0" + "truffle-plugin-verify": "^0.5.6" }, "devDependencies": { "@types/chai": "^4.2.6", @@ -35,6 +38,10 @@ "typescript": "^3.7.3" }, "scripts": { + "deploy": "truffle migrate --network bscTestnet --reset && truffle run verify PancakeRouter01 --network bscTestnet", + "comment1": " ", + "comment2": " ", + "comment3": " ", "lint": "yarn prettier ./test/*.ts --check", "lint:fix": "yarn prettier ./test/*.ts --write", "clean": "rimraf ./build/", diff --git a/truffle-config.js b/truffle-config.js new file mode 100644 index 0000000..33c151e --- /dev/null +++ b/truffle-config.js @@ -0,0 +1,85 @@ +var HDWalletProvider = require('@truffle/hdwallet-provider'); +require('dotenv').config(); +const MNEMONIC = process.env.MNEMONIC; +const token = process.env.INFURA_TOKEN; +const etherscanKey = process.env.BSCSCAN_KEY; + +module.exports = { + networks: { + develop: { + host: '127.0.0.1', + port: 8545, + network_id: '*', + gas: 6721975, + }, + development: { + host: '127.0.0.1', + port: 7545, + network_id: '*', + gas: 6721975, + }, + bscTestnet: { + provider: () => { + return new HDWalletProvider( + MNEMONIC, + 'https://data-seed-prebsc-1-s1.binance.org:8545' + ); + }, + network_id: '97', + }, + + bscMainnet: { + provider: () => { + return new HDWalletProvider( + MNEMONIC, + 'https://bsc-dataseed.binance.org' + ); + }, + network_id: '56', + }, + + mainnet: { + provider: () => { + return new HDWalletProvider( + MNEMONIC, + 'https://mainnet.infura.io/v3/' + token + ); + }, + network_id: '1', + }, + ropsten: { + provider: () => { + return new HDWalletProvider( + MNEMONIC, + 'https://ropsten.infura.io/v3/' + token + ); + }, + network_id: '3', + }, + kovan: { + provider: () => { + return new HDWalletProvider( + MNEMONIC, + 'https://kovan.infura.io/v3/' + token + ); + }, + network_id: '42', + skipDryRun: true, + }, + }, + plugins: ['truffle-plugin-verify'], + api_keys: { + etherscan: etherscanKey, + }, + compilers: { + solc: { + version: '0.6.6', + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + }, +}; diff --git a/yarn.lock b/yarn.lock index dc37ea9..1ed5b74 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,160 @@ # yarn lockfile v1 +"@babel/code-frame@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" + integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== + dependencies: + "@babel/highlight" "^7.12.13" + +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.13.15": + version "7.13.15" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.15.tgz#7e8eea42d0b64fda2b375b22d06c605222e848f4" + integrity sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA== + +"@babel/generator@^7.13.16": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.16.tgz#0befc287031a201d84cdfc173b46b320ae472d14" + integrity sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg== + dependencies: + "@babel/types" "^7.13.16" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-compilation-targets@^7.13.0": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c" + integrity sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA== + dependencies: + "@babel/compat-data" "^7.13.15" + "@babel/helper-validator-option" "^7.12.17" + browserslist "^4.14.5" + semver "^6.3.0" + +"@babel/helper-define-polyfill-provider@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz#a640051772045fedaaecc6f0c6c69f02bdd34bf1" + integrity sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-function-name@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" + integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== + dependencies: + "@babel/helper-get-function-arity" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/helper-get-function-arity@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" + integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" + integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== + dependencies: + "@babel/types" "^7.13.12" + +"@babel/helper-plugin-utils@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" + integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== + +"@babel/helper-split-export-declaration@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" + integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + +"@babel/helper-validator-option@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" + integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== + +"@babel/highlight@^7.12.13": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" + integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.12.13", "@babel/parser@^7.13.16": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.16.tgz#0f18179b0448e6939b1f3f5c4c355a3a9bcdfd37" + integrity sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw== + +"@babel/plugin-transform-runtime@^7.5.5": + version "7.13.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.15.tgz#2eddf585dd066b84102517e10a577f24f76a9cd7" + integrity sha512-d+ezl76gx6Jal08XngJUkXM4lFXK/5Ikl9Mh4HKDxSfGJXmZ9xG64XT2oivBzfxb/eQ62VfvoMkaCZUKJMVrBA== + dependencies: + "@babel/helper-module-imports" "^7.13.12" + "@babel/helper-plugin-utils" "^7.13.0" + babel-plugin-polyfill-corejs2 "^0.2.0" + babel-plugin-polyfill-corejs3 "^0.2.0" + babel-plugin-polyfill-regenerator "^0.2.0" + semver "^6.3.0" + +"@babel/runtime@^7.5.5": + version "7.13.17" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.17.tgz#8966d1fc9593bf848602f0662d6b4d0069e3a7ec" + integrity sha512-NCdgJEelPTSh+FEFylhnP1ylq848l1z9t9N0j1Lfbcw0+KXGjsTvUmkxy+voLLXB5SOKMbLLx4jxYliGrYQseA== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" + integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/parser" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/traverse@^7.13.0": + version "7.13.17" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.17.tgz#c85415e0c7d50ac053d758baec98b28b2ecfeea3" + integrity sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.16" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/parser" "^7.13.16" + "@babel/types" "^7.13.17" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.12.13", "@babel/types@^7.13.12", "@babel/types@^7.13.16", "@babel/types@^7.13.17": + version "7.13.17" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.17.tgz#48010a115c9fba7588b4437dd68c9469012b38b4" + integrity sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + to-fast-properties "^2.0.0" + "@ethereum-waffle/chai@^2.4.1": version "2.4.1" resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-2.4.1.tgz#47a6cc2eebaca775b169b524a6dc0cfcf3d3c22d" @@ -30,6 +184,11 @@ ethers "^4.0.45" ganache-core "^2.10.2" +"@openzeppelin/contracts@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.1.0.tgz#bcea457ef89069fbe5a617f50b25b6a8272895d5" + integrity sha512-dVXDnUKxrAKLzPdCRkz+N8qsVkK1XxJ6kk3zuI6zaQmcKxN7CkizoDP7lXxcs/Mi2I0mxceTRjJBqlzFffLJrQ== + "@resolver-engine/core@^0.3.3": version "0.3.3" resolved "https://registry.yarnpkg.com/@resolver-engine/core/-/core-0.3.3.tgz#590f77d85d45bc7ecc4e06c654f41345db6ca967" @@ -79,6 +238,98 @@ dependencies: defer-to-connect "^1.0.1" +"@truffle/hdwallet-provider@^1.2.6": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@truffle/hdwallet-provider/-/hdwallet-provider-1.2.6.tgz#249cfdb291e9b6ce6f0444a60bc4b0f06e87b627" + integrity sha512-g4n1ETH2y7KlqQYq0PMjuHaLxggU96RSj1p3i6dGCAgONyPyA+TD1wyot8M2dXp+RG/VVzZoVTuyFGyBs5EhXw== + dependencies: + "@trufflesuite/web3-provider-engine" "15.0.13-1" + any-promise "^1.3.0" + bindings "^1.5.0" + ethereum-cryptography "^0.1.3" + ethereum-protocol "^1.0.1" + ethereumjs-tx "^1.0.0" + ethereumjs-util "^6.1.0" + ethereumjs-wallet "^1.0.1" + +"@trufflesuite/eth-json-rpc-filters@^4.1.2-1": + version "4.1.2-1" + resolved "https://registry.yarnpkg.com/@trufflesuite/eth-json-rpc-filters/-/eth-json-rpc-filters-4.1.2-1.tgz#61ab78c52e98a883e5cf086925b34a30297b1824" + integrity sha512-/MChvC5dw2ck9NU1cZmdovCz2VKbOeIyR4tcxDvA5sT+NaL0rA2/R5U0yI7zsbo1zD+pgqav77rQHTzpUdDNJQ== + dependencies: + "@trufflesuite/eth-json-rpc-middleware" "^4.4.2-0" + await-semaphore "^0.1.3" + eth-query "^2.1.2" + json-rpc-engine "^5.1.3" + lodash.flatmap "^4.5.0" + safe-event-emitter "^1.0.1" + +"@trufflesuite/eth-json-rpc-infura@^4.0.3-0": + version "4.0.3-0" + resolved "https://registry.yarnpkg.com/@trufflesuite/eth-json-rpc-infura/-/eth-json-rpc-infura-4.0.3-0.tgz#6d22122937cf60ec9d21a02351c101fdc608c4fe" + integrity sha512-xaUanOmo0YLqRsL0SfXpFienhdw5bpQ1WEXxMTRi57az4lwpZBv4tFUDvcerdwJrxX9wQqNmgUgd1BrR01dumw== + dependencies: + "@trufflesuite/eth-json-rpc-middleware" "^4.4.2-1" + cross-fetch "^2.1.1" + eth-json-rpc-errors "^1.0.1" + json-rpc-engine "^5.1.3" + +"@trufflesuite/eth-json-rpc-middleware@^4.4.2-0", "@trufflesuite/eth-json-rpc-middleware@^4.4.2-1": + version "4.4.2-1" + resolved "https://registry.yarnpkg.com/@trufflesuite/eth-json-rpc-middleware/-/eth-json-rpc-middleware-4.4.2-1.tgz#8c3638ed8a7ed89a1e5e71407de068a65bef0df2" + integrity sha512-iEy9H8ja7/8aYES5HfrepGBKU9n/Y4OabBJEklVd/zIBlhCCBAWBqkIZgXt11nBXO/rYAeKwYuE3puH3ByYnLA== + dependencies: + "@trufflesuite/eth-sig-util" "^1.4.2" + btoa "^1.2.1" + clone "^2.1.1" + eth-json-rpc-errors "^1.0.1" + eth-query "^2.1.2" + ethereumjs-block "^1.6.0" + ethereumjs-tx "^1.3.7" + ethereumjs-util "^5.1.2" + ethereumjs-vm "^2.6.0" + fetch-ponyfill "^4.0.0" + json-rpc-engine "^5.1.3" + json-stable-stringify "^1.0.1" + pify "^3.0.0" + safe-event-emitter "^1.0.1" + +"@trufflesuite/eth-sig-util@^1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@trufflesuite/eth-sig-util/-/eth-sig-util-1.4.2.tgz#b529e2f38ac08e652116f48981132a26242a4f08" + integrity sha512-+GyfN6b0LNW77hbQlH3ufZ/1eCON7mMrGym6tdYf7xiNw9Vv3jBO72bmmos1EId2NgBvPMhmYYm6DSLQFTmzrA== + dependencies: + ethereumjs-abi "^0.6.8" + ethereumjs-util "^5.1.1" + +"@trufflesuite/web3-provider-engine@15.0.13-1": + version "15.0.13-1" + resolved "https://registry.yarnpkg.com/@trufflesuite/web3-provider-engine/-/web3-provider-engine-15.0.13-1.tgz#f6a7f7131a2fdc4ab53976318ed13ce83e8e4bcb" + integrity sha512-6u3x/iIN5fyj8pib5QTUDmIOUiwAGhaqdSTXdqCu6v9zo2BEwdCqgEJd1uXDh3DBmPRDfiZ/ge8oUPy7LerpHg== + dependencies: + "@trufflesuite/eth-json-rpc-filters" "^4.1.2-1" + "@trufflesuite/eth-json-rpc-infura" "^4.0.3-0" + "@trufflesuite/eth-json-rpc-middleware" "^4.4.2-1" + "@trufflesuite/eth-sig-util" "^1.4.2" + 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 "^2.0.2" + ethereumjs-block "^1.2.2" + ethereumjs-tx "^1.2.0" + ethereumjs-util "^5.1.5" + ethereumjs-vm "^2.3.4" + json-stable-stringify "^1.0.1" + promise-to-callback "^1.0.0" + readable-stream "^2.2.9" + request "^2.85.0" + semaphore "^1.0.3" + ws "^5.1.1" + xhr "^2.2.0" + xtend "^4.0.1" + "@types/bignumber.js@^5.0.0": version "5.0.0" resolved "https://registry.yarnpkg.com/@types/bignumber.js/-/bignumber.js-5.0.0.tgz#d9f1a378509f3010a3255e9cc822ad0eeb4ab969" @@ -93,6 +344,13 @@ dependencies: "@types/node" "*" +"@types/bn.js@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" + integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== + dependencies: + "@types/node" "*" + "@types/chai@^4.2.6": version "4.2.8" resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.8.tgz#c8d645506db0d15f4aafd4dfa873f443ad87ea59" @@ -133,6 +391,20 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.35.tgz#1e61b226c14380f4384f70cfe49a65c2c553ad2b" integrity sha512-ASYsaKecA7TUsDrqIGPNk3JeEox0z/0XR/WsJJ8BIX/9+SkMSImQXKWfU/yBrSyc7ZSE/NPqLu36Nur0miCFfQ== +"@types/pbkdf2@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" + integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + dependencies: + "@types/node" "*" + +"@types/secp256k1@^4.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.2.tgz#20c29a87149d980f64464e56539bf4810fdb5d1d" + integrity sha512-QMg+9v0bbNJ2peLuHRWxzmy0HRJIG6gFZNhaRSp7S3ggSbCCxiqQB2/ybvhXyhHOCequpNkrx7OavNhrWOsW0A== + dependencies: + "@types/node" "*" + "@uniswap/lib@1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@uniswap/lib/-/lib-1.1.1.tgz#0afd29601846c16e5d082866cbb24a9e0758e6bc" @@ -223,7 +495,7 @@ ansi-colors@3.2.3: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== -ansi-regex@^2.0.0, ansi-regex@^2.1.1: +ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= @@ -250,11 +522,6 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -antlr4ts@^0.5.0-alpha.3: - version "0.5.0-alpha.3" - resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.3.tgz#fa6d39d88d6b96341a8afef45867af9abcb38766" - integrity sha512-La89tKkGcHFIVuruv4Bm1esc3zLmES2NOTEwwNS1pudz+zx/0FNqQeUu9p48i9/QHKPVqjN87LB+q3buTg7oDQ== - any-promise@1.3.0, any-promise@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" @@ -339,6 +606,11 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= +await-semaphore@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/await-semaphore/-/await-semaphore-0.1.3.tgz#2b88018cc8c28e06167ae1cdff02504f1f9688d3" + integrity sha512-d1W2aNSYcz/sxYO4pMGX9vq65qOTu0P800epMud+6cYYX0QcT7zyqcxec3VWzpgvdXo57UWmVbZpLMjX2m1I7Q== + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -349,12 +621,12 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== -axios@0.19.2: - version "0.19.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" - integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== +axios@^0.21.1: + version "0.21.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" + integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== dependencies: - follow-redirects "1.5.10" + follow-redirects "^1.10.0" babel-code-frame@^6.26.0: version "6.26.0" @@ -531,6 +803,30 @@ babel-plugin-check-es2015-constants@^6.22.0: dependencies: babel-runtime "^6.22.0" +babel-plugin-polyfill-corejs2@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz#686775bf9a5aa757e10520903675e3889caeedc4" + integrity sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.2.0" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz#f4b4bb7b19329827df36ff56f6e6d367026cb7a2" + integrity sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.0" + core-js-compat "^3.9.1" + +babel-plugin-polyfill-regenerator@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz#853f5f5716f4691d98c84f8069c7636ea8da7ab8" + integrity sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.0" + babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" @@ -944,6 +1240,11 @@ bl@^1.0.0: readable-stream "^2.3.5" safe-buffer "^5.1.1" +blakejs@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5" + integrity sha1-ad+S75U6qIylGjLfarHFShVfx6U= + bluebird@^3.5.0: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -959,6 +1260,11 @@ bn.js@4.11.8, bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.10.0, bn.js@^4. resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== +bn.js@^5.1.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== + body-parser@1.19.0, body-parser@^1.16.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" @@ -993,7 +1299,7 @@ browser-stdout@1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.0.6: +browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.0.6, browserify-aes@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== @@ -1061,6 +1367,17 @@ browserslist@^3.2.6: caniuse-lite "^1.0.30000844" electron-to-chromium "^1.3.47" +browserslist@^4.14.5, browserslist@^4.16.4: + version "4.16.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.4.tgz#7ebf913487f40caf4637b892b268069951c35d58" + integrity sha512-d7rCxYV8I9kj41RH8UKYnvDYCRENUlHRgyXy/Rhr/1BaeLGfiCptEdFE8MIrvGfWbBFNjVYx76SQWvNX1j+/cQ== + dependencies: + caniuse-lite "^1.0.30001208" + colorette "^1.2.2" + electron-to-chromium "^1.3.712" + escalade "^3.1.1" + node-releases "^1.1.71" + bs58@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-2.0.1.tgz#55908d58f1982aba2008fa1bed8f91998a29bf8d" @@ -1082,6 +1399,11 @@ bs58check@^2.1.2: create-hash "^1.1.0" safe-buffer "^5.1.2" +btoa@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" + integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== + buffer-alloc-unsafe@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" @@ -1186,6 +1508,11 @@ caniuse-lite@^1.0.30000844: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001042.tgz#c91ec21ec2d270bd76dbc2ce261260c292b8c93c" integrity sha512-igMQ4dlqnf4tWv0xjaaE02op9AJ2oQzXKjWf4EuAHFN694Uo9/EfPVIPJcmn2WkU9RqozCxx5e2KPcVClHDbDw== +caniuse-lite@^1.0.30001208: + version "1.0.30001214" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001214.tgz#70f153c78223515c6d37a9fde6cd69250da9d872" + integrity sha512-O2/SCpuaU3eASWVaesQirZv1MSjUNOvmugaD8zNSJqw6Vv5SGwoOpA9LJs3pNPfM745nxqPvfZY3MQKY4AKHYg== + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -1214,7 +1541,7 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.1: +chalk@^2.0.0, chalk@^2.0.1: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1253,19 +1580,7 @@ circular@^1.0.5: resolved "https://registry.yarnpkg.com/circular/-/circular-1.0.5.tgz#7da77af98bbde9ce4b5b358cd556b5dded2d3149" integrity sha1-fad6+Yu96c5LWzWM1Va13e0tMUk= -cli-color@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-1.4.0.tgz#7d10738f48526824f8fe7da51857cb0f572fe01f" - integrity sha512-xu6RvQqqrWEo6MPR1eixqGPywhYBHRs653F9jfXB2Hx4jdM/3WxiNE1vppRmxtMIfl16SFYTpYlrnqH/HsK/2w== - dependencies: - ansi-regex "^2.1.1" - d "1" - es5-ext "^0.10.46" - es6-iterator "^2.0.3" - memoizee "^0.4.14" - timers-ext "^0.1.5" - -cli-logger@0.5.40: +cli-logger@^0.5.40: version "0.5.40" resolved "https://registry.yarnpkg.com/cli-logger/-/cli-logger-0.5.40.tgz#097f0e11b072c7c698a26c47f588a29c20b48b0b" integrity sha1-CX8OEbByx8aYomxH9YiinCC0iws= @@ -1301,7 +1616,7 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" -clone@2.1.2, clone@^2.0.0: +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= @@ -1326,6 +1641,11 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -1343,11 +1663,6 @@ commander@3.0.2: resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== -commander@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - commander@~2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" @@ -1404,6 +1719,14 @@ cookiejar@^2.1.1: resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== +core-js-compat@^3.9.1: + version "3.10.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.10.2.tgz#0a675b4e1cde599616322a72c8886bcf696f3ec3" + integrity sha512-IGHnpuaM1N++gLSPI1F1wu3WXICPxSyj/Q++clcwsIOnUVp5uKUIPl/+6h0TQ112KU3fMiSxqJuM+OrCyKj5+A== + dependencies: + browserslist "^4.16.4" + semver "7.0.0" + core-js-pure@^3.0.1: version "3.6.5" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" @@ -1446,7 +1769,7 @@ create-hash@^1.1.0, create-hash@^1.1.1, create-hash@^1.1.2, create-hash@^1.2.0: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -1512,12 +1835,12 @@ debug@3.2.6, debug@^3.1.0: dependencies: ms "^2.1.1" -debug@=3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== +debug@^4.1.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: - ms "2.0.0" + ms "2.1.2" debug@^4.1.1: version "4.1.1" @@ -1647,10 +1970,10 @@ defined@~1.0.0: resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= -delay@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/delay/-/delay-4.3.0.tgz#efeebfb8f545579cb396b3a722443ec96d14c50e" - integrity sha512-Lwaf3zVFDMBop1yDuFZ19F9WyGcZcGacsbdlZtWjQmM50tOcMntm1njF/Nb/Vjij3KaSvCF+sEYGKrrjObu2NA== +delay@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" + integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== delayed-stream@~1.0.0: version "1.0.0" @@ -1706,6 +2029,11 @@ dom-walk@^0.1.0: resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== +dotenv@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + dotignore@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" @@ -1745,6 +2073,11 @@ electron-to-chromium@^1.3.47: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.408.tgz#e6a3a2b8f87c875dfd6e16501abe7a28f079bbb3" integrity sha512-vn1zWIxIdyl0MR72lr81/7kHYTRlDRjJT4ocp8dtb85VhH46J3lNqDMEBljAKPKgguqjK0+WAbf3IL6ZKw72kQ== +electron-to-chromium@^1.3.712: + version "1.3.719" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.719.tgz#87166fee347a46a2557f19aadb40a1d68241e61c" + integrity sha512-heM78GKSqrIzO9Oz0/y22nTBN7bqSP1Pla2SyU9DiSnQD+Ea9SyyN5RWWlgqsqeBLNDkSlE9J9EHFmdMPzxB/g== + elliptic@6.3.3: version "6.3.3" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.3.3.tgz#5482d9646d54bcb89fd7d994fc9e2e9568876e3f" @@ -1836,7 +2169,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.45, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: +es5-ext@^0.10.35, 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== @@ -1845,7 +2178,7 @@ es5-ext@^0.10.35, es5-ext@^0.10.45, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@ es6-symbol "~3.1.3" next-tick "~1.0.0" -es6-iterator@^2.0.3, 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= @@ -1862,15 +2195,10 @@ es6-symbol@^3.1.1, es6-symbol@~3.1.3: d "^1.0.1" ext "^1.1.2" -es6-weak-map@^2.0.2: - 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" +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-html@~1.0.3: version "1.0.3" @@ -1910,6 +2238,18 @@ eth-block-tracker@^3.0.0: pify "^2.3.0" tape "^4.6.3" +eth-block-tracker@^4.4.2: + version "4.4.3" + resolved "https://registry.yarnpkg.com/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz#766a0a0eb4a52c867a28328e9ae21353812cf626" + integrity sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw== + dependencies: + "@babel/plugin-transform-runtime" "^7.5.5" + "@babel/runtime" "^7.5.5" + eth-query "^2.1.0" + json-rpc-random-id "^1.0.1" + pify "^3.0.0" + safe-event-emitter "^1.0.1" + eth-ens-namehash@2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" @@ -1918,6 +2258,20 @@ eth-ens-namehash@2.0.8: idna-uts46-hx "^2.3.1" js-sha3 "^0.5.7" +eth-json-rpc-errors@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/eth-json-rpc-errors/-/eth-json-rpc-errors-1.1.1.tgz#148377ef55155585981c21ff574a8937f9d6991f" + integrity sha512-WT5shJ5KfNqHi9jOZD+ID8I1kuYWNrigtZat7GOQkvwo99f8SzAVaEcWhJUv656WiZOAg3P1RiJQANtUmDmbIg== + dependencies: + fast-safe-stringify "^2.0.6" + +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" + eth-json-rpc-infura@^3.1.0: version "3.2.1" resolved "https://registry.yarnpkg.com/eth-json-rpc-infura/-/eth-json-rpc-infura-3.2.1.tgz#26702a821067862b72d979c016fd611502c6057f" @@ -1976,6 +2330,13 @@ 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-rpc-errors@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eth-rpc-errors/-/eth-rpc-errors-3.0.0.tgz#d7b22653c70dbf9defd4ef490fd08fe70608ca10" + integrity sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg== + dependencies: + fast-safe-stringify "^2.0.6" + eth-sig-util@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-2.3.0.tgz#c54a6ac8e8796f7e25f59cf436982a930e645231" @@ -2039,6 +2400,32 @@ ethereum-common@^0.0.18: resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.18.tgz#2fdc3576f232903358976eb39da783213ff9523f" integrity sha1-L9w1dvIykDNYl26znaeDIT/5Uj8= +ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereum-protocol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz#b7d68142f4105e0ae7b5e178cf42f8d4dc4b93cf" + integrity sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg== + ethereum-waffle@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-2.4.1.tgz#db13376d5d366a0b3e8813cb64956a4682cbe144" @@ -2065,7 +2452,7 @@ ethereumjs-abi@0.6.7: bn.js "^4.11.8" ethereumjs-util "^6.0.0" -"ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": +ethereumjs-abi@^0.6.8, "ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": version "0.6.8" resolved "git+https://github.com/ethereumjs/ethereumjs-abi.git#1cfbb13862f90f0b391d8a699544d5fe4dfb8c7b" dependencies: @@ -2141,7 +2528,7 @@ ethereumjs-tx@2.1.2, ethereumjs-tx@^2.1.1, ethereumjs-tx@^2.1.2: ethereumjs-common "^1.5.0" ethereumjs-util "^6.0.0" -ethereumjs-tx@^1.1.1, ethereumjs-tx@^1.2.0, ethereumjs-tx@^1.2.2, ethereumjs-tx@^1.3.3: +ethereumjs-tx@^1.0.0, ethereumjs-tx@^1.1.1, ethereumjs-tx@^1.2.0, ethereumjs-tx@^1.2.2, ethereumjs-tx@^1.3.3, ethereumjs-tx@^1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz#88323a2d875b10549b8347e09f4862b546f3d89a" integrity sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA== @@ -2186,6 +2573,31 @@ ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereum safe-buffer "^5.1.1" secp256k1 "^3.0.1" +ethereumjs-util@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethereumjs-util@^7.0.2: + version "7.0.10" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.0.10.tgz#5fb7b69fa1fda0acc59634cf39d6b0291180fc1f" + integrity sha512-c/xThw6A+EAnej5Xk5kOzFzyoSnw0WX0tSlZ6pAsfGVvQj3TItaDg9b1+Fz1RJXA+y2YksKwQnuzgt1eY6LKzw== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.4" + ethereumjs-util@~6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz#e9c51e5549e8ebd757a339cc00f5380507e799c8" @@ -2252,6 +2664,20 @@ ethereumjs-wallet@0.6.3: utf8 "^3.0.0" uuid "^3.3.2" +ethereumjs-wallet@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-1.0.1.tgz#664a4bcacfc1291ca2703de066df1178938dba1c" + integrity sha512-3Z5g1hG1das0JWU6cQ9HWWTY2nt9nXCcwj7eXVNAHKbo00XAZO8+NHlwdgXDWrL0SXVQMvTWN8Q/82DRH/JhPw== + dependencies: + aes-js "^3.1.1" + bs58check "^2.1.2" + ethereum-cryptography "^0.1.3" + ethereumjs-util "^7.0.2" + randombytes "^2.0.6" + scrypt-js "^3.0.1" + utf8 "^3.0.0" + uuid "^3.3.2" + ethers@4.0.0-beta.3: version "4.0.0-beta.3" resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.0-beta.3.tgz#15bef14e57e94ecbeb7f9b39dd0a4bd435bc9066" @@ -2299,14 +2725,6 @@ ethjs-util@0.1.6, ethjs-util@^0.1.3: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" -event-emitter@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= - dependencies: - d "1" - es5-ext "~0.10.14" - eventemitter3@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" @@ -2400,6 +2818,11 @@ fast-json-stable-stringify@^2.0.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-safe-stringify@^2.0.6: + version "2.0.7" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" + integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== + fd-slicer@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" @@ -2466,12 +2889,10 @@ flow-stoplight@^1.0.0: resolved "https://registry.yarnpkg.com/flow-stoplight/-/flow-stoplight-1.0.0.tgz#4a292c5bcff8b39fa6cc0cb1a853d86f27eeff7b" integrity sha1-SiksW8/4s5+mzAyxqFPYbyfu/3s= -follow-redirects@1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== - dependencies: - debug "=3.1.0" +follow-redirects@^1.10.0: + version "1.13.3" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267" + integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA== for-each@~0.3.3: version "0.3.3" @@ -2538,15 +2959,6 @@ fs-extra@^4.0.2: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^8.0.1: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-minipass@^1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" @@ -2659,7 +3071,7 @@ glob@7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.2, glob@^7.1.3, glob@~7.1.6: +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== @@ -2679,6 +3091,11 @@ global@~4.3.0: min-document "^2.19.0" process "~0.5.1" +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -2726,11 +3143,6 @@ graceful-fs@^4.1.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== -graceful-fs@^4.2.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - "graceful-readlink@>= 1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" @@ -2806,7 +3218,7 @@ hash.js@1.1.3: inherits "^2.0.3" minimalistic-assert "^1.0.0" -hash.js@^1.0.0, hash.js@^1.0.3: +hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== @@ -2965,6 +3377,13 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.1.5: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== +is-core-module@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + is-date-object@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" @@ -3010,11 +3429,6 @@ 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-promise@^2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" - integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== - 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" @@ -3092,7 +3506,7 @@ js-sha3@^0.6.1: resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.6.1.tgz#5b89f77a7477679877f58c4a075240934b1f95c0" integrity sha1-W4n3enR3Z5h39YxKB1JAk0sflcA= -"js-tokens@^3.0.0 || ^4.0.0": +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== @@ -3120,6 +3534,11 @@ jsesc@^1.3.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" @@ -3142,6 +3561,14 @@ json-rpc-engine@^3.4.0, json-rpc-engine@^3.6.0: promise-to-callback "^1.0.0" safe-event-emitter "^1.0.1" +json-rpc-engine@^5.1.3: + version "5.4.0" + resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz#75758609d849e1dba1e09021ae473f3ab63161e5" + integrity sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g== + dependencies: + eth-rpc-errors "^3.0.0" + safe-event-emitter "^1.0.1" + json-rpc-error@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/json-rpc-error/-/json-rpc-error-2.0.0.tgz#a7af9c202838b5e905c7250e547f1aff77258a02" @@ -3149,7 +3576,7 @@ json-rpc-error@^2.0.0: dependencies: inherits "^2.0.1" -json-rpc-random-id@^1.0.0: +json-rpc-random-id@^1.0.0, json-rpc-random-id@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz#ba49d96aded1444dbb8da3d203748acbbcdec8c8" integrity sha1-uknZat7RRE27jaPSA3SKy7zeyMg= @@ -3230,6 +3657,14 @@ keccak@^2.0.0: nan "^2.14.0" safe-buffer "^5.2.0" +keccak@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" + integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + keccakjs@^0.2.0: version "0.2.3" resolved "https://registry.yarnpkg.com/keccakjs/-/keccakjs-0.2.3.tgz#5e4e969ce39689a3861f445d7752ee3477f9fe72" @@ -3389,6 +3824,16 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + +lodash.flatmap@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz#ef8cbf408f6e48268663345305c6acc0b778702e" + integrity sha1-74y/QI9uSCaGYzRTBcaswLd4cC4= + lodash@4.17.14: version "4.17.14" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" @@ -3447,13 +3892,6 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -lru-queue@0.1: - version "0.1.0" - resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" - integrity sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM= - dependencies: - es5-ext "~0.10.2" - ltgt@^2.1.2, ltgt@~2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" @@ -3514,20 +3952,6 @@ memdown@~3.0.0: ltgt "~2.2.0" safe-buffer "~5.1.1" -memoizee@^0.4.14: - version "0.4.14" - resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.14.tgz#07a00f204699f9a95c2d9e77218271c7cd610d57" - integrity sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg== - dependencies: - d "1" - es5-ext "^0.10.45" - es6-weak-map "^2.0.2" - event-emitter "^0.3.5" - is-promise "^2.1" - lru-queue "0.1" - next-tick "1" - timers-ext "^0.1.5" - memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" @@ -3706,7 +4130,7 @@ ms@2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -ms@^2.1.1: +ms@2.1.2, ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== @@ -3736,16 +4160,16 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -next-tick@1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - next-tick@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + node-environment-flags@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" @@ -3772,11 +4196,21 @@ node-fetch@~1.7.1: encoding "^0.1.11" is-stream "^1.0.1" +node-gyp-build@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" + integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg== + node-gyp-build@~3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-3.7.0.tgz#daa77a4f547b9aed3e2aac779eaf151afd60ec8d" integrity sha512-L/Eg02Epx6Si2NXmedx+Okg+4UHqmaf3TNcxd50SF9NQGcJaON3AtU++kax69XV7YWz4tUspqZSAsVofhFKG2w== +node-releases@^1.1.71: + version "1.1.71" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" + integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== + normalize-url@^4.1.0: version "4.5.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" @@ -3965,6 +4399,17 @@ pathval@^1.1.0: resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA= +pbkdf2@^3.0.17: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + pbkdf2@^3.0.3, pbkdf2@^3.0.9: version "3.0.17" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" @@ -4181,6 +4626,11 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +querystring@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" + integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== + randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.0.6, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -4259,6 +4709,11 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== +regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" @@ -4345,6 +4800,14 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +resolve@^1.14.2: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + resolve@~1.15.1: version "1.15.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" @@ -4395,6 +4858,13 @@ rlp@^2.0.0, rlp@^2.2.1, rlp@^2.2.2, rlp@^2.2.3: dependencies: bn.js "^4.11.1" +rlp@^2.2.4: + version "2.2.6" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.6.tgz#c80ba6266ac7a483ef1e69e8e2f056656de2fb2c" + integrity sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg== + dependencies: + bn.js "^4.11.1" + rustbn.js@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" @@ -4432,6 +4902,11 @@ scrypt-js@2.0.4: resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== +scrypt-js@^3.0.0, scrypt-js@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + scrypt.js@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/scrypt.js/-/scrypt.js-0.3.0.tgz#6c62d61728ad533c8c376a2e5e3e86d41a95c4c0" @@ -4474,6 +4949,15 @@ secp256k1@^3.0.1: nan "^2.14.0" safe-buffer "^5.1.2" +secp256k1@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.2.tgz#15dd57d0f0b9fdb54ac1fa1694f40e5e9a54f4a1" + integrity sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg== + dependencies: + elliptic "^6.5.2" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + seedrandom@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.1.tgz#eb3dde015bcf55df05a233514e5df44ef9dce083" @@ -4496,12 +4980,17 @@ semver@6.2.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db" integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A== +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + semver@^5.3.0, semver@^5.5.0, semver@^5.7.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.3.0: +semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -4610,19 +5099,6 @@ slash@^1.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= -sol-merger@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/sol-merger/-/sol-merger-3.1.0.tgz#547b282a616d106c0fa8869e0a275fd7db0213d8" - integrity sha512-4/JELeFlB8bcyqttRZ7pE/EGpevft9Q7IPjMaKLKMrj1exmdyt+1qSfuSXxueFXRZQxSd21u6DjEedDkOtQ5yQ== - dependencies: - antlr4ts "^0.5.0-alpha.3" - cli-color "^1.4.0" - commander "^4.0.1" - debug "^4.1.1" - fs-extra "^8.0.1" - glob "^7.1.2" - strip-json-comments "^3.0.1" - solc@0.6.6, solc@^0.6.3: version "0.6.6" resolved "https://registry.yarnpkg.com/solc/-/solc-0.6.6.tgz#0d4b9c2e7105dd6015583f5e1c5ba6a35861ea71" @@ -4660,7 +5136,7 @@ source-map-support@^0.5.6: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.5.6, source-map@^0.5.7: +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -4820,11 +5296,6 @@ strip-json-comments@2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -strip-json-comments@^3.0.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - supports-color@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" @@ -4927,14 +5398,6 @@ timed-out@^4.0.0, timed-out@^4.0.1: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= -timers-ext@^0.1.5: - version "0.1.7" - resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6" - integrity sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ== - dependencies: - es5-ext "~0.10.46" - next-tick "1" - tmp@0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -4959,6 +5422,11 @@ to-fast-properties@^1.0.3: resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + to-readable-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" @@ -4992,16 +5460,15 @@ truffle-hdwallet-provider@^1.0.17: web3 "1.2.1" websocket "^1.0.28" -truffle-plugin-verify@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/truffle-plugin-verify/-/truffle-plugin-verify-0.4.0.tgz#5e93bc8fd8f07b2554d320c20811938e40dc1de9" - integrity sha512-wI6J8vB6DZYyqTouMCayGWwTqy5VZwLaZ/vGjRjtt1MdXDzfyeGw5UHJujjFQYU1hCDYt/0LmAVmBkWg9MBWmA== +truffle-plugin-verify@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/truffle-plugin-verify/-/truffle-plugin-verify-0.5.7.tgz#c684c0a78a0dad8bf00c631ba1ac41c53a7b5040" + integrity sha512-q26VTkrpzI0lS8D1j8nKG2+2cmTwc7rkDkdtvbWKAdUV+5Ijemgeo8PeQBNKKFsTqYo1ebG7IWTLE+B/7KFo1A== dependencies: - axios "0.19.2" - cli-logger "0.5.40" - delay "4.3.0" - querystring "0.2.0" - sol-merger "3.1.0" + axios "^0.21.1" + cli-logger "^0.5.40" + delay "^5.0.0" + querystring "^0.2.1" ts-node@^8.5.4: version "8.6.2"