| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 
 | package main
 import (
 "encoding/json"
 "fmt"
 "math/big"
 "os"
 "strings"
 
 "github.com/ethereum/go-ethereum/accounts/abi"
 "github.com/ethereum/go-ethereum/common"
 )
 
 
 
 
 
 
 
 
 
 
 const RawABI = `[
 {
 "inputs": [
 {
 "internalType": "address",
 "name": "owner",
 "type": "address"
 }
 ],
 "name": "List",
 "outputs": [
 {
 "internalType": "address[]",
 "name": "receiver",
 "type": "address[]"
 },
 {
 "internalType": "uint256[]",
 "name": "values",
 "type": "uint256[]"
 }
 ],
 "stateMutability": "view",
 "type": "function"
 },
 {
 "inputs": [
 {
 "internalType": "address",
 "name": "owner",
 "type": "address"
 }
 ],
 "name": "Value",
 "outputs": [
 {
 "internalType": "uint256",
 "name": "values",
 "type": "uint256"
 }
 ],
 "stateMutability": "view",
 "type": "function"
 }
 ]`
 
 func main() {
 parsed, err := abi.JSON(strings.NewReader(RawABI))
 if err != nil {
 panic(err)
 }
 
 {
 address := common.HexToAddress("0x80819B3F30e9D77DE6BE3Df9d6EfaA88261DfF9c")
 
 
 valueInput, err := parsed.Pack("Value", address)
 if err != nil {
 panic(err)
 }
 
 
 var addrwant common.Address
 if err := parsed.Methods["Value"].Inputs.Unpack(&addrwant, valueInput[4:]); err != nil {
 panic(err)
 }
 fmt.Println("should equals", addrwant == address)
 
 
 var balance *big.Int
 var returns = common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000005f5e100")
 if err := parsed.Unpack(&balance, "Value", returns); err != nil {
 panic(err)
 }
 fmt.Println("Value 返回值", balance)
 }
 
 
 {
 
 
 var res struct {
 Receiver []common.Address
 Values   []*big.Int
 }
 
 
 raw := common.Hex2Bytes("00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000080819b3f30e9d77de6be3df9d6efaa88261dff9c0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000a")
 if err := parsed.Unpack(&res, "List", raw); err != nil {
 panic(err)
 }
 _ = json.NewEncoder(os.Stdout).Encode(&res)
 }
 }
 
 |