UNPKG

@lodestar/prover

Version:

A Typescript implementation of the Ethereum Consensus light client

39 lines 1.95 kB
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