///
import type { Blockchain } from '../blockchain';
import { UnsignedTransaction } from '@ironfish/rust-nodejs';
import { Consensus } from '../consensus';
import { Event } from '../event';
import { Config } from '../fileStores';
import { Logger } from '../logger';
import { Witness } from '../merkletree/witness';
import { BlockHeader } from '../primitives';
import { BurnDescription } from '../primitives/burnDescription';
import { NoteEncrypted } from '../primitives/noteEncrypted';
import { MintData, RawTransaction } from '../primitives/rawTransaction';
import { Transaction } from '../primitives/transaction';
import { GetBlockRequest, GetBlockResponse, RpcClient } from '../rpc';
import { IDatabaseTransaction } from '../storage/database/transaction';
import { SetTimeoutToken } from '../utils';
import { WorkerPool } from '../workerPool';
import { DecryptedNote } from '../workerPool/tasks/decryptNotes';
import { Account } from './account/account';
import { EncryptedAccount } from './account/encryptedAccount';
import { AccountImport } from './exporter/accountImport';
import { MintAssetOptions } from './interfaces/mintAssetOptions';
import { ScanState } from './scanner/scanState';
import { WalletScanner } from './scanner/walletScanner';
import { AssetValue } from './walletdb/assetValue';
import { DecryptedNoteValue } from './walletdb/decryptedNoteValue';
import { HeadValue } from './walletdb/headValue';
import { TransactionValue } from './walletdb/transactionValue';
import { WalletDB } from './walletdb/walletdb';
export declare enum AssetStatus {
CONFIRMED = "confirmed",
PENDING = "pending",
UNCONFIRMED = "unconfirmed",
UNKNOWN = "unknown"
}
export declare enum TransactionStatus {
CONFIRMED = "confirmed",
EXPIRED = "expired",
PENDING = "pending",
UNCONFIRMED = "unconfirmed",
UNKNOWN = "unknown"
}
export declare enum TransactionType {
SEND = "send",
RECEIVE = "receive",
MINER = "miner"
}
export type TransactionOutput = {
publicAddress: string;
amount: bigint;
memo: Buffer;
assetId: Buffer;
};
export declare const DEFAULT_UNLOCK_TIMEOUT_MS: number;
export declare class Wallet {
readonly onAccountImported: Event<[account: Account]>;
readonly onAccountRemoved: Event<[account: Account]>;
readonly accountById: Map;
readonly encryptedAccountById: Map;
readonly walletDb: WalletDB;
private readonly logger;
readonly workerPool: WorkerPool;
readonly scanner: WalletScanner;
readonly nodeClient: RpcClient | null;
private readonly config;
private readonly consensus;
readonly networkId: number;
private masterKey;
protected rebroadcastAfter: number;
protected defaultAccount: string | null;
protected isStarted: boolean;
protected isOpen: boolean;
protected isSyncingTransactionGossip: boolean;
locked: boolean;
protected eventLoopTimeout: SetTimeoutToken | null;
protected lockTimeout: SetTimeoutToken | null;
private readonly createTransactionMutex;
private readonly eventLoopAbortController;
private eventLoopPromise;
constructor({ config, database, logger, rebroadcastAfter, workerPool, consensus, networkId, nodeClient, chain, }: {
config: Config;
database: WalletDB;
logger?: Logger;
rebroadcastAfter?: number;
workerPool: WorkerPool;
consensus: Consensus;
networkId: number;
nodeClient: RpcClient | null;
chain: Blockchain | null;
});
/**
* This starts a scan and returns when the scan has started and does not wait
* for it to complete.
*/
scan({ force, wait, }?: {
force?: boolean;
wait?: boolean;
}): Promise;
open(): Promise;
private load;
private unload;
close(): Promise;
start(): void;
stop(): Promise;
eventLoop(): Promise;
syncTransactionGossip(): Promise;
reset(options?: {
resetCreatedAt?: boolean;
resetScanningEnabled?: boolean;
passphrase?: string;
}, tx?: IDatabaseTransaction): Promise;
resetAccounts(options?: {
resetCreatedAt?: boolean;
resetScanningEnabled?: boolean;
passphrase?: string;
}, tx?: IDatabaseTransaction): Promise;
decryptNotes(transaction: Transaction, initialNoteIndex: number | null, decryptForSpender: boolean, accounts: ReadonlyArray): Promise