文字サイズ
初期コードのハッシュは、基本的にはコントラクトのバイトコードの 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 ||出口