프리컴파일에서 사용자 정의 오류 구현하기
구조화된 Solidity 오류를 반환하는 Maroo 프리컴파일을 생성하는 방법입니다.
1
공통 프리컴파일 임베드
프리컴파일 구조체가 표준 cosmos-sdk 프리컴파일 구조체 대신
maroo/precompiles/common.Precompile을 임베드하도록 하십시오. 이렇게 하면 사용자 정의 오류 처리 로직이 활성화됩니다.import "github.com/maroo-network/maroo/precompiles/common"
type MyPrecompile struct {
common.Precompile
} 2
RevertWithData 반환
오류가 발생하면 오류 인수를 ABI 인코딩하고
RevertWithData로 래핑하십시오.func (p *MyPrecompile) SomeMethod(...) ([]byte, error) {
// ... logic ...
if unauthorized {
// Pack the Solidity error: error Unauthorized(address user)
packed, _ := p.ABI.Errors["Unauthorized"].Inputs.Pack(userAddr)
selector := p.ABI.Errors["Unauthorized"].ID
data := append(selector[:], packed...)
return nil, &common.RevertWithData{Data: data}
}
return result, nil
}