* 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>
47 lines
1.5 KiB
Solidity
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);
|
|
}
|
|
}
|