如何在 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,编译其余合约
我找到了解决方案
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);
我要在我定制的以太坊上部署 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,编译其余合约
我找到了解决方案
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);