Skip to content

Commit 45b87b6

Browse files
committed
Merge branch 'andrius/submit1-error-handling' into 'main'
Improve submit1 error handling See merge request flarenetwork/ftso/ftso-scaling!159
2 parents 471e2f0 + eab633f commit 45b87b6

File tree

1 file changed

+20
-11
lines changed

1 file changed

+20
-11
lines changed

apps/ftso-data-provider/src/ftso-data-provider.service.ts

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,16 @@ import { FeedValueEncoder } from "../../../libs/ftso-core/src/data/FeedValueEnco
2121
import { FeedResultWithProof, MerkleTreeStructs } from "../../../libs/ftso-core/src/data/MerkleTreeStructs";
2222
import { IRevealData } from "../../../libs/ftso-core/src/data/RevealData";
2323
import { 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";
2525
import { Bytes32 } from "../../../libs/ftso-core/src/utils/sol-types";
2626
import { EpochResult, Feed, MedianCalculationResult } from "../../../libs/ftso-core/src/voting-types";
2727
import { 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

3030
import { RewardEpoch } from "../../../libs/ftso-core/src/RewardEpoch";
3131
import {AbiCache} from "../../../libs/contracts/src/abi/AbiCache";
3232
import {CONTRACTS} from "../../../libs/contracts/src/constants";
33+
import { AxiosResponse } from "axios";
3334

3435
type 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

Comments
 (0)