首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实心汇编代码create2函数

实心汇编代码create2函数
EN

Ethereum用户
提问于 2022-10-27 06:25:24
回答 2查看 221关注 0票数 1

我是刚接触到稳健的,你能解释一下create2函数吗?

代码语言:javascript
复制
assembly {
    pair := create2(0, add(bytecode, 32), mload(bytecode), salt)
}
EN

回答 2

Ethereum用户

发布于 2022-10-27 15:19:00

create2是一个操作码,包含4个堆栈参数: memory_start、memory_length、salt。行为与创建(0xf0)相同,除非使用keccak256( 0xff ++ address ++ salt ++ keccak256(init_code))12:,而不是通常的发送方和非本地散列作为协议初始化的地址。

换句话说: CREATE2操作码使我们能够预测将部署契约的地址,而不必这样做。

票数 1
EN

Ethereum用户

发布于 2023-02-17 22:11:39

  • 0是发送到正在部署的合同的以太数量。
  • 添加(字节码,0x20)这是内存中开始契约字节码的位置。add操作码将这两个值相加在一起,以获得字节码的起始内存位置。0x20偏移量用于跳过字节码的前32个字节,其中包含字节码的长度。
  • mload(字节码)是在前面指定的内存位置加载字节码。
  • salt是一个随机的32字节值,用于为已部署的契约生成确定性地址。盐值通常来自部署合同的地址、契约创建代码和任何相关参数的组合。

工厂可以有一个视图函数,如这个函数来获得一个已部署的地址:

代码语言:javascript
复制
function computeDestinationAddress(bytes32 salt, bytes memory bytecode) external view returns (address) {
    bytes32 bytecodeHash = keccak256(bytecode);
    bytes32 _data = keccak256(abi.encodePacked(bytes1(0xff), address(this), salt, bytecodeHash));
    return address(bytes20(_data << 96));
}
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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