文字大小
初始化代碼哈希基本上是合約字節碼的 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 ||出口