/// /// import { EventData } from 'web3-eth-contract'; import { EventEmitter } from 'events'; import { PrefixedHexString } from 'ethereumjs-tx'; import { IRelayHubInstance } from '../../types/truffle-contracts'; import ContractInteractor from '../common/ContractInteractor'; import { GasPriceFetcher } from '../relayclient/GasPriceFetcher'; import { Address, IntString } from '../common/types/Aliases'; import { RelayTransactionRequest } from '../common/types/RelayTransactionRequest'; import PingResponse from '../common/PingResponse'; import { AmountRequired } from '../common/AmountRequired'; import { LoggerInterface } from '../common/LoggerInterface'; import { PaymasterGasLimits } from '../common/Utils'; import { RegistrationManager } from './RegistrationManager'; import { ReputationManager } from './ReputationManager'; import { SignedTransactionDetails, TransactionManager } from './TransactionManager'; import { TxStoreManager } from './TxStoreManager'; import { ServerConfigParams, ServerDependencies } from './ServerConfigParams'; export declare class RelayServer extends EventEmitter { readonly logger: LoggerInterface; lastScannedBlock: number; lastRefreshBlock: number; ready: boolean; lastSuccessfulRounds: number; readonly managerAddress: PrefixedHexString; readonly workerAddress: PrefixedHexString; gasPrice: number; _workerSemaphoreOn: boolean; alerted: boolean; alertedBlock: number; private initialized; readonly contractInteractor: ContractInteractor; readonly gasPriceFetcher: GasPriceFetcher; private readonly versionManager; private workerTask?; config: ServerConfigParams; transactionManager: TransactionManager; txStoreManager: TxStoreManager; lastMinedActiveTransaction?: EventData; reputationManager: ReputationManager; registrationManager: RegistrationManager; chainId: number; networkId: number; relayHubContract: IRelayHubInstance; trustedPaymastersGasLimits: Map; workerBalanceRequired: AmountRequired; constructor(config: Partial, transactionManager: TransactionManager, dependencies: ServerDependencies); printServerAddresses(): void; getMinGasPrice(): number; pingHandler(paymaster?: string): Promise; validateInput(req: RelayTransactionRequest): void; validateFees(req: RelayTransactionRequest): void; validateMaxNonce(relayMaxNonce: number): Promise; validatePaymasterReputation(paymaster: Address, currentBlockNumber: number): Promise; validatePaymasterGasLimits(req: RelayTransactionRequest): Promise<{ maxPossibleGas: number; acceptanceBudget: number; }>; validateViewCallSucceeds(req: RelayTransactionRequest, acceptanceBudget: number, maxPossibleGas: number): Promise; createRelayTransaction(req: RelayTransactionRequest): Promise; intervalHandler(): Promise; start(): void; stop(): void; _workerSemaphore(blockNumber: number): Promise; fatal(message: string): void; /*** * initialize data from trusted paymasters. * "Trusted" paymasters means that: * - we trust their code not to alter the gas limits (getGasLimits returns constants) * - we trust preRelayedCall to be consistent: off-chain call and on-chain calls should either both succeed * or both revert. * - given that, we agree to give the requested acceptanceBudget (since breaking one of the above two "invariants" * is the only cases where the relayer will have to pay for this budget) * * @param paymasters list of trusted paymaster addresses */ _initTrustedPaymasters(paymasters?: string[]): Promise; _getPaymasterMaxAcceptanceBudget(paymaster?: string): IntString; init(): Promise; replenishServer(workerIndex: number, currentBlock: number): Promise; _worker(blockNumber: number): Promise; _refreshGasPrice(): Promise; _handleChanges(currentBlockNumber: number): Promise; getManagerBalance(): Promise; getWorkerBalance(workerIndex: number): Promise; _shouldRegisterAgain(currentBlock: number, hubEventsSinceLastScan: EventData[]): Promise; _shouldRefreshState(currentBlock: number): boolean; handlePastHubEvents(currentBlockNumber: number, hubEventsSinceLastScan: EventData[]): Promise; getAllHubEventsSinceLastScan(): Promise; _handleTransactionRelayedEvent(paymaster: Address, eventBlockNumber: number): Promise; _handleTransactionRejectedByPaymasterEvent(paymaster: Address, currentBlockNumber: number, eventBlockNumber: number): Promise; _getLatestTxBlockNumber(): number; _updateLatestTxBlockNumber(eventsSinceLastScan: EventData[]): Promise; _queryLatestActiveEvent(): Promise; /** * Resend all outgoing pending transactions with insufficient gas price by all signers (manager, workers) * @return the mapping of the previous transaction hash to details of a new boosted transaction */ _boostStuckPendingTransactions(blockNumber: number): Promise>; _boostStuckTransactionsForManager(blockNumber: number): Promise>; _boostStuckTransactionsForWorker(blockNumber: number, workerIndex: number): Promise>; _isTrustedPaymaster(paymaster: string): boolean; isReady(): boolean; setReadyState(isReady: boolean): void; }