DefaultStaticPrecompiles
DefaultStaticPrecompiles(stakingKeeper, distributionKeeper, bankKeeper, ...) map[common.Address]vm.PrecompiledContract 이 함수는 마루 네트워크의 완전한 기본 정적 프리컴파일 세트를 구성하고 반환합니다. 이는 표준 코스모스 SDK 프리컴파일(스테이킹, 거버넌스 등)과 마루의 특정 프리컴파일(OKRW, PCL)을 결합하는 중앙 조립 지점입니다. 이 함수는 일반적으로 app.go에서 애플리케이션 설정 중에 한 번 호출되어 EVM 키퍼를 구성합니다.
파라미터
| 이름 | 타입 | 필수 | 설명 |
|---|---|---|---|
stakingKeeper | stakingkeeper.Keeper | ✓ | x/staking 모듈의 키퍼로, 스테이킹 프리컴파일에 필요합니다. |
distributionKeeper | distributionkeeper.Keeper | ✓ | x/distribution 모듈의 키퍼로, 분배 프리컴파일에 필요합니다. |
bankKeeper | cmn.BankKeeper | ✓ | x/bank 모듈의 키퍼로, 여러 프리컴파일에서 토큰 작업에 사용됩니다. |
okrwKeeper | okrwkeeper.Keeper | ✓ | 마루의 x/okrw 모듈 키퍼로, OKRW 프리컴파일이 발행 및 파라미터 접근을 처리하는 데 필요합니다. |
pclKeeper | *pclkeeper.Keeper | ✓ | 마루의 x/pcl 모듈 키퍼로, PCL 프리컴파일이 규정 준수 정책을 관리하는 데 필요합니다. |
... | various | ✓ | 거버넌스, 슬래싱, IBC와 같은 표준 프리컴파일을 위한 기타 키퍼들. |
반환값
타입:
map[common.Address]vm.PrecompiledContract 키가 프리컴파일의 이더리움 주소이고 값이 프리컴파일 로직을 구현하는 Go 객체인 맵을 반환합니다.
예제
app.go에서의 표준 사용법
이 예시는 `DefaultStaticPrecompiles`의 일반적인 호출을 보여줍니다. 애플리케이션 객체(`app`)에서 필요한 모든 키퍼를 전달하여 EVM을 위한 프리컴파일 세트를 구성합니다.
// In app.go, during the EVMKeeper setup...
precompiles := precompiletypes.DefaultStaticPrecompiles(
app.StakingKeeper,
app.DistrKeeper,
app.BankKeeper,
app.Erc20Keeper,
app.TransferKeeper,
app.IBCKeeper.ChannelKeeper,
app.GovKeeper,
app.SlashingKeeper,
app.OkrwKeeper,
app.PclKeeper,
app.AccountKeeper,
app.AppCodec(),
)
evmKeeper := evmkeeper.NewKeeper(
// ... other params
precompiles,
// ... other params
) 프라이빗 네트워크를 위한 커스터마이징 (거버넌스 비활성화)
이 예시는 개발자가 `DefaultStaticPrecompiles`의 본문을 복사하고, 허가형 네트워크에서는 필요하지 않을 수 있는 거버넌스 프리컴파일과 같은 특정 프리컴파일을 제거하여 커스텀 프리컴파일 세트를 만드는 방법을 보여줍니다.
// In a modified defaults.go for a private network
func CustomStaticPrecompiles(...) map[common.Address]vm.PrecompiledContract {
precompiles := precompiletypes.NewStaticPrecompiles().
WithPraguePrecompiles().
WithP256Precompile().
WithBech32Precompile().
WithStakingPrecompile(stakingKeeper, bankKeeper, opts...).
WithBankPrecompile(bankKeeper, erc20Keeper)
// .WithGovPrecompile(...) is intentionally omitted
marooPrecompiles := StaticPrecompiles(precompiles).
WithOkrwPrecompile(bankKeeper, okrwKeeper, accountKeeper).
WithPclPrecompile(bankKeeper, pclKeeper)
return map[common.Address]vm.PrecompiledContract(marooPrecompiles)
}