知识问答

什么是 INIT_CODE_HASH 以及它如何在 DeFi 智能合约中计算/使用

阅读字号
初始化代码哈希基本上是合约字节码的 keccak256 哈希。 初始化代码的使用 需要初始化代码哈希“因为地址计算取决于哈希 初始化代码。初始化代码是执行时产生以下内容的代码 将被放入状态的运行时字节码,以及 通常由高级语言用来实现 ‘构造函数’。 “EIP-1014:Skinny CREATE2”,以太坊改进提案,编号。 1014,2018 年 4 月。[网络连载]。可用:https://eips.ethereum.org/EIPS/eip-1014。 初始化代码的使用 初始化代码的主要用途是挖掘地址。您可以查看 https://github.com/0age/create2crunch 的示例,了解我们如何利用 CREATE2 和合约的初始化代码来“挖掘”更有效的地址以进行合约部署。 这是一个简单的 bash 脚本,它使用 forge 为您生成代码 init 哈希: https://github.com/sambacha/foundry-scripts/tree/master/scripts/deploy 脚本 #!/usr/bin/env bash # 出错时退出并显示消息的函数 错误时退出(){ 回显“错误:$1” 1号出口 } # 显示使用信息的函数 用法(){ echo "用法: $0 <合同路径> <合同名称> [-v]" echo " : Solidity 合约文件的路径" echo " : Solidity 合约的名称" echo " -v : 启用详细输出(可选)" 1号出口 } # 检查是否安装了Foundry 如果!命令 -v forge &> /dev/null;那么 exit_on_error "Foundry 未安装。请先安装。" 菲 # 检查是否提供了正确数量的参数 if [ "$#" -lt 2 ] || [“$#”-gt 3];那么 用途 菲 # Variables from arguments 合同路径=$1 CONTRACT_NAME=$2 详细=假 # 检查详细选项是否启用 if [ "$#" -eq 3 ] && [ "$3" == "-v" ];那么 详细=真 菲 # 验证合约路径 如果[! -f“$CONTRACT_PATH”];那么 exit_on_error“合同路径‘$CONTRACT_PATH’不存在或不是文件。” 菲 # 获取合约路径的目录 CONTRACT_DIR=$(目录名“$CONTRACT_PATH”) # shellcheck 禁用=SC2034 CONTRACT_FILE=$(基本名称“$CONTRACT_PATH”) # 切换到合约目录 cd "$CONTRACT_DIR" || exit_on_error “无法将目录更改为“$CONTRACT_DIR”。” # 第1步:编译合约 echo “正在编译合约……” 如果 $VERBOSE;那么 锻造构建——合同。 || exit_on_error “无法编译合约。” 否则 锻造构建——合同。 > /dev/null 2>&1 || exit_on_error “无法编译合约。” 菲 # 第二步:生成初始化代码 echo“正在生成初始化代码...” INIT_CODE=$(伪造检查“$CONTRACT_NAME”字节码) || exit_on_error “无法生成初始化代码。” # 第三步:计算初始化代码哈希值 echo“正在计算初始化代码哈希...” INIT_CODE_HASH=$(echo -n "$INIT_CODE" | keccak-256sum | cut -d' ' -f1) || exit_on_error“无法计算初始化代码哈希值。” # 步骤 4:将初始化代码哈希写入文件 OUTPUT_FILE="${CONTRACT_NAME}_INIT_CODE_HASH.txt" 回显“$INIT_CODE_HASH”>“$OUTPUT_FILE”|| exit_on_error“无法将初始化代码哈希写入文件。” # 清理临时文件(如果有) #(如果有需要清理的临时文件,请在此处添加命令) #第五步:输出结果 echo“初始化代码哈希已写入$OUTPUT_FILE” 如果 $VERBOSE;那么 echo "初始化代码:$INIT_CODE" echo“初始化代码哈希:$INIT_CODE_HASH” 菲 # 恢复到原来的目录 cd - > /dev/null ||出口
继续了解数据目录搜索