///
import { types as rtypes } from "@algorand-builder/runtime";
import algosdk, { LogicSigArgs } from "algosdk";
import { txWriter } from "../internal/tx-log-writer";
import type { ASAInfo, ASCCache, FundASCFlags, LsigInfo, Network, SCParams, SSCInfo } from "../types";
import { CompileOp } from "./compile";
export declare const ALGORAND_MIN_TX_FEE = 1000;
export declare function createAlgoOperator(network: Network): AlgoOperator;
export interface AlgoOperator {
algodClient: algosdk.Algodv2;
deployASA: (name: string, asaDef: rtypes.ASADef, flags: rtypes.ASADeploymentFlags, accounts: rtypes.AccountMap, txWriter: txWriter) => Promise;
fundLsig: (name: string, flags: FundASCFlags, payFlags: rtypes.TxParams, txWriter: txWriter, scParams: LogicSigArgs, scTmplParams?: SCParams) => Promise;
deploySSC: (approvalProgram: string, clearProgram: string, flags: rtypes.SSCDeploymentFlags, payFlags: rtypes.TxParams, txWriter: txWriter, scTmplParams?: SCParams) => Promise;
waitForConfirmation: (txId: string) => Promise;
optInAcountToASA: (asaName: string, assetIndex: number, account: rtypes.Account, params: rtypes.TxParams) => Promise;
optInLsigToASA: (asaName: string, assetIndex: number, lsig: algosdk.LogicSig, params: rtypes.TxParams) => Promise;
optInToASAMultiple: (asaName: string, asaDef: rtypes.ASADef, flags: rtypes.ASADeploymentFlags, accounts: rtypes.AccountMap, assetIndex: number) => Promise;
optInToSSC: (sender: rtypes.Account, appId: number, payFlags: rtypes.TxParams, flags: rtypes.SSCOptionalFlags) => Promise;
ensureCompiled: (name: string, force?: boolean, scTmplParams?: SCParams) => Promise;
}
export declare class AlgoOperatorImpl implements AlgoOperator {
algodClient: algosdk.Algodv2;
compileOp: CompileOp;
constructor(algocl: algosdk.Algodv2);
waitForConfirmation(txId: string): Promise;
getTxFee(params: algosdk.SuggestedParams, txSize: number): number;
getUsableAccBalance(accoutInfo: algosdk.AccountState): bigint;
getOptInTxSize(params: algosdk.SuggestedParams, accounts: rtypes.AccountMap): number;
_optInAcountToASA(asaName: string, assetIndex: number, account: rtypes.Account, params: algosdk.SuggestedParams): Promise;
optInAcountToASA(asaName: string, assetIndex: number, account: rtypes.Account, flags: rtypes.TxParams): Promise;
optInLsigToASA(asaName: string, assetIndex: number, lsig: algosdk.LogicSig, flags: rtypes.TxParams): Promise;
optInToASAMultiple(asaName: string, asaDef: rtypes.ASADef, flags: rtypes.ASADeploymentFlags, accounts: rtypes.AccountMap, assetIndex: number): Promise;
checkBalanceForOptInTx(name: string, params: algosdk.SuggestedParams, asaDef: rtypes.ASADef, accounts: rtypes.AccountMap, creator: rtypes.Account): Promise;
deployASA(name: string, asaDef: rtypes.ASADef, flags: rtypes.ASADeploymentFlags, accounts: rtypes.AccountMap, txWriter: txWriter): Promise;
/**
* Sends Algos to ASC account (Contract Account)
* @param name - ASC filename
* @param flags - FundASC flags (as per SPEC)
* @param payFlags - as per SPEC
* @param txWriter - transaction log writer
* @param scParams: Smart contract Parameters(Used while calling smart contract)
* @param scTmplParams: Smart contract template parameters (used only when compiling PyTEAL to TEAL)
*/
fundLsig(name: string, flags: FundASCFlags, payFlags: rtypes.TxParams, txWriter: txWriter, scParams: LogicSigArgs, scTmplParams?: SCParams): Promise;
/**
* Function to deploy Stateful Smart Contract
* @param approvalProgram name of file in which approval program is stored
* @param clearProgram name of file in which clear program is stored
* @param flags SSCDeploymentFlags
* @param payFlags TxParams
* @param txWriter
* @param scTmplParams: Smart contract template parameters (used only when compiling PyTEAL to TEAL)
*/
deploySSC(approvalProgram: string, clearProgram: string, flags: rtypes.SSCDeploymentFlags, payFlags: rtypes.TxParams, txWriter: txWriter, scTmplParams?: SCParams): Promise;
/**
* Opt-In to stateful smart contract
* @param sender: Account for which opt-in is required
* @param appId: Application Index: (ID of the application)
* @param payFlags: Transaction Params
* @param flags Optional parameters to SSC (accounts, args..)
*/
optInToSSC(sender: rtypes.Account, appId: number, payFlags: rtypes.TxParams, flags: rtypes.SSCOptionalFlags): Promise;
ensureCompiled(name: string, force?: boolean, scTmplParams?: SCParams): Promise;
}