초기화 코드 해시는 기본적으로 계약 바이트코드의 keccak256 해시입니다. 초기화 코드의 사용
초기화 코드 해시가 필요합니다 "주소 계산이 해싱에 따라 다르기 때문에 초기화 코드. 초기화 코드는 실행될 때 다음을 생성하는 코드입니다. 상태에 배치될 런타임 바이트코드 일반적으로 고급 언어에서 '건축자'. "EIP-1014: Skinny CREATE2," 이더리움 개선 제안, no. 1014, 2018년 4월. [온라인 연재물]. 사용 가능: https://eips.ethereum.org/EIPS/eip-1014.
초기화 코드의 사용 초기화 코드의 주요 용도는 채굴 주소입니다. 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() { echo "오류: $1" 1번 출구 }
사용법() { echo "사용법: $0 <계약_경로> <계약_이름> [-v]" echo " <contract_path> : Solidity 계약 파일의 경로" echo " <contract_name> : Solidity 계약의 이름" echo " -v : 자세한 출력 활성화(선택 사항)" 1번 출구 }
만약에! 명령 -v forge &> /dev/null; 그럼 exit_on_error "Foundry가 설치되지 않았습니다. 먼저 설치해 주세요." fi
if [ "$#" -lt 2 ] || [ "$#" -gt 3 ]; 그럼 사용법 fi
CONTRACT_PATH=$1 CONTRACT_NAME=$2 자세한 내용=거짓
if [ "$#" -eq 3 ] && [ "$3" == "-v" ]; 그럼 자세한 내용=참 fi
만일 [ ! -f "$CONTRACT_PATH" ]; 그럼 exit_on_error "계약 경로 '$CONTRACT_PATH'가 존재하지 않거나 파일이 아닙니다." fi
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 "계약서를 컴파일하지 못했습니다." fi
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" echo "$INIT_CODE_HASH" > "$OUTPUT_FILE" || exit_on_error "초기 코드 해시를 파일에 쓰지 못했습니다."
echo "초기 코드 해시가 $OUTPUT_FILE에 기록되었습니다." $VERBOSE인 경우; 그럼 echo "초기 코드: $INIT_CODE" echo "초기 코드 해시: $INIT_CODE_HASH" fi
CD - > /dev/null || 출구
출처 보기 CC BY-SA 4.0