// 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
前三个好理解,下面主要讲第四个参数怎么来的。