커스텀 마루 네트워크에서 프리컴파일 구성하는 방법
커스텀 기능을 추가하거나 네트워크의 노출 영역을 줄이기 위해 기본 프리컴파일된 계약 세트를 수정해야 하는 프라이빗 또는 특수 마루 기반 네트워크를 실행하는 개발자를 위한 집중 가이드입니다.
사전 요구사항
- Go 프로그래밍 언어에 대한 숙련도.
- 마루 애플리케이션 구조(`app.go`)에 대한 이해.
- 로컬 마루 개발 환경 설정.
프리컴파일 등록 파일 찾기
모든 기본 프리컴파일은 한 곳에 등록됩니다. 마루 소스 코드 디렉토리에서
precompiles/types/defaults.go 파일로 이동하십시오. 등록 프로세스의 핵심인 DefaultStaticPrecompiles 함수를 찾을 수 있습니다.프리컴파일 비활성화하기
온체인 거버넌스가 외부에서 처리되는 프라이빗 네트워크를 구축 중이고, 리소스를 절약하고 복잡성을 줄이기 위해
GovPrecompile을 비활성화하고 싶다고 가정해 보겠습니다. 이렇게 하려면 세트에 추가하는 줄을 주석 처리하거나 삭제하기만 하면 됩니다.// precompiles/types/defaults.go 내부
func DefaultStaticPrecompiles(...) map[common.Address]vm.PrecompiledContract {
precompiles := precompiletypes.NewStaticPrecompiles().
WithPraguePrecompiles().
WithP256Precompile().
WithBech32Precompile().
WithStakingPrecompile(stakingKeeper, bankKeeper, opts...).
WithDistributionPrecompile(distributionKeeper, stakingKeeper, bankKeeper, opts...).
WithICS20Precompile(bankKeeper, stakingKeeper, transferKeeper, channelKeeper).
WithBankPrecompile(bankKeeper, erc20Keeper).
// WithGovPrecompile(govKeeper, bankKeeper, codec, opts...). <-- 이 줄을 주석 처리
WithSlashingPrecompile(slashingKeeper, bankKeeper, opts...)
// ... 함수의 나머지 부분
} 주의: 프리컴파일 세트를 변경하는 것은 합의를 깨는 변경입니다. 이는 네트워크의 제네시스 전에 모든 노드에서 수행되어야 합니다. 라이브 네트워크에서 수행하는 경우 조정된 하드 포크가 필요합니다.
재빌드 및 확인
파일을 수정한 후에는 마루 노드 바이너리를 다시 컴파일해야 합니다. 프로젝트의 루트에서 표준
make install 명령을 사용하십시오. 이 수정된 바이너리로 새 체인을 시작하면 거버넌스 프리컴파일 주소는 더 이상 활성화되지 않습니다. 해당 주소로의 호출은 일반적인 비계약 주소로의 호출처럼 동작합니다.