初期コードのハッシュは、基本的にはコントラクトのバイトコードの keccak256 ハッシュです。 初期化コードの使用法
アドレス計算はハッシュに依存するため、初期化コードのハッシュが必要です 初期化コード。初期化コードは、実行時に生成されるコードです。 状態に配置されるランタイム バイトコード、および 通常、高水準言語によって実装されるために使用されます。 「コンストラクター」。 「EIP-1014: Skinny CREATE2」、イーサリアム改善提案、no. 1014、2018 年 4 月。[オンライン連載]。利用可能: https://eips.ethereum.org/EIPS/eip-1014。
初期化コードの使用法 init コードの主な用途はアドレスのマイニングです。 CREATE2 とコントラクトの初期化コードを活用して、コントラクトをデプロイするためのより効率的なアドレスを「マイニング」する方法の例については、https://github.com/0age/create2crunch をご覧ください。 以下は、forge を使用してコードの初期ハッシュを生成する単純な bash スクリプトです。
https://github.com/sambacha/foundry-scripts/tree/master/scripts/deploy
スクリプト #!/usr/bin/env bash
exit_on_error() { エコー「エラー: $1」 出口1 }
使用法() { echo "使用法: $0 <契約パス> <契約名> [-v]" echo " <contract_path> : Solidity コントラクト ファイルへのパス" echo " <contract_name> : Solidity コントラクトの名前" echo " -v : 詳細出力を有効にする (オプション)" 出口1 }
もし!コマンド -v forge &> /dev/null;それから exit_on_error "Foundry がインストールされていません。最初にインストールしてください。" フィ
if [ "$#" -lt 2 ] || [ "$#" -gt 3 ];それから 使用法 フィ
CONTRACT_PATH=$1 CONTRACT_NAME=$2 VERBOSE=false
if [ "$#" -eq 3 ] && [ "$3" == "-v" ];それから VERBOSE=true フィ
もし[! -f "$CONTRACT_PATH" ];それから exit_on_error 「契約パス '$CONTRACT_PATH' が存在しないか、ファイルではありません。」 フィ
CONTRACT_DIR=$(ディレクトリ名 "$CONTRACT_PATH")
CONTRACT_FILE=$(ベース名 "$CONTRACT_PATH")
cd "$CONTRACT_DIR" || exit_on_error 「ディレクトリを '$CONTRACT_DIR' に変更できませんでした。」
echo "契約書を編集中..." $VERBOSE の場合;それから forge build --contracts 。 || exit_on_error "コントラクトのコンパイルに失敗しました。" それ以外の場合 forge build --contracts 。 > /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 "初期コード ハッシュの計算に失敗しました。"
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 ||出口
ソースを見る CC BY-SA 4.0