2023-03-29 04:02:16 +00:00
|
|
|
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}`);
|
2023-03-29 15:31:38 +00:00
|
|
|
return handleGETRequest(url, retry - 1);
|
2023-03-29 04:02:16 +00:00
|
|
|
}
|
|
|
|
}
|