Pancake中本地计算资产对的合约地址

// calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash
            ))));
    }

代码如上,其中CREATE2是solidity的一个操作码,这个操作码允许我们在不与链做任何交互的情况下获取到合约的地址

第一个参数为0xFF,固定的

第二个参数为部署你要计算的合约的eth地址

第三个是salt,为两个token的排序后的hash

第四个是Init code hash

前三个好理解,下面主要讲第四个参数怎么来的。

const { bytecode } = require('@uniswap/v2-core/build/UniswapV2Pair.json');
const { keccak256 } = require('@ethersproject/solidity');

const COMPUTED_INIT_CODE_HASH = keccak256(['bytes'], [`0x${bytecode}`])
console.log(COMPUTED_INIT_CODE_HASH);

Pancake直接根据两个资产的地址获取Pair地址

猜你喜欢

转载自blog.csdn.net/bbandxq521/article/details/128908883