1 2 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) } }
|