/// <reference types="node" />
import { As } from 'type-tagger';
import { Overwrite } from 'utility-types';
import { Address } from '../../interface';
import { IBaseTx, IBaseTxCodec } from '../base';
export declare type RiseV2Transaction<AssetType> = {
    recipientId: Address;
    senderId: Address;
    amount: string;
    senderPubData: Buffer & As<'publicKey' | 'pubData'>;
    timestamp: number;
    fee: string;
    asset: AssetType;
    type: number;
    id: string;
    version: number;
    signatures: Array<Buffer & As<'signature'>>;
};
export declare type PostableRiseV2Transaction<T> = Overwrite<RiseV2Transaction<T>, {
    senderPubData: string;
    signatures: string[];
}>;
export declare abstract class BaseRiseCodec<T> implements IBaseTxCodec<RiseV2Transaction<T>, PostableRiseV2Transaction<T>> {
    readonly identifier: string;
    readonly type: number;
    constructor(type: number, identifier: string);
    abstract calcBytes(tx: RiseV2Transaction<T>): Buffer;
    calcFullBytes(tx: RiseV2Transaction<T>): Buffer;
    fromPostable(ptx: PostableRiseV2Transaction<T>): RiseV2Transaction<T>;
    toPostable(tx: RiseV2Transaction<T>): PostableRiseV2Transaction<T>;
    transform(from: IBaseTx): RiseV2Transaction<T>;
    abstract calcFees(tx: IBaseTx): number;
    createNonce(): string & As<"nonce">;
    abstract fromBytes(buf: Buffer): RiseV2Transaction<T>;
    protected abstract assetBytes(tx: RiseV2Transaction<T>): Buffer;
    protected abstract assetFromBytes(buf: Buffer): T;
}
