首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何预计算已部署的合同地址

如何预计算已部署的合同地址
EN

Ethereum用户
提问于 2022-03-15 07:56:22
回答 1查看 1.5K关注 0票数 2
代码语言:javascript
复制
// SPDX-License-Identifier: MIT
pragma solidity ^0.5.16;

import "https://github.com/Uniswap/v2-core/blob/master/contracts/UniswapV2Pair.sol";
contract TestERC20 {

    address public _pair = address(0);
    constructor() public {
        
    }

    function getPreAddress() public view returns (
        address, address
    ) {
      address factory = address(this);
      address token0 = 0xCAFE000000000000000000000000000000000000; // change me!
      address token1 = 0xF00D000000000000000000000000000000000000; // change me!

      address pair = address(uint(keccak256(abi.encodePacked(
        hex'ff',
        factory,
        keccak256(abi.encodePacked(token0, token1)),
        hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f'
      ))));      
      return (pair, _pair);
  }

  function createPair() public {
      require(_pair == address(0), 'Pair already created');
      address token0 = 0xCAFE000000000000000000000000000000000000; // change me!
      address token1 = 0xF00D000000000000000000000000000000000000; // change me!
      bytes memory bytecode = type(UniswapV2Pair).creationCode;
      bytes32 salt = keccak256(abi.encodePacked(token0, token1));
      address dep;
      assembly {
            dep := create2(0, add(bytecode, 32), mload(bytecode), salt)
        }
      _pair = dep;
  }
}

我试图部署UniswapV2Pair契约,并比较计算的地址和部署的地址。

不幸的是,两个地址是不同的。

通过createPair()创建对后,getPreAddress()返回不同的两个地址。

我如何创建对和预得到对的地址?

EN

回答 1

Ethereum用户

回答已采纳

发布于 2022-03-15 17:37:31

代码语言:javascript
复制
 address pair = address(uint(keccak256(abi.encodePacked(
        hex'ff',
        factory,
        keccak256(abi.encodePacked(token0, token1)),
        keccak256(type(UniswapV2Pair).creationCode)
        // hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f'
      ))));

请像这样更新代码。

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

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

复制
相关文章

相似问题

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