首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >create2函数是如何工作的?

create2函数是如何工作的?
EN

Stack Overflow用户
提问于 2022-02-15 05:14:19
回答 1查看 463关注 0票数 4

我正在浏览uniswap代码,试图理解这些代码,其中大部分都很清楚,但我确实有几个问题。

在这项职能中:

代码语言: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);

这是装配线。根据solidity,这将部署一个新的契约,但我不明白它是如何工作的,它从哪里获得代码等等。

那么,是否有可能以某种方式将其“转化”为“坚实”呢?非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-15 09:15:52

它使用create2操作码,允许您将契约部署到可由字节码和salt确定的地址。

Uniswap V2是在Solity0.5中编写的,它没有办法直接从语言中生成create2操作码。所以你必须使用低水平的密码才能真正使用这个操作码。

当前版本0.8允许传递salt参数,生成create2 (而不是常规create)操作码。

代码语言:javascript
复制
pragma solidity ^0.8;

contract UniswapV2Pair {
}

contract MyContract {
    function createPair() external {
        bytes32 salt = 0x1234567890123456789012345678901234567890123456789012345678901234;
        address pair = address(
            new UniswapV2Pair{salt: salt}()
        );
    }
}

Uniswap使用对令牌地址的组合作为salt,字节码始终是相同的。这实际上允许为每个唯一的对组合部署一个契约。

示例:

0xabc.

  • But总是会导致
  • 令牌0x1230x456协议地址UniswapV2Pair,一旦您更改了salt,它就会更改已部署的契约地址。因此,令牌0x1230x789总是会产生UniswapV2Pair契约地址UniswapV2Pair
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71121396

复制
相关文章

相似问题

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