【Solidity学习笔记】在合约中创建合约

// 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;
    }
}

猜你喜欢

转载自blog.csdn.net/qq2942713658/article/details/129629342