@@ -47,6 +47,44 @@ public static Task<ThirdwebInsight> Create(ThirdwebClient client)
4747 return Task . FromResult ( new ThirdwebInsight ( client ) ) ;
4848 }
4949
50+ public async Task < Token_Price > GetTokenPrice ( string addressOrSymbol , BigInteger chainId , long ? timestamp = null )
51+ {
52+ var prices = await this . GetTokenPrices ( new [ ] { addressOrSymbol } , new [ ] { chainId } , timestamp ) . ConfigureAwait ( false ) ;
53+ if ( prices . Length == 0 )
54+ {
55+ throw new Exception ( "Token price not found." ) ;
56+ }
57+ return prices [ 0 ] ;
58+ }
59+
60+ public async Task < Token_Price [ ] > GetTokenPrices ( string [ ] addressOrSymbols , BigInteger [ ] chainIds , long ? timestamp = null )
61+ {
62+ var addresses = addressOrSymbols . Where ( Utils . IsValidAddress ) . ToArray ( ) ;
63+ var symbols = addressOrSymbols . Except ( addresses ) . ToArray ( ) ;
64+
65+ var url = AppendChains ( $ "{ Constants . INSIGHT_API_URL } /v1/tokens/price", chainIds ) ;
66+
67+ if ( addresses . Length > 0 )
68+ {
69+ url += $ "&address={ string . Join ( "&address=" , addresses ) } ";
70+ }
71+
72+ if ( symbols . Length > 0 )
73+ {
74+ url += $ "&symbol={ string . Join ( "&symbol=" , symbols ) } ";
75+ }
76+
77+ if ( timestamp . HasValue )
78+ {
79+ url += $ "×tamp={ timestamp } ";
80+ }
81+
82+ var response = await this . _httpClient . GetAsync ( url ) . ConfigureAwait ( false ) ;
83+ _ = response . EnsureSuccessStatusCode ( ) ;
84+ var responseContent = await response . Content . ReadAsStringAsync ( ) . ConfigureAwait ( false ) ;
85+ return JsonConvert . DeserializeObject < ResponseModel < Token_Price > > ( responseContent ) . Data ;
86+ }
87+
5088 /// <summary>
5189 /// Get the token balances of an address.
5290 /// </summary>
0 commit comments