텍스트 크기
초기화 코드 해시는 기본적으로 계약 바이트코드의 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 " : Solidity 계약 파일의 경로"
echo " : Solidity 계약의 이름"
echo " -v : 자세한 출력 활성화(선택 사항)"
1번 출구
}
# Foundry가 설치되어 있는지 확인
만약에! 명령 -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")
# 쉘체크 비활성화=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 "계약서를 컴파일하지 못했습니다."
fi
# 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"
echo "$INIT_CODE_HASH" > "$OUTPUT_FILE" || exit_on_error "초기 코드 해시를 파일에 쓰지 못했습니다."
# 임시 파일 정리(있는 경우)
# (정리할 임시 파일이 있으면 여기에 명령을 추가하세요)
# 5단계: 결과 출력
echo "초기 코드 해시가 $OUTPUT_FILE에 기록되었습니다."
$VERBOSE인 경우; 그럼
echo "초기 코드: $INIT_CODE"
echo "초기 코드 해시: $INIT_CODE_HASH"
fi
# 원래 디렉토리로 되돌리기
CD - > /dev/null || 출구