/// <reference types="bn.js" />
/// <reference types="node" />
import { Address } from '../ethereumjs-util';
import { BN } from '@okxweb3/crypto-lib';
import { TxData, JsonTx, AccessListEIP2930ValuesArray, AccessListEIP2930TxData, FeeMarketEIP1559ValuesArray, FeeMarketEIP1559TxData, TxValuesArray } from './types';
export declare enum Chain {
    Mainnet = 1,
    Ropsten = 3,
    Rinkeby = 4,
    Kovan = 42,
    Goerli = 5,
    Sepolia = 11155111
}
export declare abstract class BaseTransaction<TransactionObject> {
    private readonly _type;
    readonly nonce: BN;
    readonly gasLimit: BN;
    readonly to?: Address;
    readonly value: BN;
    readonly data: Buffer;
    readonly v?: BN;
    readonly r?: BN;
    readonly s?: BN;
    protected activeCapabilities: number[];
    protected DEFAULT_CHAIN: Chain;
    protected constructor(txData: TxData | AccessListEIP2930TxData | FeeMarketEIP1559TxData);
    get transactionType(): number;
    get type(): number;
    abstract raw(): TxValuesArray | AccessListEIP2930ValuesArray | FeeMarketEIP1559ValuesArray;
    abstract serialize(): Buffer;
    abstract getMessageToSign(hashMessage: false): Buffer | Buffer[];
    abstract getMessageToSign(hashMessage?: true): Buffer;
    abstract hash(): Buffer;
    isSigned(): boolean;
    abstract toJSON(): JsonTx;
    sign(privateKey: Buffer): TransactionObject;
    protected abstract _processSignature(v: number, r: Buffer, s: Buffer): TransactionObject;
    protected abstract _processSignatureWithRawV(v: number, r: Buffer, s: Buffer): TransactionObject;
    protected _validateCannotExceedMaxInteger(values: {
        [key: string]: BN | undefined;
    }, bits?: number, cannotEqual?: boolean): void;
    protected _getSharedErrorPostfix(): string;
    abstract errorStr(): string;
    protected abstract _errorMsg(msg: string): string;
    processSignature(v: number, r: Buffer, s: Buffer): TransactionObject;
    processSignatureWithRawV(v: number, r: Buffer, s: Buffer): TransactionObject;
}
