首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用汇编和create2在Uniswap中实例化智能契约

使用汇编和create2在Uniswap中实例化智能契约
EN

Ethereum用户
提问于 2021-01-19 07:37:33
回答 2查看 1.7K关注 0票数 5

我正在学习Uniswap源代码,在这个文件中有一些东西我不明白:

https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2Factory.sol

这个工厂可以创建新的对(createPair函数):

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

对我来说,这四行做的事情和:

代码语言:javascript
复制
pair = new UniswapV2Pair()

我不明白他们想用这4行代码做什么。你知不知道?

非常感谢

EN

回答 2

Ethereum用户

回答已采纳

发布于 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

票数 8
EN

Ethereum用户

发布于 2022-04-13 21:31:07

Create2过去有能力获得对地址,没有任何在线请求,以节省汽油等.

由于工厂里的一些花哨的步法,我们也可以计算成对地址,而不需要任何链上查找,因为有CREATE2。此技术需要以下值

详细信息:https://docs.uniswap.org/protocol/V2/guides/smart-contract-integration/getting-pair-addresses

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/92491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档