UNPKG

@animoca/ethereum-contracts-sale

Version:
97 lines (76 loc) 2.72 kB
const {artifacts, web3} = require('hardhat'); const UniswapV2Factory = artifacts.require('UniswapV2Factory'); const UniswapV2Router = artifacts.require('UniswapV2Router02'); const RouterEventEmitter = artifacts.require('RouterEventEmitter'); const IUniswapV2Pair = artifacts.require('node_modules/@uniswap/v2-core/build:IUniswapV2Pair'); let _fixture; // Arguments: // // const tokens = { // <token_key>: { // abstraction: <contract_artifact>, // supply: <total_token_supply>}, // ... // }; // // const tokenPairs = { // <token_pair_key>: ['<token_key_0>', '<token_key_1>'], // ... // }; // // Returns: // // <Promise> that returns the data resulting from loading the UniswapV2 // fixture. // function get(tokens, tokenPairs) { if (!_fixture) { _fixture = async ([owner], provider) => { const registry = await artifacts.require('ForwarderRegistry').new(); const forwarder = await artifacts.require('UniversalForwarder').new(); for (const [key, data] of Object.entries(tokens)) { if (key == 'WETH') { data.contract = await data.abstraction.new({from: owner}); } else { // ERC20 Mock data.contract = await data.abstraction.new([owner], [data.supply], registry.address, forwarder.address, {from: owner}); } } const factory = await UniswapV2Factory.new(owner, {from: owner}); const router = await UniswapV2Router.new(factory.address, tokens['WETH'].contract.address, {from: owner}); const routerEventEmitter = await RouterEventEmitter.new({from: owner}); const pairs = {}; for (const [key, tokenKeys] of Object.entries(tokenPairs)) { const token0 = tokens[tokenKeys[0]].contract; const token1 = tokens[tokenKeys[1]].contract; await factory.createPair(token0.address, token1.address, {from: owner}); const pairAddress = await factory.getPair(token0.address, token1.address, {from: owner}); const pair = new web3.eth.Contract(IUniswapV2Pair.abi, pairAddress, {from: owner}); const token0Address = await pair.methods.token0().call({from: owner}); const pairData = {contract: pair}; if (token0.address == token0Address) { pairData.token0 = token0; pairData.token1 = token1; } else { pairData.token0 = token1; pairData.token1 = token0; } pairs[key] = pairData; } return { factory, router, routerEventEmitter, pairs, }; }; } return _fixture; } function reset() { _fixture = undefined; } module.exports = { get, reset, };