@lodestar/prover
Version:
A Typescript implementation of the Ethereum Consensus light client
39 lines • 1.95 kB
JavaScript
import { LogLevel } from "@lodestar/logger";
import { getBrowserLogger } from "@lodestar/logger/browser";
import { ProofProvider } from "./proof_provider/proof_provider.js";
import { processAndVerifyRequest } from "./utils/process.js";
import { ELRpcProvider } from "./utils/rpc_provider.js";
import { Web3ProviderInspector } from "./web3_provider_inspector.js";
export function createVerifiedExecutionProvider(provider, opts) {
const signal = opts.signal ?? new AbortController().signal;
const logger = opts.logger ?? getBrowserLogger({ level: opts.logLevel ?? LogLevel.info });
const mutateProvider = opts.mutateProvider === undefined;
const customProviderTypes = opts.providerTypes ?? [];
const providerInspector = Web3ProviderInspector.initWithDefault({ logger });
for (const providerType of customProviderTypes.reverse()) {
providerInspector.register(providerType, { index: 0 });
}
const providerType = providerInspector.detect(provider);
logger.debug(`Provider is detected as '${providerType.name}' provider.`);
const proofProvider = ProofProvider.init({
...opts,
signal,
logger,
});
const nonVerifiedHandler = providerType.handler(provider);
const nonVerifiedRpc = new ELRpcProvider(nonVerifiedHandler, logger);
nonVerifiedRpc.verifyCompatibility().catch((err) => {
logger.error(err);
logger.error("Due to compatibility issues, verified execution may not work properly.");
});
const verifiedHandler = function newVerifiedHandler(payload) {
return processAndVerifyRequest({ payload, rpc: nonVerifiedRpc, logger, proofProvider });
};
if (mutateProvider) {
providerType.mutateProvider(provider, verifiedHandler);
return { provider, proofProvider };
}
// Verified RPC
return { provider: new ELRpcProvider(verifiedHandler, logger), proofProvider };
}
//# sourceMappingURL=web3_provider.js.map