testnet
GitHub EN

프리컴파일에서 사용자 정의 오류 구현하기

integration

구조화된 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
}
소스: maroo
ESC
검색어를 입력하세요