import * as mvc from '../../mvc';
import { ContractAdapter } from '../../common/ContractAdapter';
import { Bytes, FunctionCall, Int, Ripemd160, Sig, SigHashPreimage } from '../../scryptlib';
import * as ftProto from '../contract-proto/token.proto';
export declare class TokenGenesis extends ContractAdapter {
    private constuctParams;
    private _formatedDataPart;
    constructor(constuctParams: {
        pubKey: mvc.PublicKey;
    });
    clone(): TokenGenesis;
    setFormatedDataPart(dataPart: ftProto.FormatedDataPart): void;
    getFormatedDataPart(): ftProto.FormatedDataPart;
    setFormatedDataPartFromLockingScript(script: mvc.Script): void;
    isFirstGenesis(): boolean;
    unlock({ txPreimage, sig, rabinMsg, rabinPaddingArray, rabinSigArray, rabinPubKeyIndexArray, rabinPubKeyVerifyArray, rabinPubKeyHashArray, genesisSatoshis, tokenScript, tokenSatoshis, changeAddress, changeSatoshis, opReturnScript, }: {
        txPreimage: SigHashPreimage;
        sig: Sig;
        rabinMsg: Bytes;
        rabinPaddingArray: Bytes[];
        rabinSigArray: Int[];
        rabinPubKeyIndexArray: number[];
        rabinPubKeyVerifyArray: Int[];
        rabinPubKeyHashArray: Bytes;
        genesisSatoshis: number;
        tokenScript: Bytes;
        tokenSatoshis: number;
        changeAddress: Ripemd160;
        changeSatoshis: number;
        opReturnScript: Bytes;
    }): FunctionCall;
}
export declare class TokenGenesisFactory {
    static lockingScriptSize: number;
    static getLockingScriptSize(): number;
    /**
     * create genesis contract
     * @param {Object} issuerPubKey issuer public key used to unlocking genesis contract
     * @param {string} tokenName the token name
     * @param {string} tokenSymbol the token symbol
     * @param {number} decimalNum the token amount decimal number
     * @returns
     */
    static createContract(issuerPubKey: mvc.PublicKey): TokenGenesis;
    static getDummyInstance(): TokenGenesis;
    static calLockingScriptSize(): number;
    static calUnlockingScriptSize(opreturnData: any): number;
}
