Solidity——Create2

这篇具有很好参考价值的文章主要介绍了Solidity——Create2。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Solidity——Create2

介绍

君士坦丁堡硬升级中引入了一个新操作码 CREATE2 ,它使用新的方式来计算常见的合约地址,让生成的合约地址更具有可控性。

具体内容

在 CREATE2 以前,CREATE指令创建的合约地址是通通过交易发起者(sender)的地址以及交易序号(nonce)来计算确定的。sender 和 nonce 进行 RLP 编码,然后用 Keccak-256 进行 hash 计算(伪码):

keccak256(rlp([sender, nonce]))

而 CREATE2 指令则主要是根据创建合约的初始化代码(init_code)及盐(slat) 生成(伪码):

一般而言init_code==bytecode,就是编译生成的字节码,借此让地址变成了对合约代码的验证

keccak256(0xff + sender + salt + keccak256(init_code))

使用

  • create2部署
pool = address(new UniswapV3Pool{salt: keccak256(abi.encode(token0, token1, fee))}());
  • 依据bytecode计算合约地址:
    function computeAddress(address factory, PoolKey memory key) internal pure returns (address pool) {
        require(key.token0 < key.token1);
        pool = address(
            uint256(
                keccak256(
                    abi.encodePacked(
                        hex'ff',
                        factory,
                        keccak256(abi.encode(key.token0, key.token1, key.fee)),
                        POOL_INIT_CODE_HASH
                    )
                )
            )
        );

优点

  • 可以在链下计算出已经创建的交易池的地址

  • 其他合约不必通过 UniswapV3Factory 中的接口来查询交易池的地址,可以节省 gas

  • 合约地址不会因为reorg (区块重组、分叉) 而改变

  • 如果一个合约自毁了,那么新合约未来可以再次部署到这个地址上

  • 在未部署前可以提前获取合约地址文章来源地址https://www.toymoban.com/news/detail-792914.html

到了这里,关于Solidity——Create2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【区块链 | Solidity】跟我学 Solidity(7):事件

    如何使用事件记录数据 原文: https://medium.com/better-programming/learn-solidity-events-2801d6a99a92 作者: wissal haji 欢迎订阅《Solidity智能合约零基础开发教程专栏》系列文章。 在今天的文章中,我们将看到如何使用web3.js从区块链中读取事件。 Solidity中的事件就像你习惯于使用其他语

    2024年01月25日
    浏览(43)
  • 【Solidity】Solidity Keccak256 与 SHA3-256

    Solidity Keccak256 与 SHA3-256 区块链的造富神话大家一定都有所耳闻,今天我们讨论以太坊中一项基础技术,主打一个一学就会。 看过以太坊源码或者对区块链有了解的的同学,一定都见过一个哈希算法 Keccak256 。 Keccak256 可以称它是以太坊中第一函数。 那 Keccak256 和 SHA3-256 有什

    2024年02月07日
    浏览(53)
  • solidity函数签名的实现-solidity实现智能合约教程(8)

    猛戳订阅学习专栏🍁🍁 👉 solidity系列合约源码+解析 👈 🍁🍁 函数选择器: solidity调用函数时,calldata的前4个字节为指定要调用的函数,这4个字节称为函数选择器。 以下面的代码为例。它通过地址addr的调用合约的transfer方法。 abi.encodeWithSignature(…)返回的前4个字节是函数

    2024年02月16日
    浏览(40)
  • 【区块链 | Solidity】Solidity开发教程:用Web3.js构建第一个Dapp

    Web3.js 使用的实用介绍 原文 作者:wissal haji 欢迎订阅《Solidity智能合约零基础开发教程专栏》系列文章。 如果你一直在跟着这个系列学习,那么你已经掌握了编写自己的智能合约。 因此,今天给大家介绍一下构建去中心化应用的全貌,并向大家介绍一下web3.js,这是构建da

    2024年01月24日
    浏览(43)
  • 【solidity三】Solidity中继承、创建合约和外部调用、合约事件event、solidity中元祖的使用、new、delete关键字的使用、solisity创建合约和外部调用

    - 最重要的两个全局变量 msg.sender 每一次和以太坊交互时都会产生一笔交易,这笔交易的执行人就是msg.sender。简而言之:谁调用的,msg.sender就是谁,每笔交易的msg.sender都可以不同。举例: 部署合约的时候,msg.sender就是部署的账户。 调用setMessage时,msg.sender就是调用账户。

    2024年02月03日
    浏览(35)
  • solidity的require用法

    require  函数用于确认条件有效性,例如输入变量,或合约状态变量是否满足条件,或验证外部合约调用返回的值 有两个参数:         第一个参数为条件判断表达式,必选         第二个参数为要返回的异常消息提醒,可选 如下面例子:   require(msg.value % 2 == 0\\\"); 不带第二

    2024年02月11日
    浏览(31)
  • Solidity数据类型

    Solidity 是一种静态类型语言,这意味着每个变量(状态变量和局部变量)都需要在编译时指定变量的类型。 Solidity 提供了几种基本类型,并且基本类型可以用来组合出复杂类型。 除此之外,类型之间可以在包含运算符号的表达式中进行交互。 “​ ​undefined​ ​​”或“​

    2023年04月15日
    浏览(36)
  • 什么是Solidity?

    Solidity 是一种用于编写智能合约的高级编程语言,主要用于以太坊区块链平台。它由以太坊基金会的 Gavin Wood 等人设计和开发,支持面向对象、面向协议和函数式编程范式。Solidity 的语法类似于 JavaScript 和 C++,但也有着自己独特的特征,如可变性、可见性和事件等。Solidity

    2024年04月09日
    浏览(31)
  • Solidity Storage底层管理

    前序博客有: Ethereum EVM简介 揭秘EVM Opcodes 剖析Solidity合约创建EVM bytecode Solidity底层通过SLOAD和SSTORE opcode来控制EVM storage。 Storage为每个合约的持久mapping,具有 2 256 − 1 2^{256}-1 2 256 − 1 个32 byte words。当在合约中设置某状态变量值时,其会存储在指定的slot中,其将持续在EVM中,

    2024年01月21日
    浏览(26)
  • solidity库的使用

    一、什么是库 特殊的合约,可以像合约一样进行部署,但是没有状态变量、不能存以太币 可重用 部署一次,在不同合约内反复使用 节约gas,相同功能的代码不用反复部署 1.定义库、使用库 library mathlib{ plus(); } contract C{ mathlib.plus(); } 库函数使用委托的方式调用delegateCall,库

    2023年04月08日
    浏览(18)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包