web3-dotnet-sdk icon indicating copy to clipboard operation
web3-dotnet-sdk copied to clipboard

MoralisClient.Web3Api.Token.GetTokenMetadata fails when multiple addresses

Open DnTo opened this issue 2 years ago • 0 comments

Since api isn't accepting param array chained with " , "

Example not working => returns "message": "addresses is not a valid hex address"

https://deep-index.moralis.io/api/v2/erc20/metadata?addresses=0X720ABD02E351F79CEFA90B6A9201B366B502E89C,0x1659fFb2d40DfB1671Ac226A0D9Dcc95A774521A&chain=polygon

Working Example it needs to be chained with addresses separator per item.

https://deep-index.moralis.io/api/v2/erc20/metadata?addresses=0X720ABD02E351F79CEFA90B6A9201B366B502E89C&addresses=0x1659fFb2d40DfB1671Ac226A0D9Dcc95A774521A&chain=polygon

Posible fixes on SDK On File: TokenApi.cs

public async Task<List> GetTokenMetadata
line 118
var parametersFixed = String.Join("&addresses=", ApiClient.ParameterToString(addresses).Split(","));
if (addresses != null) queryParams.Add("addresses", parametersFixed);
...

On File: ApiClient.cs Add separator param

 public string ParameterToString(object obj, string separator = ",")
       {
           if (obj is DateTime)
               // Return a formatted date string - Can be customized with Configuration.DateTimeFormat
               // Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o")
               // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8
               // For example: 2009-06-15T13:45:30.0000000
               return ((DateTime)obj).ToString(Configuration.DateTimeFormat);
           else if (obj is List<string>)
                return String.Join(separator, (obj as List<string>).ToArray());
            else if (obj is string || obj is int || obj is long || obj is decimal || obj is bool || obj is float || obj is double || obj is byte || obj is char)
            {
                return obj.ToString();
            }
            else
                return JsonConvert.SerializeObject(obj);
        }

And called:

if (addresses != null) queryParams.Add("addresses", ApiClient.ParameterToString(addresses, "&addresses="));

DnTo avatar Nov 18 '22 09:11 DnTo