問題與解答

甚麼是 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 ||出口
繼續探索數據目錄搜尋