阅读字号
初始化代码哈希基本上是合约字节码的 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 ||出口