namillum
Version:
Bubble Protocol SDK
46 lines (39 loc) • 1.57 kB
text/typescript
import store from "../store/store";
import { ApiRandomizer } from "./api-randomizer";
import { getApiMaxRetry } from "./config-json-helper";
import { NetworkURL } from "./enum";
const apiRandomizer = ApiRandomizer.getInstance();
const { RewardCalculator } = require('./calculator');
// config.js from public folder
const API_MAX_ATTEMPT = getApiMaxRetry();
let rewardCalculator: typeof RewardCalculator;
export const computeDelegRewardsExec = async (impl: string, networkURL: string, ssn: string, delegator: string) => {
if (!rewardCalculator) {
rewardCalculator = new RewardCalculator(networkURL, impl);
try {
await rewardCalculator.compute_maps();
} catch (err) {
// error with fetching; api error
// set to null to re-declare a new object with a new api
rewardCalculator = null;
throw err;
}
}
return await rewardCalculator.get_rewards(ssn, delegator);
};
export const computeDelegRewards = async (impl: string, ssn: string, delegator: string) => {
let result;
for (let attempt = 0; attempt < API_MAX_ATTEMPT; attempt++) {
try {
const { blockchain, api_list } = store.getState().blockchain
const randomAPI = apiRandomizer.fetchApi(blockchain as NetworkURL, api_list);
result = await computeDelegRewardsExec(impl, randomAPI, ssn, delegator);
break;
} catch (err) {
// error with querying api
// retry
continue;
}
}
return result;
};