首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不导入代码的情况下,Uniswap实例ERC20令牌如何实现?

在不导入代码的情况下,Uniswap实例ERC20令牌如何实现?
EN

Ethereum用户
提问于 2021-03-17 20:09:15
回答 1查看 117关注 0票数 2

我正在检查Uniswap承包github回购公司,我不明白它们如何在不导入代码或拥有ERC20令牌智能契约地址的情况下动态使用任何ERC20令牌。

我知道魔术在这个函数中,特别是在程序集create2函数中,但是不能正确地理解它。

代码语言:javascript
复制
function createPair(address tokenA, address tokenB) external returns (address pair) {
    require(tokenA != tokenB, 'UniswapV2: IDENTICAL_ADDRESSES');
    (address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
    require(token0 != address(0), 'UniswapV2: ZERO_ADDRESS');
    require(getPair[token0][token1] == address(0), 'UniswapV2: PAIR_EXISTS'); // single check is sufficient
    bytes memory bytecode = type(UniswapV2Pair).creationCode;
    bytes32 salt = keccak256(abi.encodePacked(token0, token1));
    assembly {
        pair := create2(0, add(bytecode, 32), mload(bytecode), salt)
    }
    IUniswapV2Pair(pair).initialize(token0, token1);
    getPair[token0][token1] = pair;
    getPair[token1][token0] = pair; // populate mapping in the reverse direction
    allPairs.push(pair);
    emit PairCreated(token0, token1, pair, allPairs.length);
}

有人能提供进一步的信息吗?

EN

回答 1

Ethereum用户

发布于 2021-03-17 23:26:19

createPair以两个ERC20契约地址作为输入,并返回此对的地址。此地址是使用CREATE2 2操作码确定计算的。因此,所有信息本身都是可用的,不需要硬编码地址。getPair被动态填充成对地址。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/94814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档