如何在 UniswapV2Factory 中创建无需组装的货币对

How to create the pair without assembly in UniswapV2Factory

我要在我定制的以太坊上部署 Uniswap 合约。

我可以用 Solidity 代码替换 fancy footwork in the factory 吗?

我需要将此代码 assembly { pair := create2(0, add(bytecode, 32), mload(bytecode), salt)} 更新为通用的 solidity 代码。

我尝试了 this,但效果不佳。

Uniswap 版本 1 使用带有硬编码对合约地址的库合约。

  • 首先部署工厂合约
  • 然后调用Factory.pairCodeHash - 初始化代码的硬编码十六进制字符串
  • 替换源代码中的pair code hash,编译其余合约

More tips in this Python module.

我找到了解决方案

bytes memory bytecode = type(UniswapV2Pair).creationCode;
bytes32 salt = keccak256(abi.encodePacked(token0, token1));
assembly {
  pair := create2(0, add(bytecode, 32), mload(bytecode), salt)
}

我将上面的代码更新为

UniswapV2Pair newPair = new UniswapV2Pair();
IUniswapV2Pair(pair).initialize(token0, token1);