UNPKG

@kadena/hardhat-chainweb

Version:
147 lines (134 loc) 3.93 kB
import 'hardhat/types'; import type { Origin } from './utils/chainweb'; import type { DeployContractOnChains } from './utils'; import { EthereumProvider, HardhatNetworkAccountsConfig, HardhatNetworkUserConfig, HttpNetworkAccountsConfig, HttpNetworkUserConfig, } from 'hardhat/types'; import 'hardhat/types/runtime'; //HttpNetworkAccountsConfig export interface ChainwebInProcessUserConfig { accounts?: HardhatNetworkAccountsConfig; chains: number; graph?: { [key: number]: number[] }; logging?: 'none' | 'info' | 'debug'; type?: 'in-process'; chainIdOffset?: number; networkOptions?: HardhatNetworkUserConfig; chainwebChainIdOffset?: number; etherscan?: { apiKey: string; apiURLTemplate: string; browserURLTemplate: string; }; } export interface ChainwebInProcessConfig extends Required< Omit<ChainwebInProcessUserConfig, 'networkOptions' | 'etherscan'> > { precompiles: { chainwebChainId: string; spvVerify: string; }; networkOptions?: Omit<HardhatNetworkUserConfig, 'chainId'>; etherscan?: { apiKey: string; apiURLTemplate: string; browserURLTemplate: string; }; } export interface ChainwebExternalUserConfig { accounts?: HttpNetworkAccountsConfig; chains: number; type?: 'external'; externalHostUrl?: string; chainIdOffset?: number; precompiles?: { chainwebChainId?: string; spvVerify?: string; }; chainwebChainIdOffset?: number; networkOptions?: Omit<HttpNetworkUserConfig, 'chainId' | 'url'>; etherscan?: { apiKey: string; apiURLTemplate: string; browserURLTemplate: string; }; } export interface ChainwebExternalConfig extends Required< Omit<ChainwebExternalUserConfig, 'networkOptions' | 'etherscan'> > { precompiles: { chainwebChainId: string; spvVerify: string; }; networkOptions?: Omit<HttpNetworkUserConfig, 'chainId' | 'url'>; etherscan?: { apiKey: string; apiURLTemplate: string; browserURLTemplate: string; }; } export type ChainwebUserConfig = | ChainwebInProcessUserConfig | ChainwebExternalUserConfig; export type ChainwebConfig = ChainwebInProcessConfig | ChainwebExternalConfig; export interface ChainwebPluginApi { initialize: (args?: { forking?: { url: string; blockNumber?: number }; }) => void; getProvider: (cid: number) => Promise<EthereumProvider>; requestSpvProof: ( targetChain: number, origin: Omit<Origin, 'originContractAddress'>, ) => Promise<string>; switchChain: (cid: number) => Promise<void>; getChainIds: () => Promise<number[]>; callChainIdContract: () => Promise<number>; deployContractOnChains: DeployContractOnChains; createTamperedProof: (targetChain: number, origin: Origin) => Promise<string>; computeOriginHash: (origin: Origin) => string; runOverChains: <T>(callback: (chainId: number) => Promise<T>) => Promise<T[]>; } declare module 'hardhat/types' { interface HardhatConfig { chainweb: { hardhat: ChainwebInProcessConfig; localhost: ChainwebExternalConfig; [chainwebName: string]: ChainwebConfig; }; defaultChainweb: string; } interface HardhatUserConfig { chainweb: { hardhat?: ChainwebInProcessUserConfig; localhost?: ChainwebExternalUserConfig; [chainwebName: string]: ChainwebUserConfig | undefined; }; defaultChainweb?: string; } interface HardhatNetworkConfig { chainwebChainId?: number; type?: 'chainweb:in-process'; } interface HttpNetworkConfig { chainwebChainId?: number; type?: 'chainweb:external'; } interface KadenaNetworkConfig extends HardhatNetworkConfig { chainwebChainId: number; } interface KadenaHardhatNetworkUserConfig extends HardhatNetworkUserConfig { chainwebChainId: number; type?: 'chainweb:in-process'; } } declare module 'hardhat/types/runtime' { interface HardhatRuntimeEnvironment { chainweb: ChainwebPluginApi; } }