// 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()返回不同的两个地址。
我如何创建对和预得到对的地址?
发布于 2022-03-15 17:37:31
address pair = address(uint(keccak256(abi.encodePacked(
hex'ff',
factory,
keccak256(abi.encodePacked(token0, token1)),
keccak256(type(UniswapV2Pair).creationCode)
// hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f'
))));请像这样更新代码。
https://ethereum.stackexchange.com/questions/123864
复制相似问题