@kadena/hardhat-chainweb
Version:
Hardhat plugin for Kadena's Chainweb network
122 lines • 4.2 kB
TypeScript
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';
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;
}
}
//# sourceMappingURL=type.d.ts.map