よくある質問

INIT_CODE_HASH とは何ですか、DeFi スマート コントラクトでどのように計算/使用されますか

文字サイズ
初期コードのハッシュは、基本的にはコントラクトのバイトコードの 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 " : Solidity コントラクト ファイルへのパス" echo " : 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") # シェルチェック無効=SC2034 CONTRACT_FILE=$(ベース名 "$CONTRACT_PATH") # 契約ディレクトリに移動 cd "$CONTRACT_DIR" || exit_on_error 「ディレクトリを '$CONTRACT_DIR' に変更できませんでした。」 # ステップ 1: 契約を作成する echo "契約書を編集中..." $VERBOSE の場合;それから forge build --contracts 。 || exit_on_error "コントラクトのコンパイルに失敗しました。" それ以外の場合 forge build --contracts 。 > /dev/null 2>&1 || exit_on_error "コントラクトのコンパイルに失敗しました。" フィ # ステップ 2: 初期化コードを生成する echo "初期コードを生成しています..." INIT_CODE=$(「$CONTRACT_NAME」バイトコードを検査します) || exit_on_error "初期化コードの生成に失敗しました。" # ステップ 3: 初期化コードのハッシュを計算する 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 "初期化コード ハッシュをファイルに書き込むことができませんでした。" # 一時ファイル (存在する場合) をクリーンアップします # (クリーンアップする一時ファイルがある場合は、ここにコマンドを追加します) # ステップ 5: 結果を出力する echo "初期化コードのハッシュが $OUTPUT_FILE に書き込まれました" $VERBOSE の場合;それから echo "初期化コード: $INIT_CODE" echo "初期化コードハッシュ: $INIT_CODE_HASH" フィ # 元のディレクトリに戻す cd - > /dev/null ||出口
さらに探索するデータ目次検索