정적 프리컴파일 등록
빌드 시점에 고정된 프리컴파일된 계약 세트를 마루 노드 바이너리에 컴파일하는 메커니즘입니다.
정적 등록은 모든 프리컴파일의 주소와 기능이 노드의 소스 코드에 직접 정의되어 제네시스 순간부터 사용 가능함을 의미합니다. 이 접근 방식은 네트워크의 모든 노드가 동일하고 예측 가능한 핵심 기능 세트를 갖도록 보장합니다. 이는 론칭 후 온체인 거버넌스를 통해 새로운 프리컴파일이나 네이티브 계약을 등록할 수 있는 동적 시스템과 대조됩니다.
빌더 패턴
마루는 프리컴파일 등록을 위해 빌더 또는 '체인 가능한' 패턴을 사용합니다. 맵의 별칭인
StaticPrecompiles 타입에는 WithOkrwPrecompile 및 WithPclPrecompile과 같은 메서드가 있습니다. 각 메서드는 맵에 새로운 프리컴파일을 추가하고 맵 자체를 반환하여 DefaultStaticPrecompiles 함수에서 호출을 깔끔하게 연결할 수 있도록 합니다. 이는 코드를 읽기 쉽고 수정하기 쉽게 만듭니다.프리컴파일 맵
등록 프로세스의 최종 결과는
map[common.Address]vm.PrecompiledContract입니다. 노드 내의 EVM 모듈은 트랜잭션 처리 중에 이 맵을 사용합니다. 트랜잭션이 이 맵의 키로 존재하는 주소를 호출하면, EVM은 바이트코드 실행을 건너뛰고 대신 해당 vm.PrecompiledContract Go 객체의 Run 메서드를 호출합니다.네트워크 업그레이드에 대한 영향
프리컴파일 세트가 정적이기 때문에, 하나를 추가, 제거 또는 변경하려면 조정된 네트워크 업그레이드가 필요합니다. 모든 검증인은 수정된
DefaultStaticPrecompiles 함수를 포함하는 새 버전으로 노드 소프트웨어를 업데이트해야 합니다. 이는 어떤 핵심 기능이 어떤 주소에서 사용 가능한지에 대해 네트워크 전반에 걸쳐 합의가 유지되도록 보장합니다.