relay-plugin-eth/src/client/utils.ts

50 lines
1.3 KiB
TypeScript

import { fromHexString, toHexString } from "@chainsafe/ssz";
import bls from "@chainsafe/bls/switchable";
import { createBeaconConfig } from "@lodestar/config";
import { mainnetConfig } from "./constants.js";
import { networksChainConfig } from "@lodestar/config/networks";
import fetch from "node-fetch";
export function concatUint8Array(data: Uint8Array[]) {
const l = data.reduce((l, d) => l + d.length, 0);
let result = new Uint8Array(l);
let offset = 0;
data.forEach((d) => {
result.set(d, offset);
offset += d.length;
});
return result;
}
export function getDefaultClientConfig() {
const chainConfig = createBeaconConfig(
networksChainConfig.mainnet,
fromHexString(mainnetConfig.genesis_validator_root)
);
return {
genesis: {
committee: mainnetConfig.committee_pk,
slot: parseInt(mainnetConfig.slot),
time: parseInt(mainnetConfig.genesis_time),
},
chainConfig,
n: 1,
};
}
export async function handleGETRequest(
url: string,
retry: number = 3
): Promise<any> {
if (retry < 0) {
throw Error(`GET request failed: ${url}`);
}
try {
const ret = await fetch(url);
return await ret.json();
} catch (e) {
console.error(`failed GET request (${url}): ${e.message}`);
return handleGETRequest(url, retry - 1);
}
}