import { type VerificationKeySafe } from '@nori-zk/o1js-zk-utils';
import type { ProofDataOutput, SP1ProofWithPublicValuesPlonkNoTee } from '@nori-zk/proof-conversion/min';
import { type NetworkId } from 'o1js';
import { type MerkleTreeContractDepositAttestorInputJson } from '../../depositAttestation.js';
export type SafeVK = {
    hashStr: string;
    data: string;
};
export interface DeploymentResult {
    noriTokenBridgeAddress: string;
    tokenBaseAddress: string;
    tokenBaseTokenId: string;
    noriTokenBridgeTokenId: string;
    txHash: string;
}
export declare class TokenBridgeTester {
    minaSetup(options: {
        networkId?: NetworkId;
        mina: string | string[];
        archive: string | string[];
        lightnetAccountManager?: string;
        bypassTransactionLimits?: boolean;
        minaDefaultHeaders?: HeadersInit;
        archiveDefaultHeaders?: HeadersInit;
    }): Promise<void>;
    compile(): Promise<{
        noriStorageInterfaceVerificationKeySafe: VerificationKeySafe;
        fungibleTokenVerificationKeySafe: VerificationKeySafe;
        noriTokenBridgeVerificationKeySafe: VerificationKeySafe;
    }>;
    private fetchAccounts;
    deployContracts(senderPrivateKeyBase58: string, adminPublicKeyBase58: string, noriTokenBridgePrivateKeyBase58: string, tokenBasePrivateKeyBase58: string, storeHashHex: string, ethTokenBridgeAddressHex: string, genesisRootHex: string, storageInterfaceVerificationKeySafe: SafeVK, pi0: string, po2: string, txFee: number, options?: {
        symbol?: string;
        decimals?: number;
        allowUpdates?: boolean;
        startPaused?: boolean;
    }): Promise<DeploymentResult>;
    updateVerificationKeys(senderPrivateKeyBase58: string, noriTokenBridgeAddressBase58: string, tokenBaseAddressBase58: string, noriTokenBridgeVerificationKeySafe: VerificationKeySafe, fungibleTokenVerificationKeySafe: VerificationKeySafe, txFee: number, updateTokenBaseVK: boolean, updateNoriTokenBridgeVK: boolean): Promise<DeploymentResult>;
    private runBridgeTx;
    updateIntegrityParams(senderPrivateKeyBase58: string, noriTokenBridgeAddressBase58: string, pi0: string, po2: string, txFee: number): Promise<string>;
    updateNoriHeliosProgramPi0(senderPrivateKeyBase58: string, noriTokenBridgeAddressBase58: string, pi0: string, txFee: number): Promise<string>;
    updateProofConversionPO2(senderPrivateKeyBase58: string, noriTokenBridgeAddressBase58: string, po2: string, txFee: number): Promise<string>;
    update(senderPrivateKeyBase58: string, noriTokenBridgeAddressBase58: string, sp1PlonkProof: SP1ProofWithPublicValuesPlonkNoTee, proofData: ProofDataOutput, txFee: number): Promise<string>;
    setUpStorage(senderPrivateKeyBase58: string, userPrivateKeyBase58: string, noriTokenBridgeAddressBase58: string, storageInterfaceVerificationKeySafe: SafeVK, txFee: number): Promise<string>;
    mint(senderPrivateKeyBase58: string, noriTokenBridgeAddressBase58: string, merkleTreeContractDepositAttestorInputJson: MerkleTreeContractDepositAttestorInputJson, messageSCRAMStr: string, signatureSCRAMBase58: string, fundNewAccount: boolean, txFee: number): Promise<string>;
    getBalanceOf(tokenBaseAddressBase58: string, userPublicKeyBase58: string): Promise<string>;
    getMintedSoFar(noriTokenBridgeAddressBase58: string, userPublicKeyBase58: string): Promise<string>;
}
