///
import { EventEmitter } from 'events';
import { JsonRpcProvider, ExternalProvider } from '@ethersproject/providers';
import { TypedTransaction } from '@ethereumjs/tx';
import { PrefixedHexString } from 'ethereumjs-util';
import { Address, ApprovalDataCallback, AuditResponse, EIP1559Fees, GsnTransactionDetails, HttpWrapper, LoggerInterface, PaymasterDataCallback, PingFilter, RelayCallABI, RelayInfo, RelayRequest, RelayTransactionRequest } from '@opengsn/common';
import { AccountKeypair } from './AccountManager';
import { GSNConfig, GSNDependencies } from './GSNConfigurator';
import { GsnEvent } from './GsnEvents';
export declare const EmptyDataCallback: ApprovalDataCallback & PaymasterDataCallback;
/**
* Warning: if providing custom 'PingFilter' it is important to call this one as well.
* The MaxMaxFeePerGas parameter only exists on the Relay Server for the sanity check (i.e. not paying 1 ETH per gas).
* We do not adjust a request for the MaxMaxFeePerGas, proposing gas prices above it is a sure misconfiguration.
*/
export declare const GasPricePingFilter: PingFilter;
export interface GSNUnresolvedConstructorInput {
provider: JsonRpcProvider | ExternalProvider;
config: Partial;
overrideDependencies?: Partial;
}
interface RelayingAttempt {
relayRequestID?: PrefixedHexString;
validUntilTime?: string;
transaction?: TypedTransaction;
isRelayError?: boolean;
error?: Error;
auditPromise?: Promise;
}
export interface RelayingResult {
relayRequestID?: PrefixedHexString;
submissionBlock?: number;
validUntilTime?: string;
transaction?: TypedTransaction;
pingErrors: Map;
relayingErrors: Map;
auditPromises?: Array>;
}
export declare class RelayClient {
readonly emitter: EventEmitter;
config: GSNConfig;
dependencies: GSNDependencies;
private readonly rawConstructorInput;
private initialized;
logger: LoggerInterface;
initializingPromise?: Promise;
constructor(rawConstructorInput: GSNUnresolvedConstructorInput);
init(useTokenPaymaster?: boolean): Promise;
_initInternal(useTokenPaymaster?: boolean): Promise;
/**
* register a listener for GSN events
* @see GsnEvent and its subclasses for emitted events
* @param handler callback function to handle events
*/
registerEventListener(handler: (event: GsnEvent) => void): void;
/**
* unregister previously registered event listener
* @param handler callback function to unregister
*/
unregisterEventListener(handler: (event: GsnEvent) => void): void;
private emit;
/**
* In case Relay Server does not broadcast the signed transaction to the network,
* client also broadcasts the same transaction. If the transaction fails with nonce
* error, it indicates Relay may have signed multiple transactions with same nonce,
* causing a DoS attack.
*
* @param {*} transaction - actual Ethereum transaction, signed by a relay
*/
_broadcastRawTx(transaction: TypedTransaction): Promise<{
hasReceipt: boolean;
broadcastError?: Error;
wrongNonce?: boolean;
}>;
_isAlreadySubmitted(txHash: string): Promise;
relayTransaction(_gsnTransactionDetails: GsnTransactionDetails): Promise;
_warn(msg: string): void;
calculateGasFees(): Promise;
_attemptRelay(relayInfo: RelayInfo, relayRequest: RelayRequest): Promise;
_getRelayRequestID(relayRequest: RelayRequest, signature: PrefixedHexString): PrefixedHexString;
_prepareRelayRequest(gsnTransactionDetails: GsnTransactionDetails): Promise;
fillRelayInfo(relayRequest: RelayRequest, relayInfo: RelayInfo): Promise;
_prepareRelayHttpRequest(relayRequest: RelayRequest, relayInfo: RelayInfo): Promise;
newAccount(): AccountKeypair;
addAccount(privateKey: PrefixedHexString): AccountKeypair;
_verifyInitialized(): void;
auditTransaction(hexTransaction: PrefixedHexString, sourceRelayUrl: string): Promise;
getUnderlyingProvider(): JsonRpcProvider;
_resolveConfiguration({ config }: GSNUnresolvedConstructorInput): Promise;
_resolveVerifyingPaymasterAddress(verifierUrl: string, chainId: number): Promise;
_resolveVerifierConfig(config: Partial, chainId: number): Promise;
_resolveConfigurationFromServer(chainId: number, clientDefaultConfigUrl: string): Promise>;
_resolveDependencies({ provider, config, overrideDependencies }: {
provider: JsonRpcProvider;
config: GSNConfig;
overrideDependencies?: Partial;
}): Promise;
_resolveVerifierApprovalDataCallback(config: GSNConfig, httpWrapper: HttpWrapper, chainId: number, asyncApprovalData?: ApprovalDataCallback): Promise;
_verifyDryRunSuccessful(relayRequest: RelayRequest): Promise;
_verifyViewCallSuccessful(relayInfo: RelayInfo, relayCallABI: RelayCallABI, viewCallGasLimit: BN, isDryRun: boolean): Promise;
}
export declare function _dumpRelayingResult(relayingResult: RelayingResult): string;
export {};