@@ -21,15 +21,16 @@ import { FeedValueEncoder } from "../../../libs/ftso-core/src/data/FeedValueEnco
2121import { FeedResultWithProof , MerkleTreeStructs } from "../../../libs/ftso-core/src/data/MerkleTreeStructs" ;
2222import { IRevealData } from "../../../libs/ftso-core/src/data/RevealData" ;
2323import { errorString } from "../../../libs/ftso-core/src/utils/error" ;
24- import { retry } from "../../../libs/ftso-core/src/utils/retry" ;
24+ import { retry , RetryError } from "../../../libs/ftso-core/src/utils/retry" ;
2525import { Bytes32 } from "../../../libs/ftso-core/src/utils/sol-types" ;
2626import { EpochResult , Feed , MedianCalculationResult } from "../../../libs/ftso-core/src/voting-types" ;
2727import { JSONAbiDefinition } from "./dto/data-provider-responses.dto" ;
28- import { Api , FeedId } from "./feed-value-provider-api/generated/provider-api" ;
28+ import { Api , FeedId , FeedValuesResponse } from "./feed-value-provider-api/generated/provider-api" ;
2929
3030import { RewardEpoch } from "../../../libs/ftso-core/src/RewardEpoch" ;
3131import { AbiCache } from "../../../libs/contracts/src/abi/AbiCache" ;
3232import { CONTRACTS } from "../../../libs/contracts/src/constants" ;
33+ import { AxiosResponse } from "axios" ;
3334
3435type RoundAndAddress = string ;
3536
@@ -240,18 +241,26 @@ export class FtsoDataProviderService {
240241 // Internal methods
241242
242243 private async getFeedValuesForEpoch ( votingRoundId : number , supportedFeeds : Feed [ ] ) : Promise < IRevealData > {
243- const valuesRes = await retry (
244- async ( ) =>
245- await this . feedValueProviderClient . feedValueProviderApi . getFeedValues ( votingRoundId , {
246- feeds : supportedFeeds . map ( feed => decodeFeed ( feed . id ) ) ,
247- } )
248- ) ;
244+ let response : AxiosResponse < FeedValuesResponse , any > ;
245+
246+ try {
247+ response = await retry (
248+ async ( ) =>
249+ await this . feedValueProviderClient . feedValueProviderApi . getFeedValues ( votingRoundId , {
250+ feeds : supportedFeeds . map ( feed => decodeFeed ( feed . id ) ) ,
251+ } )
252+ ) ;
253+ } catch ( e ) {
254+ if ( e instanceof RetryError ) {
255+ throw new Error ( `Failed to get feed values for epoch ${ votingRoundId } , error connecting to value provider:\n${ e . cause } ` ) ;
256+ }
257+ }
249258
250- if ( valuesRes . status < 200 || valuesRes . status >= 300 ) {
251- throw new Error ( `Failed to get feed values for epoch ${ votingRoundId } : ${ valuesRes . data } ` ) ;
259+ if ( response . status < 200 || response . status >= 300 ) {
260+ throw new Error ( `Failed to get feed values for epoch ${ votingRoundId } : ${ response . data } ` ) ;
252261 }
253262
254- const values = valuesRes . data ;
263+ const values = response . data ;
255264
256265 // transfer values to 4 byte hex strings and concatenate them
257266 // make sure that the order of values is in line with protocol definition
0 commit comments