// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
contract Pair {
address public factory; // 合约工厂地址
address public token0; // 代币1
address public token1; // 代币2
constructor() {
factory = msg.sender;
}
function initialize(address _token0, address _token1) external {
require(msg.sender == factory, 'UniswapV2: FORBIDDEN');
token0 = _token0;
token1 = _token1;
}
}
contract PairFactory {
mapping(address => mapping(address => address)) public getPair; // 通过两个代币地址查Pair地址
address[] public allPairs; // 保存所有pair地址
function createPair(address tokenA, address tokenB) external returns(address pairAddr){
// 创建新合约
Pair pair = new Pair();
pair.initialize(tokenA, tokenB);
// 更新地址map
pairAddr = address(pair);
allPairs.push(pairAddr);
getPair[tokenA][tokenB] = pairAddr;
getPair[tokenB][tokenA] = pairAddr;
}
}