import { Algodv2, Transaction } from "algosdk";
import { getParams, waitForConfirmation } from "./submissionUtils";
export { getParams, waitForConfirmation };
import { getStorageAddress, getGlobalManagerInfo, getUserManagerData, getAccountOptInData } from "./stateUtils";
export { getUserManagerData, getGlobalManagerInfo, getStorageAddress };
import { managerStrings, marketStrings } from "./contractStrings";
export { managerStrings, marketStrings };
import { orderedAssets, orderedAssetsAndPlaceholders, protocolManagerAppId, assetDictionary, orderedOracleAppIds, orderedMarketAppIds, orderedSupportedMarketAppIds, SECONDS_PER_YEAR, PARAMETER_SCALE_FACTOR, SCALE_FACTOR, foreignAppIds } from "./config";
import { Base64Encoder } from "./encoder";
export { getAccountOptInData, orderedAssets, orderedAssetsAndPlaceholders, protocolManagerAppId, assetDictionary, orderedOracleAppIds, orderedMarketAppIds, orderedSupportedMarketAppIds, SECONDS_PER_YEAR, PARAMETER_SCALE_FACTOR, SCALE_FACTOR, Base64Encoder, foreignAppIds };
/**
 * Function to create transactions to opt address into our market contracts
 *
 * @param   {Algodv2}         algoClient
 * @param   {string}          address
 *
 * @return  {Transaction[]}   transaction group to opt into algofi markets contracts
 */
export declare function optInMarkets(algodClient: Algodv2, address: string): Promise<Transaction[]>;
/**
 * Function to get opt in transactions for algofi supported assets
 *
 * @param   {Algodv2}         algoClient
 * @param   {string}          stakeAsset
 * @param   {string}          address
 * @param   {string}          storageAddress
 * @param   {number}          storageAddressFundingAmount
 *
 * @return  {Transaction[]}   create transactions to opt in to Staker and rekey storage address to manager contract
 */
export declare function optInStaker(algodClient: Algodv2, stakeAsset: string, address: string, storageAddress: string, storageAddressFundingAmount: number): Promise<any[]>;
/**
 * Function to get opt in transactions for algofi supported assets
 *
 * @param   {Algodv2}         algoClient
 * @param   {string}          address
 *
 * @return  {Transaction[]}   get opt in transactions for non opted in algofi assets
 */
export declare function optInUnderlyingAssets(algodClient: Algodv2, address: string): Promise<Transaction[][] | Transaction[]>;
/**
 * Function to get opt in transactions for algofi supported assets
 *
 * @param   {Algodv2}         algoClient
 * @param   {string}          address
 * @param   {string}          storageAddress
 * @param   {number}          storageAddressFundingAmount
 *
 * @return  {Transaction[]}   create transactions to opt in to manager and rekey storage address to manager contract
 */
export declare function optInManager(algodClient: Algodv2, address: string, storageAddress: string, storageAddressFundingAmount: number): Promise<Transaction[]>;
/**
 * Function to create transaction array for algofi mint operation
 *
 * @param   {AlgodV2}   algodClient
 * @param   {string}    address
 * @param   {string}    storageAddress
 * @param   {int}       amount
 * @param   {string}    assetName
 *
 * @return {Transaction[]} array of transactions to be sent as group transaction to perform mint operation
 */
export declare function mint(algodClient: Algodv2, address: string, storageAddress: string, amount: number, assetName: string): Promise<Transaction[]>;
/**
 * Function to create transaction array for algofi mint_to_collateral operation
 *
 * @param   {AlgodV2}   algodClient
 * @param   {string}    address
 * @param   {string}    storageAddress
 * @param   {int}       amount
 * @param   {string}    assetName
 *
 * @return {Transaction[]} array of transactions to be sent as group transaction to perform mint_to_collateral operation
 */
export declare function mintToCollateral(algodClient: Algodv2, address: string, storageAddress: string, amount: number, assetName: string): Promise<Transaction[]>;
/**
 * Function to create transaction array for algofi burn operation
 *
 * @param   {AlgodV2}   algodClient
 * @param   {string}    address
 * @param   {string}    storageAddress
 * @param   {int}       amount
 * @param   {string}    assetName
 *
 * @return {Transaction[]} array of transactions to be sent as group transaction to perform burn operation
 */
export declare function burn(algodClient: Algodv2, address: string, storageAddress: string, amount: number, assetName: string): Promise<Transaction[]>;
/**
 * Function to create transaction array for algofi add_collateral operation
 *
 * @param   {AlgodV2}   algodClient
 * @param   {string}    address
 * @param   {string}    storageAddress
 * @param   {int}       amount
 * @param   {string}    assetName
 *
 * @return {Transaction[]} array of transactions to be sent as group transaction to perform add_collateral operation
 */
export declare function addCollateral(algodClient: Algodv2, address: string, storageAddress: string, amount: number, assetName: string): Promise<Transaction[]>;
/**
 * Function to create transaction array for algofi remove_collateral operation
 *
 * @param   {AlgodV2}   algodClient
 * @param   {string}    address
 * @param   {string}    storageAddress
 * @param   {int}       amount
 * @param   {string}    assetName
 *
 * @return {Transaction[]} array of transactions to be sent as group transaction to perform remove_collateral operation
 */
export declare function removeCollateral(algodClient: Algodv2, address: string, storageAddress: string, amount: number, assetName: string): Promise<Transaction[]>;
/**
 * Function to create transaction array for algofi remove_collateral_underlying operation
 *
 * @param   {AlgodV2}   algodClient
 * @param   {string}    address
 * @param   {string}    storageAddress
 * @param   {int}       amount
 * @param   {string}    assetName
 *
 * @return {Transaction[]} array of transactions to be sent as group transaction to perform remove_collateral_underlying operation
 */
