protocol/contracts/zero-ex/contracts/test/TestUniswapV3Factory.sol
Lawrence Forman 901d400d62
Address spot check feedback (#251)
* UniswapV3 VIP (#237)

* `@0x/contracts-zero-ex`: Add UniswapV3Feature

* `@0x/contracts-zero-ex`: Add UniswapV3 VIP
`@0x/contract-artifacts`: Regenerate.
`@0x/contract-wrappers`: Regenerate.
`@0x/asset-swapper`: Add UniswapV3 VIP support.

* address review comments and appease linter

* `@0x/contracts-zero-ex`: Add UniswapV3Feature tests

* Multiplex UniswapV3 (#241)

* Add UniswapV3 support to Multiplex batchFill

* Add AssetSwapper support for Multiplex UniswapV3

* fix repo scripts that use PKG= env var (#242)

Co-authored-by: Lawrence Forman <me@merklejerk.com>

* `@0x/asset-swapper`: Adjust uniswap gas overhead

Co-authored-by: Lawrence Forman <me@merklejerk.com>
Co-authored-by: mzhu25 <mchl.zhu.96@gmail.com>

* OTC orders feature (#244)

* Add OTC orders feature contracts

* Address PR feedback

* Remove partial fills for takerSigned variant

* Add function to query the min valid nonce

* Add ETH support

* Tightly pack expiry, nonceBucket, and nonce

* Address PR feedback

* OTC orders unit tests

* Bump prettier version

* Skip unnecessary math if takerTokenFillAmount == order.takerAmount

* appease CI

* Update contract-artifacts and contract-wrappers and CHANGELOGs

* `@0x/contracts-zero-ex`: Address spot check feedback

* `regen wrappers

* prettier

* `@0x/asset-swapper`: prettier and tweak gas schedule slightly for uni3

Co-authored-by: Lawrence Forman <me@merklejerk.com>
Co-authored-by: mzhu25 <mchl.zhu.96@gmail.com>
2021-06-02 14:21:14 +10:00

47 lines
1.5 KiB
Solidity

// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.6;
pragma experimental ABIEncoderV2;
import "@0x/contracts-erc20/contracts/src/v06/IERC20TokenV06.sol";
import "./TestUniswapV3Pool.sol";
contract TestUniswapV3Factory {
struct CreationParameters {
IERC20TokenV06 token0;
IERC20TokenV06 token1;
uint24 fee;
}
event PoolCreated(TestUniswapV3Pool pool);
bytes32 public immutable POOL_INIT_CODE_HASH;
mapping (IERC20TokenV06 => mapping (IERC20TokenV06 => mapping (uint24 => TestUniswapV3Pool))) public getPool;
CreationParameters public creationParameters;
constructor() public {
POOL_INIT_CODE_HASH = keccak256(type(TestUniswapV3Pool).creationCode);
}
function createPool(IERC20TokenV06 tokenA, IERC20TokenV06 tokenB, uint24 fee)
external
returns (TestUniswapV3Pool pool)
{
(IERC20TokenV06 token0, IERC20TokenV06 token1) = tokenA < tokenB
? (tokenA, tokenB)
: (tokenB, tokenA);
require(
getPool[token0][token1][fee] == TestUniswapV3Pool(0),
"TestUniswapV3Factory/POOL_ALREADY_EXISTS"
);
creationParameters = CreationParameters({
token0: token0,
token1: token1,
fee: fee
});
pool = new TestUniswapV3Pool
{ salt: keccak256(abi.encode(token0, token1, fee)) }();
getPool[token0][token1][fee] = pool;
getPool[token1][token0][fee] = pool;
emit PoolCreated(pool);
}
}