After digging in `geth` documentation I found out the solution for my problem. Here an example how to encode single type as well as tuple without provided abi: ```go name := "Crown" symbol := "Crown" decimals := 18 stringAbiType, _ := abi.NewType("string", "", nil) uint256AbiType, _ := abi.NewType("uint256", "", nil) bytesAbiType, _ := abi.NewType("bytes", "", nil) nameEncoded, err := abi.Arguments{{Type: stringAbiType}}.Pack(name) if err != nil { return nil, err } symbolEncoded, err := abi.Arguments{{Type: stringAbiType}}.Pack(symbol) if err != nil { return nil, err } decimalsEncoded, err := abi.Arguments{{Type: uint256AbiType}}.Pack(big.NewInt(int64(decimals))) if err != nil { return nil, err } tuple, _ := abi.Arguments{ {Type: bytesAbiType}, {Type: bytesAbiType}, {Type: bytesAbiType}, }.Pack(nameEncoded, symbolEncoded, decimalsEncoded) ```