testnet
GitHub EN

ParseStructFromAbi

func ParseStructFromAbi[T any](in *T, args any) error

일반 입력 인자(주로 ABI 언패킹 결과)를 JSON을 중간 포맷으로 사용하여 특정 Go 구조체로 파싱합니다. 이 함수는 프리컴파일 메서드의 입력 검증 및 타입 변환을 단순화합니다.

파라미터

이름 타입 필수 설명
in *T 데이터가 언마샬링될 대상 Go 구조체의 포인터입니다. 구조체는 입력 데이터 키와 일치하는 json 태그를 가져야 합니다.
args any 파싱할 입력 데이터로, 일반적으로 map[string]interface{} 또는 ABI 언패킹 결과 구조체입니다.

반환값

타입: error

성공 시 nil을 반환하며, 데이터 타입이 호환되지 않을 경우 JSON 마샬링/언마샬링 에러를 반환합니다.

에러

코드 이름 설명
json.MarshalError Marshal Error `args`에 JSON으로 마샬링할 수 없는 타입(채널, 함수 등)이 포함된 경우 발생합니다.
json.UnmarshalError Unmarshal Error `args`의 JSON 구조가 구조체 `T`의 정의와 일치하지 않을 경우 발생합니다.

예제

기본 구조체 파싱

언패킹된 ABI 인자를 `CreatePolicyArgs` 구조체로 변환하는 예시입니다.

type CreatePolicyArgs struct {
    Name        string `json:"name"`
    Description string `json:"description"`
}

func (p *Precompile) Run(evm *vm.EVM, contract *vm.Contract, readonly bool) ([]byte, error) {
    // Assume 'args' comes from method.Inputs.Unpack(input)
    var inputArgs CreatePolicyArgs
    
    // Parse generic args into typed struct
    if err := utils.ParseStructFromAbi(&inputArgs, args); err != nil {
        return nil, err
    }
    
    fmt.Printf("Policy Name: %s", inputArgs.Name)
    return nil, nil
}
ESC
검색어를 입력하세요