package main import ( "fmt" "math/big" "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" ) var ( structThing, _ = abi.NewType("tuple", "struct thing", []abi.ArgumentMarshaling{ {Name: "field_one", Type: "uint256"}, {Name: "field_two", Type: "address"}, }) args = abi.Arguments{ {Type: structThing, Name: "param_one"}, } ) func main() { record := struct { FieldOne *big.Int FieldTwo common.Address }{ big.NewInt(2e18), common.HexToAddress("0x0002"), } packed, err := args.Pack(&record) if err != nil { fmt.Println("bad bad ", err) return } else { fmt.Println("abi encoded", hexutil.Encode(packed)) } }