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
}