export declare function removeCollateralUnderlying(algodClient: Algodv2, address: string, storageAddress: string, amount: number, assetName: string): Promise<Transaction[]>;
/**
 * Function to create transaction array for algofi borrow operation
 *
 * @param   {AlgodV2}   algodClient
 * @param   {string}    address
 * @param   {string}    storageAddress
 * @param   {int}       amount
 * @param   {string}    assetName
 *
 * @return {Transaction[]} array of transactions to be sent as group transaction to perform borrow operation
 */
export declare function borrow(algodClient: Algodv2, address: string, storageAddress: string, amount: number, assetName: string): Promise<Transaction[]>;
/**
 * Function to create transaction array for algofi repay_borrow operation
 *
 * @param   {AlgodV2}   algodClient
 * @param   {string}    address
 * @param   {string}    storageAddress
 * @param   {int}       amount
 * @param   {string}    assetName
 *
 * @return {Transaction[]} array of transactions to be sent as group transaction to perform repay_borrow operation
 */
export declare function repayBorrow(algodClient: Algodv2, address: string, storageAddress: string, amount: number, assetName: string): Promise<Transaction[]>;
/**
 * Function to create transaction array for algofi repay_borrow operation
 *
 * @param   {AlgodV2}   algodClient
 * @param   {string}    address
 * @param   {string}    storageAddress
 *
 * @return {Transaction[]} array of transactions to be sent as group transaction to perform repay_borrow operation
 */
export declare function claimRewards(algodClient: Algodv2, asset: string, address: string, storageAddress: string): Promise<Transaction[]>;
/**
 * Function to create transaction array for algofi vault mint_to_collateral operation
 *
 * @param   {AlgodV2}   algodClient
 * @param   {string}    address
 * @param   {string}    storageAddress
 * @param   {int}       amount
 * @param   {string}    assetName
 *
 * @return {Transaction[]} array of transactions to be sent as group transaction to perform mint_to_collateral operation
 */
export declare function sendToVault(algodClient: Algodv2, address: string, storageAddress: string, amount: number, assetName: string): Promise<Transaction[]>;
/**
 * Function to create transaction array for algofi remove from vault operation
 *
 * @param   {AlgodV2}   algodClient
 * @param   {string}    address
 * @param   {string}    storageAddress
 * @param   {int}       amount
 * @param   {string}    assetName
 *
 * @return {Transaction[]} array of transactions to be sent as group transaction to perform remove from vault operation
 */
export declare function removeFromVault(algodClient: Algodv2, address: string, storageAddress: string, amount: number, assetName: string): Promise<Transaction[]>;
/**
 * Function to create transaction array for algofi sync vault operation
 *
 * @param   {AlgodV2}   algodClient
 * @param   {string}    address
 * @param   {string}    storageAddress
 * @param   {int}       amount
 * @param   {string}    assetName
 *
 * @return {Transaction[]} array of transactions to be sent as group transaction to perform sync vault operation
 */
export declare function syncVault(algodClient: Algodv2, address: string, storageAddress: string, assetName: string): Promise<Transaction[]>;
/**
 * Function to create transaction array for algofi sending governance txn operation
 *
 * @param   {AlgodV2}   algodClient
 * @param   {string}    address
 * @param   {string}    storageAddress
 *
 * @return {Transaction[]} array of transactions to be sent as group transaction to perform send_governance_txn operation
 */
export declare function sendGovTxn(algodClient: Algodv2, address: string, storageAddress: string, targetAddress: string, note: string): Promise<Transaction[]>;
/**
 * Function to create transaction array for algofi sending keyreg online txn operation
 *
 * @param   {AlgodV2}   algodClient
 * @param   {string}    address
 * @param   {string}    storageAddress
 *
 * @return {Transaction[]} array of transactions to be sent as group transaction to perform send_keyreg_online_txn operation
 */
export declare function sendKeyRegTxn(algodClient: Algodv2, address: string, storageAddress: string, votePK: Uint8Array, selectionPK: Uint8Array, stateProofPK: Uint8Array, voteFirst: number, voteLast: number, voteKeyDilution: number): Promise<Transaction[]>;
/**
 * Function to create transaction array for algofi sending keyreg online txn operation
 *
 * @param   {AlgodV2}   algodClient
 * @param   {string}    address
 * @param   {string}    storageAddress
 *
 * @return {Transaction[]} array of transactions to be sent as group transaction to perform send_keyreg_offline_txn operation
 */
export declare function sendKeyRegOfflineTxn(algodClient: Algodv2, address: string, storageAddress: string): Promise<Transaction[]>;
/**
 * Funtion to get user data from the protocol as well as totals
 *
 * @param   {Algodv2}   algodClient
 * @param   {string}    address
 *
 * @return  {[dict<string,n>, dict<string,n>]} dictionaries containing the aggregated user protocol data
 */
export declare function getProtocolData(algodClient: Algodv2): Promise<any>;
/**
 * Funtion to get user data from the protocol as well as totals
 *
 * @param   {Algodv2}   algodClient
 * @param   {string}    address
 *
 * @return  {[dict<string,n>, dict<string,n>]} dictionaries containing the aggregated user protocol data
 */
export declare function getUserAndProtocolData(algodClient: Algodv2, address: string): Promise<any>;
/**
 * Function to get the list of inner transactions for a given application transaction
 *
 * @param   {Algodv2}   algodClient
 * @param   {string}  txId
 *
 * @return  {dict<string,n>[]}  innerTxnsList - list of inner transactions with their relevant information
 */
export declare function getInnerTransactionList(algodClient: Algodv2, txId: string): Promise<{}>;
