我正在学习Uniswap源代码,在这个文件中有一些东西我不明白:
https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2Factory.sol:
这个工厂可以创建新的对(createPair函数):
bytes memory bytecode = type(UniswapV2Pair).creationCode;
bytes32 salt = keccak256(abi.encodePacked(token0, token1));
assembly {
pair := create2(0, add(bytecode, 32), mload(bytecode), salt)
}对我来说,这四行做的事情和:
pair = new UniswapV2Pair()我不明白他们想用这4行代码做什么。你知不知道?
非常感谢
发布于 2021-01-19 07:58:42
您展示的行使用的是新的CREATE2操作码,而不是常规的CREATE操作码(将通过使用pair = new UniswapV2Pair()来调用)。
使用CREATE2的好处是契约地址不依赖于当前事务,而是依赖于其他不会自动更改的值。这样,地址就可以预先确定。
预定地址的主要优点之一是,只有在需要的情况下才需要创建合同--尤其是对于第二层争议而言,只有在出现争议并需要通过合同解决合同的情况下才实际创建合同。这样我们就可以节省煤气费。
在Uniswap的情况下,使用CREATE2可以在不进行链上查找的情况下确定任何对的地址。https://docs.uniswap.org/protocol/V2/guides/smart-contract-integration/getting-pair-addresses
在新版本中,不需要程序集,但是可以直接从纯实体调用CREATE2。以下是更多信息:https://docs.openzeppelin.com/cli/2.8/deploying-with-create2
发布于 2022-04-13 21:31:07
Create2过去有能力获得对地址,没有任何在线请求,以节省汽油等.
由于工厂里的一些花哨的步法,我们也可以计算成对地址,而不需要任何链上查找,因为有CREATE2。此技术需要以下值
详细信息:https://docs.uniswap.org/protocol/V2/guides/smart-contract-integration/getting-pair-addresses
https://ethereum.stackexchange.com/questions/92491
复制相似问题