import { BlockTag, EventType, TransactionReceipt } from '@ethersproject/abstract-provider';
import { BigNumberish } from '@ethersproject/bignumber';
import { ConnectionInfo } from '@ethersproject/web';
import { ERC1155Metadata, NftRefreshState, NftTokenType, RawContract } from './nft-types';
export * from './ethers-types';
/**
 * Options object used to configure the Alchemy SDK.
 *
 * @public
 */
export interface AlchemySettings {
    /**
     * The Alchemy API key that can be found in the Alchemy dashboard.
     *
     * Defaults to: "demo" (a rate-limited public API key)
     */
    apiKey?: string;
    /**
     * The name of the network. Once configured, the network cannot be changed. To
     * use a different network, instantiate a new `Alchemy` instance.
     *
     * Defaults to: Network.ETH_MAINNET
     */
    network?: Network;
    /** The maximum number of retries to attempt if a request fails. Defaults to 5. */
    maxRetries?: number;
    /**
     * Optional URL endpoint to use for all requests. Setting this field will
     * override the URL generated by the {@link network} and {@link apiKey} fields.
     *
     * This field is useful for testing or for using a custom node endpoint. Note
     * that not all methods will work with custom URLs.
     */
    url?: string;
    /**
     * Alchemy auth token required to use the Notify API. This token can be found
     * in the Alchemy Dashboard on the Notify tab.
     */
    authToken?: string;
    /**
     * Optional Request timeout provided in `ms` while using NFT and NOTIFY API.
     * Default to 0 (No timeout).
     */
    requestTimeout?: number;
    /**
     * Optional setting that automatically batches and sends json-rpc requests for
     * higher throughput and reduced network IO. Defaults to false.
     *
     * This implementation is based on the `JsonRpcBatchProvider` in ethers.
     */
    batchRequests?: boolean;
    /**
     * Optional overrides on the Ethers `ConnectionInfo` object used to configure
     * the underlying JsonRpcProvider. This field is for advanced users who want
     * to customize the provider's behavior.
     *
     * This override is applied last, so it will override any other
     * AlchemySettings properties that affect the connection.
     *
     * Note that modifying the ConnectionInfo may break Alchemy SDK's default
     * connection/url logic. It also does not affect `nft` and `notify`
     * namespaces.
     *
     * {@link https://docs.ethers.org/v5/api/utils/web/#ConnectionInfo}
     */
    connectionInfoOverrides?: Partial<ConnectionInfo>;
}
/**
 * The supported networks by Alchemy. Note that some functions are not available
 * on all networks. Please refer to the Alchemy documentation for which APIs are
 * available on which networks
 * {@link https://docs.alchemy.com/alchemy/apis/feature-support-by-chain}
 *
 * @public
 */
export declare enum Network {
    ETH_MAINNET = "eth-mainnet",
    /** @deprecated */
    ETH_GOERLI = "eth-goerli",
    ETH_SEPOLIA = "eth-sepolia",
    ETH_HOLESKY = "eth-holesky",
    OPT_MAINNET = "opt-mainnet",
    /** @deprecated */
    OPT_GOERLI = "opt-goerli",
    OPT_SEPOLIA = "opt-sepolia",
    ARB_MAINNET = "arb-mainnet",
    /** @deprecated */
    ARB_GOERLI = "arb-goerli",
    ARB_SEPOLIA = "arb-sepolia",
    MATIC_MAINNET = "polygon-mainnet",
    /** @deprecated */
    MATIC_MUMBAI = "polygon-mumbai",
    MATIC_AMOY = "polygon-amoy",
    ASTAR_MAINNET = "astar-mainnet",
    POLYGONZKEVM_MAINNET = "polygonzkevm-mainnet",
    /** @deprecated */
    POLYGONZKEVM_TESTNET = "polygonzkevm-testnet",
    POLYGONZKEVM_CARDONA = "polygonzkevm-cardona",
    BASE_MAINNET = "base-mainnet",
    /** @deprecated */
    BASE_GOERLI = "base-goerli",
    BASE_SEPOLIA = "base-sepolia",
    ZKSYNC_MAINNET = "zksync-mainnet",
    ZKSYNC_SEPOLIA = "zksync-sepolia",
    SHAPE_MAINNET = "shape-mainnet",
    SHAPE_SEPOLIA = "shape-sepolia",
    LINEA_MAINNET = "linea-mainnet",
    LINEA_SEPOLIA = "linea-sepolia",
    FANTOM_MAINNET = "fantom-mainnet",
    FANTOM_TESTNET = "fantom-testnet",
    ZETACHAIN_MAINNET = "zetachain-mainnet",
    ZETACHAIN_TESTNET = "zetachain-testnet",
    ARBNOVA_MAINNET = "arbnova-mainnet",
    BLAST_MAINNET = "blast-mainnet",
    BLAST_SEPOLIA = "blast-sepolia",
    MANTLE_MAINNET = "mantle-mainnet",
    MANTLE_SEPOLIA = "mantle-sepolia",
    SCROLL_MAINNET = "scroll-mainnet",
    SCROLL_SEPOLIA = "scroll-sepolia",
    GNOSIS_MAINNET = "gnosis-mainnet",
    GNOSIS_CHIADO = "gnosis-chiado",
    BNB_MAINNET = "bnb-mainnet",
    BNB_TESTNET = "bnb-testnet",
    AVAX_MAINNET = "avax-mainnet",
    AVAX_FUJI = "avax-fuji",
    CELO_MAINNET = "celo-mainnet",
    CELO_ALFAJORES = "celo-alfajores",
    METIS_MAINNET = "metis-mainnet",
    OPBNB_MAINNET = "opbnb-mainnet",
    OPBNB_TESTNET = "opbnb-testnet",
    BERACHAIN_BARTIO = "berachain-bartio",
    SONEIUM_MAINNET = "soneium-mainnet",
    SONEIUM_MINATO = "soneium-minato",
    WORLDCHAIN_MAINNET = "worldchain-mainnet",
    WORLDCHAIN_SEPOLIA = "worldchain-sepolia",
    ROOTSTOCK_MAINNET = "rootstock-mainnet",
    ROOTSTOCK_TESTNET = "rootstock-testnet",
    FLOW_MAINNET = "flow-mainnet",
    FLOW_TESTNET = "flow-testnet",
    ZORA_MAINNET = "zora-mainnet",
    ZORA_SEPOLIA = "zora-sepolia",
    FRAX_MAINNET = "frax-mainnet",
    FRAX_SEPOLIA = "frax-sepolia",
    POLYNOMIAL_MAINNET = "polynomial-mainnet",
    POLYNOMIAL_SEPOLIA = "polynomial-sepolia",
    CROSSFI_MAINNET = "crossfi-mainnet",
    CROSSFI_TESTNET = "crossfi-testnet",
    APECHAIN_MAINNET = "apechain-mainnet",
    APECHAIN_CURTIS = "apechain-curtis",
    LENS_SEPOLIA = "lens-sepolia",
    GEIST_MAINNET = "geist-mainnet",
    GEIST_POLTER = "geist-polter",
    LUMIA_PRISM = "lumia-prism",
    LUMIA_TESTNET = "lumia-testnet",
    UNICHAIN_SEPOLIA = "unichain-sepolia",
    SONIC_MAINNET = "sonic-mainnet",
    SONIC_BLAZE = "sonic-blaze",
    XMTP_TESTNET = "xmtp-testnet",
    ABSTRACT_TESTNET = "abstract-testnet",
    DEGEN_MAINNET = "degen-mainnet",
    INK_MAINNET = "ink-mainnet",
    INK_SEPOLIA = "ink-sepolia"
}
/** Token Types for the `getTokenBalances()` endpoint. */
export declare enum TokenBalanceType {
    /**
     * Option to fetch the top 100 tokens by 24-hour volume. This option is only
     * available on Mainnet in Ethereum, Polygon, and Arbitrum.
     */
    DEFAULT_TOKENS = "DEFAULT_TOKENS",
    /**
     * Option to fetch the set of ERC-20 tokens that the address as ever held. his
     * list is produced by an address's historical transfer activity and includes
     * all tokens that the address has ever received.
     */
    ERC20 = "erc20"
}
/**
 * Optional params to pass into `getTokenBalances()` to fetch all ERC-20 tokens
 * instead of passing in an array of contract addresses to fetch balances for.
 */
export interface TokenBalancesOptionsErc20 {
    /** The ERC-20 token type. */
    type: TokenBalanceType.ERC20;
    /** Optional page key for pagination (only applicable to TokenBalanceType.ERC20) */
    pageKey?: string;
}
/**
 * Optional params to pass into `getTokenBalances()` to fetch the top 100 tokens
 * instead of passing in an array of contract addresses to fetch balances for.
 */
export interface TokenBalancesOptionsDefaultTokens {
    /** The top 100 token type. */
    type: TokenBalanceType.DEFAULT_TOKENS;
}
/**
 * Response object for when the {@link TokenBalancesOptionsErc20} options are
 * used. A page key may be returned if the provided address has many transfers.
 */
export interface TokenBalancesResponseErc20 extends TokenBalancesResponse {
    /**
     * An optional page key to passed into the next request to fetch the next page
     * of token balances.
     */
    pageKey?: string;
}
/** @public */
export interface TokenBalancesResponse {
    address: string;
    tokenBalances: TokenBalance[];
}
/** @public */
export declare type TokenBalance = TokenBalanceSuccess | TokenBalanceFailure;
/** @public */
export interface TokenBalanceSuccess {
    contractAddress: string;
    tokenBalance: string;
    error: null;
}
/** @public */
export interface TokenBalanceFailure {
    contractAddress: string;
    tokenBalance: null;
    error: string;
}
/**
 * Optional params to pass into {@link CoreNamespace.getTokensForOwner}.
 */
export interface GetTokensForOwnerOptions {
    /**
     * List of contract addresses to filter by. If omitted, defaults to
     * {@link TokenBalanceType.ERC20}.
     */
    contractAddresses?: string[] | TokenBalanceType;
    /**
     * Optional page key from an existing {@link GetTokensForOwnerResponse} to use for
     * pagination.
     */
    pageKey?: string;
}
/**
 * Response object for {@link CoreNamespace.getTokensForOwner}.
 */
export interface GetTokensForOwnerResponse {
    /** Owned tokens for the provided addresses along with relevant metadata. */
    tokens: OwnedToken[];
    /** Page key for the next page of results, if one exists. */
    pageKey?: string;
}
/**
 * Represents an owned token on a {@link GetTokensForOwnerResponse}.
 */
export interface OwnedToken {
    /** The contract address of the token. */
    contractAddress: string;
    /**
     * The raw value of the balance field as a hex string. This value is undefined
     * if the {@link error} field is present.
     */
    rawBalance?: string;
    /**
     * The formatted value of the balance field as a hex string. This value is
     * undefined if the {@link error} field is present, or if the `decimals` field=
     * is undefined.
     */
    balance?: string;
    /** */
    /**
     * The token's name. Is undefined if the name is not defined in the contract and
     * not available from other sources.
     */
    name?: string;
    /**
     * The token's symbol. Is undefined if the symbol is not defined in the contract
     * and not available from other sources.
     */
    symbol?: string;
    /**
     * The number of decimals of the token. Is undefined if not defined in the
     * contract and not available from other sources.
     */
    decimals?: number;
    /** URL link to the token's logo. Is undefined if the logo is not available. */
    logo?: string;
    /**
     * Error from fetching the token balances. If this field is defined, none of
     * the other fields will be defined.
     */
    error?: string;
}
/**
 * Response object for the {@link CoreNamespace.getTokenMetadata} method.
 *
 * @public
 */
export interface TokenMetadataResponse {
    /**
     * The token's name. Is `null` if the name is not defined in the contract and
     * not available from other sources.
     */
    name: string | null;
    /**
     * The token's symbol. Is `null` if the symbol is not defined in the contract
     * and not available from other sources.
     */
    symbol: string | null;
    /**
     * The number of decimals of the token. Returns `null` if not defined in the
     * contract and not available from other sources.
     */
    decimals: number | null;
    /** URL link to the token's logo. Is `null` if the logo is not available. */
    logo: string | null;
}
/**
 * Parameters for the {@link CoreNamespace.getAssetTransfers} method.
 *
 * @public
 */
export interface AssetTransfersParams {
    /**
     * The starting block to check for transfers. This value is inclusive and
     * defaults to `0x0` if omitted.
     */
    fromBlock?: string;
    /**
     * The ending block to check for transfers. This value is inclusive and
     * defaults to the latest block if omitted.
     */
    toBlock?: string;
    /**
     * Whether to return results in ascending or descending order by block number.
     * Defaults to ascending if omitted.
     */
    order?: SortingOrder;
    /**
     * The from address to filter transfers by. This value defaults to a wildcard
     * for all addresses if omitted.
     */
    fromAddress?: string;
    /**
     * The to address to filter transfers by. This value defaults to a wildcard
     * for all address if omitted.
     */
    toAddress?: string;
    /**
     * List of contract addresses to filter for - only applies to "erc20",
     * "erc721", "erc1155" transfers. Defaults to all address if omitted.
     */
    contractAddresses?: string[];
    /**
     * Whether to exclude transfers with zero value. Note that zero value is
     * different than null value. Defaults to `true` if omitted.
     */
    excludeZeroValue?: boolean;
    /** REQUIRED field. An array of categories to get transfers for. */
    category: AssetTransfersCategory[];
    /** The maximum number of results to return per page. Defaults to 1000 if omitted. */
    maxCount?: number;
    /**
     * Optional page key from an existing {@link OwnedBaseNftsResponse}
     * {@link AssetTransfersResult}to use for pagination.
     */
    pageKey?: string;
    /**
     * Whether to include additional metadata about each transfer event. Defaults
     * to `false` if omitted.
     */
    withMetadata?: boolean;
}
/**
 * Parameters for the {@link CoreNamespace.getAssetTransfers} method that
 * includes metadata.
 *
 * @public
 */
export interface AssetTransfersWithMetadataParams extends AssetTransfersParams {
    withMetadata: true;
}
/**
 * Categories of transfers to use with the {@link AssetTransfersParams} request
 * object when using {@link CoreNamespace.getAssetTransfers}.
 *
 * @public
 */
export declare enum AssetTransfersCategory {
    /**
     * Top level ETH transactions that occur where the `fromAddress` is an
     * external user-created address. External addresses have private keys and are
     * accessed by users.
     */
    EXTERNAL = "external",
    /**
     * Top level ETH transactions that occur where the `fromAddress` is an
     * internal, smart contract address. For example, a smart contract calling
     * another smart contract or sending
     */
    INTERNAL = "internal",
    /** ERC20 transfers. */
    ERC20 = "erc20",
    /** ERC721 transfers. */
    ERC721 = "erc721",
    /** ERC1155 transfers. */
    ERC1155 = "erc1155",
    /** Special contracts that don't follow ERC 721/1155, (ex: CryptoKitties). */
    SPECIALNFT = "specialnft"
}
/**
 * Response object for the {@link CoreNamespace.getAssetTransfers} method.
 *
 * @public
 */
export interface AssetTransfersResponse {
    transfers: AssetTransfersResult[];
    /** Page key for the next page of results, if one exists. */
    pageKey?: string;
}
/**
 * Response object for the {@link CoreNamespace.getAssetTransfers} method when
 * the {@link AssetTransfersWithMetadataParams} are used.
 *
 * @public
 */
export interface AssetTransfersWithMetadataResponse {
    transfers: AssetTransfersWithMetadataResult[];
    pageKey?: string;
}
/**
 * Represents a transfer event that is returned in a {@link AssetTransfersResponse}.
 *
 * @public
 */
export interface AssetTransfersResult {
    /** The unique ID of the transfer. */
    uniqueId: string;
    /** The category of the transfer. */
    category: AssetTransfersCategory;
    /** The block number where the transfer occurred. */
    blockNum: string;
    /** The from address of the transfer. */
    from: string;
    /** The to address of the transfer. */
    to: string | null;
    /**
     * Converted asset transfer value as a number (raw value divided by contract
     * decimal). `null` if ERC721 transfer or contract decimal not available.
     */
    value: number | null;
    /**
     * The raw ERC721 token id of the transfer as a hex string. `null` if not an
     * ERC721 transfer.
     */
    erc721TokenId: string | null;
    /**
     * A list of ERC1155 metadata objects if the asset transferred is an ERC1155
     * token. `null` if not an ERC1155 transfer.
     */
    erc1155Metadata: ERC1155Metadata[] | null;
    /** The token id of the token transferred. */
    tokenId: string | null;
    /**
     * Returns the token's symbol or ETH for other transfers. `null` if the
     * information was not available.
     */
    asset: string | null;
    /** The transaction hash of the transfer transaction. */
    hash: string;
    /** Information about the raw contract of the asset transferred. */
    rawContract: RawContract;
}
/**
 * Represents a transfer event that is returned in a
 * {@link AssetTransfersResponse} when {@link AssetTransfersWithMetadataParams} are used.
 *
 * @public
 */
export interface AssetTransfersWithMetadataResult extends AssetTransfersResult {
    /** Additional metadata about the transfer event. */
    metadata: AssetTransfersMetadata;
}
/**
 * The metadata object for a {@link AssetTransfersResult} when the
 * {@link AssetTransfersParams.withMetadata} field is set to true.
 *
 * @public
 */
export interface AssetTransfersMetadata {
    /** Timestamp of the block from which the transaction event originated. */
    blockTimestamp: string;
}
/**
 * The type of transfer for the request. Note that using `TO` will also include
 * NFTs that were minted by the owner.
 */
export declare enum GetTransfersForOwnerTransferType {
    'TO' = "TO",
    'FROM' = "FROM"
}
/**
 * Optional parameters object for the {@link NftNamespace.getTransfersForOwner} method.
 */
export interface GetTransfersForOwnerOptions {
    /**
     * List of NFT contract addresses to filter mints by. If omitted, defaults to
     * all contract addresses.
     */
    contractAddresses?: string[];
    /**
     * Filter mints by ERC721 vs ERC1155 contracts. If omitted, defaults to all
     * NFTs.
     */
    tokenType?: NftTokenType.ERC1155 | NftTokenType.ERC721;
    /**
     * Optional page key from an existing {@link TransfersNftResponse} to use for
     * pagination.
     */
    pageKey?: string;
}
/**
 * Enum for representing the supported sorting orders of the API.
 *
 * @public
 */
export declare enum SortingOrder {
    ASCENDING = "asc",
    DESCENDING = "desc"
}
/** The refresh result response object returned by {@link refreshContract}. */
export interface RefreshContractResult {
    /** The NFT contract address that was passed in to be refreshed. */
    contractAddress: string;
    /** The current state of the refresh request. */
    refreshState: NftRefreshState;
    /**
     * Percentage of tokens currently refreshed, represented as an integer string.
     * Field can be null if the refresh has not occurred.
     */
    progress: string | null;
}
/**
 * The parameter field of {@link TransactionReceiptsParams}.
 *
 * @public
 */
export interface TransactionReceiptsBlockNumber {
    /** The block number to get transaction receipts for. */
    blockNumber: string;
}
/**
 * The parameter field of {@link TransactionReceiptsParams}.
 *
 * @public
 */
export interface TransactionReceiptsBlockHash {
    /** The block hash to get transaction receipts for. */
    blockHash: string;
}
/**
 * The parameters to use with the {@link CoreNamespace.getTransactionReceipts} method.
 *
 * @public
 */
export declare type TransactionReceiptsParams = TransactionReceiptsBlockNumber | TransactionReceiptsBlockHash;
/**
 * Response object for a {@link CoreNamespace.getTransactionReceipts} call.
 *
 * @public
 */
export interface TransactionReceiptsResponse {
    /** A list of transaction receipts for the queried block. */
    receipts: TransactionReceipt[] | null;
}
/** An OpenSea collection's approval status. */
export declare enum OpenSeaSafelistRequestStatus {
    /** Verified collection. */
    VERIFIED = "verified",
    /** Collections that are approved on open sea and can be found in search results. */
    APPROVED = "approved",
    /** Collections that requested safelisting on OpenSea. */
    REQUESTED = "requested",
    /** Brand new collections. */
    NOT_REQUESTED = "not_requested"
}
/**
 * The response object for the {@link findContractDeployer} function.
 *
 * @public
 */
export interface DeployResult {
    /** The address of the contract deployer, if it is available. */
    deployerAddress?: string;
    /** The block number the contract was deployed in. */
    blockNumber: number;
}
/**
 * Method names for Alchemy's custom Subscription API endpoints.
 *
 * This value is provided in the `method` field when creating an event filter on
 * the Websocket Namespace.
 */
export declare enum AlchemySubscription {
    PENDING_TRANSACTIONS = "alchemy_pendingTransactions",
    MINED_TRANSACTIONS = "alchemy_minedTransactions"
}
/**
 * Event filter for the {@link AlchemyWebSocketProvider.on} and
 * {@link AlchemyWebSocketProvider.once} methods to use Alchemy's custom
 * `alchemy_pendingTransactions` endpoint.
 *
 * Returns the transaction information for all pending transactions that match a
 * given filter. For full documentation, see:
 * {@link https://docs.alchemy.com/reference/alchemy-pendingtransactions}
 *
 * Note that excluding all optional parameters will return transaction
 * information for ALL pending transactions that are added to the mempool.
 *
 * @public
 */
export interface AlchemyPendingTransactionsEventFilter {
    method: AlchemySubscription.PENDING_TRANSACTIONS;
    /**
     * Filter pending transactions sent FROM the provided address or array of
     * addresses.
     *
     * If a {@link AlchemyPendingTransactionsEventFilter.toAddress} is also
     * present, then this filter will return transactions sent from the
     * `fromAddress` OR transactions received by the `toAddress`.
     */
    fromAddress?: string | string[];
    /**
     * Filter pending transactions sent TO the provided address or array of
     * addresses.
     *
     * If a {@link AlchemyPendingTransactionsEventFilter.fromAddress} is also
     * present, then this filter will return transactions sent from the
     * `fromAddress` OR transactions received by the `toAddress`.
     */
    toAddress?: string | string[];
    /**
     * Whether to only include transaction hashes and exclude the rest of the
     * transaction response for a smaller payload. Defaults to false (by default,
     * the entire transaction response is included).
     *
     * Note that setting only {@link hashesOnly} to true will return the same
     * response as subscribing to `newPendingTransactions`.
     */
    hashesOnly?: boolean;
}
/**
 * Event filter for the {@link AlchemyWebSocketProvider.on} and
 * {@link AlchemyWebSocketProvider.once} methods to use Alchemy's custom
 * `alchemy_minedTransactions` endpoint.
 *
 * Returns the transaction information for all mined transactions that match the
 * provided filter. For full documentation, see:
 * {@link https://docs.alchemy.com/reference/alchemy-minedtransactions}
 *
 * Note that excluding all optional parameters will return transaction
 * information for ALL mined transactions.
 *
 * @public
 */
export interface AlchemyMinedTransactionsEventFilter {
    method: AlchemySubscription.MINED_TRANSACTIONS;
    /**
     * Address filters to subscribe to. Defaults to all transactions if omitted.
     * Limit 100 address filters. Requires a non-empty array.
     */
    addresses?: NonEmptyArray<AlchemyMinedTransactionsAddress>;
    /**
     * Whether to include transactions that were removed from the mempool.
     * Defaults to false.
     */
    includeRemoved?: boolean;
    /**
     * Whether to only include transaction hashes and exclude the rest of the
     * transaction response for a smaller payload. Defaults to false (by default,
     * the entire transaction response is included).
     */
    hashesOnly?: boolean;
}
/**
 * Address filters for {@link AlchemyMinedTransactionsEventFilter}. Requires at
 * least one of the fields to be set.
 */
export declare type AlchemyMinedTransactionsAddress = RequireAtLeastOne<{
    to?: string;
    from?: string;
}>;
/**
 * Alchemy's event type that extends the default {@link EventType} interface to
 * also include Alchemy's Subscription API.
 *
 * @public
 */
export declare type AlchemyEventType = EventType | AlchemyEventFilter;
/**
 * This type represents the Alchemy's Subscription API endpoints as event
 * filters compatible with other ethers events.
 */
export declare type AlchemyEventFilter = AlchemyMinedTransactionsEventFilter | AlchemyPendingTransactionsEventFilter;
/** Options for the {@link TransactNamespace.sendPrivateTransaction} method. */
export interface SendPrivateTransactionOptions {
    /**
     * Whether to use fast-mode. Defaults to false. Please note that fast mode
     * transactions cannot be cancelled using
     * {@link TransactNamespace.cancelPrivateTransaction}. method.
     *
     * See {@link https://docs.flashbots.net/flashbots-protect/rpc/fast-mode} for
     * more details.
     */
    fast: boolean;
}
/**
 * Asset type returned when calling {@link TransactNamespace.simulateAssetChanges}.
 * Allows you to determine if the assets approved or / and transferred are
 * native, tokens or NFTs.
 */
export declare enum SimulateAssetType {
    /**
     * Native transfers that involve the currency of the chain the simulation is
     * run on (ex: ETH for Ethereum, MATIC for Polygon, ETH for Arbitrum).
     */
    NATIVE = "NATIVE",
    /** ERC20 approval or transfers. */
    ERC20 = "ERC20",
    /** ERC721 approval or transfers. */
    ERC721 = "ERC721",
    /** ERC1155 approval or transfers. */
    ERC1155 = "ERC1155",
    /**
     * Special contracts that don't follow ERC 721/1155.Currently limited to
     * CryptoKitties and CryptoPunks.
     */
    SPECIAL_NFT = "SPECIAL_NFT"
}
/**
 * Change type returned when calling {@link TransactNamespace.simulateAssetChanges}.
 */
export declare enum SimulateChangeType {
    /**
     * Represents a transaction that approved or disapproved permissions for a
     * contract.
     *
     * APPROVE without token ID → approve all tokens
     * APPROVE without amount → approve all amount
     * APPROVE with zero amount → approval being cleared
     */
    APPROVE = "APPROVE",
    /**
     * Represents a transaction that transferred tokens from one address to another.
     */
    TRANSFER = "TRANSFER"
}
/**
 * The error field returned in a {@link SimulateAssetChangesResponse} if the
 * simulation failed.
 */
export interface SimulateAssetChangesError extends Record<string, any> {
    /** The error message. */
    message: string;
}
/**
 * Represents an asset change from a call to
 * {@link TransactNamespace.simulateAssetChanges}.
 */
export interface SimulateAssetChangesChange {
    /** The type of asset from the transaction. */
    assetType: SimulateAssetType;
    /** The type of change from the transaction. */
    changeType: SimulateChangeType;
    /** The from address. */
    from: string;
    /** The to address. */
    to: string;
    /**
     * The raw amount as an integer string. Only available on TRANSFER changes for
     * NATIVE and ERC20 assets, or ERC721/ERC1155 disapprove changes (field set to
     * '0').
     */
    rawAmount?: string;
    /**
     * The amount as an integer string. This value is calculated by applying the
     * `decimals` field to the `rawAmount` field. Only available on TRANSFER
     * changes for NATIVE and ERC20 assets, or ERC721/ERC1155 disapprove changes
     * (field set to '0').
     */
    amount?: string;
    /** The name of the asset transferred, if available. */
    name?: string;
    /** The symbol of the asset transferred if available. */
    symbol?: string;
    /**
     * The number of decimals used by the ERC20 token. Set to 0 for APPROVE
     * changes. Field is undefined if it's not defined in the contract and not
     * available from other sources.
     */
    decimals?: number;
    /**
     * The contract address of the asset. Only applicable to ERC20, ERC721,
     * ERC1155, NFT and SPECIAL_NFT transactions.
     */
    contractAddress?: string;
    /**
     * URL for the logo of the asset, if available. Only applicable to ERC20 transactions.
     */
    logo?: string;
    /**
     * The token id of the asset transferred. Only applicable to ERC721,
     * ERC1155 and SPECIAL_NFT NFTs.
     */
    tokenId?: string;
}
/**
 * Response object for the {@link TransactNamespace.simulateAssetChanges} method.
 */
export interface SimulateAssetChangesResponse {
    /** An array of asset changes that resulted from the transaction. */
    changes: SimulateAssetChangesChange[];
    /**
     * The amount of gas used by the transaction represented as a hex string. The
     * field is undefined if an error occurred.
     */
    gasUsed?: string;
    /** Optional error field that is present if an error occurred. */
    error?: SimulateAssetChangesError;
}
/**
 * Authority used to decode calls and logs when using the
 * {@link TransactNamespace.simulateExecution} method.
 */
export declare enum DecodingAuthority {
    ETHERSCAN = "ETHERSCAN"
}
/** The input or output parameters from a {@link DecodedDebugCallTrace}. */
export interface DecodedCallParam {
    /** Value of the parameter. */
    value: string;
    /** The name of the parameter. */
    name: string;
    /** The type of the parameter.*/
    type: string;
}
/** The input parameters from a {@link DecodedLog}. */
export interface DecodedLogInput extends DecodedCallParam {
    /** Whether the log is marked as indexed in the smart contract. */
    indexed: boolean;
}
/**
 * Decoded representation of the call trace that is part of a
 * {@link SimulationCallTrace}.
 */
export interface DecodedDebugCallTrace {
    /** The smart contract method called. */
    methodName: string;
    /** Method inputs. */
    inputs: DecodedCallParam[];
    /** Method outputs. */
    outputs: DecodedCallParam[];
    /** The source used to provide the decoded call trace. */
    authority: DecodingAuthority;
}
/** The type of call in a debug call trace. */
export declare enum DebugCallType {
    CREATE = "CREATE",
    CALL = "CALL",
    STATICCALL = "STATICCALL",
    DELEGATECALL = "DELEGATECALL"
}
/**
 * Debug call trace in a {@link SimulateExecutionResponse}.
 */
export interface SimulationCallTrace extends Omit<DebugCallTrace, 'revertReason' | 'calls'> {
    /** The type of call. */
    type: DebugCallType;
    /** A decoded version of the call. Provided on a best-effort basis. */
    decoded?: DecodedDebugCallTrace;
}
/**
 * Decoded representation of the debug log that is part of a
 * {@link SimulationDebugLog}.
 */
export interface DecodedLog {
    /** The decoded name of the log event. */
    eventName: string;
    /** The decoded inputs to the log. */
    inputs: DecodedLogInput[];
    /** The source used to provide the decoded log. */
    authority: DecodingAuthority;
}
/**
 * Debug log in a {@link SimulateExecutionResponse}.
 */
export interface SimulationDebugLog {
    /** An array of topics in the log. */
    topics: string[];
    /** The address of the contract that generated the log. */
    address: string;
    /** The data included the log. */
    data: string;
    /** A decoded version of the log. Provided on a best-effort basis. */
    decoded?: DecodedLog;
}
/** Response object for the {@link TransactNamespace.simulateExecution} method. */
export interface SimulateExecutionResponse {
    /**
     * An array of traces generated during simulation that represent the execution
     * of the transaction along with the decoded calls if available.
     */
    calls: SimulationCallTrace[];
    /**
     * An array of logs emitted during simulation along with the decoded logs if
     * available.
     */
    logs: SimulationDebugLog[];
}
/** SDK representation of a Webhook in the Notify API. */
export interface Webhook {
    /** The webhook's unique id. */
    id: string;
    /** The network the webhook is on. */
    network: Network;
    /** The type of webhook. */
    type: WebhookType;
    /** The url that the webhook sends its payload to. */
    url: string;
    /** Whether the webhook is currently active */
    isActive: boolean;
    /** The creation time of the webhook as an ISO string. */
    timeCreated: string;
    /** The signing key used to verify payloads for the webhook. */
    signingKey: string;
    /** The webhook version. All newly created webhooks default to V2. */
    version: WebhookVersion;
    /**
     * The app id of the app used for the webhook. This field is only present on
     * {@link MinedTransactionWebhook} and {@link DroppedTransactionWebhook}
     */
    appId?: string;
}
/** The version of the webhook. All newly created webhooks default to V2. */
export declare enum WebhookVersion {
    V1 = "V1",
    V2 = "V2"
}
/** The type of {@link Webhook}. */
export declare enum WebhookType {
    MINED_TRANSACTION = "MINED_TRANSACTION",
    DROPPED_TRANSACTION = "DROPPED_TRANSACTION",
    ADDRESS_ACTIVITY = "ADDRESS_ACTIVITY",
    NFT_ACTIVITY = "NFT_ACTIVITY",
    NFT_METADATA_UPDATE = "NFT_METADATA_UPDATE",
    GRAPHQL = "GRAPHQL"
}
/**
 * A Mined Transaction Webhook is used to notify your app whenever a transaction
 * sent through your API key gets successfully mined. This is useful if you want
 * to notify customers that their transaction went through.
 */
export interface MinedTransactionWebhook extends Webhook {
    type: WebhookType.MINED_TRANSACTION;
}
/**
 * A Dropped Transaction webhook is used to notify your app whenever a
 * transaction sent through your API key gets dropped. This can be useful if you
 * want to notify customers that their transactions were dropped.
 */
export interface DroppedTransactionWebhook extends Webhook {
    type: WebhookType.DROPPED_TRANSACTION;
}
/**
 * An Address Activity Webhook tracks ETH, ERC20, ERC721, and ERC1155 transfers
 * for the provided addresses. This can be used to notify your app with
 * real-time state changes when your tracked addresses send or receive tokens.
 */
export interface AddressActivityWebhook extends Webhook {
    type: WebhookType.ADDRESS_ACTIVITY;
}
/**
 * The NFT Activity Webhook tracks all ERC721 and ERC1155 activity. This can be
 * used to notify your app with real time state changes when an NFT is
 * transferred between addresses.
 */
export interface NftActivityWebhook extends Webhook {
    type: WebhookType.NFT_ACTIVITY;
}
/**
 * The NFT Metadata Update Webhook tracks all ERC721 and ERC1155 metadata updates.
 * This can be used to notify your app with real time state changes when an NFT's
 * metadata changes.
 */
export interface NftMetadataUpdateWebhook extends Webhook {
    type: WebhookType.NFT_METADATA_UPDATE;
}
/**
 * The Custom Webhook can track any event on every block (think transfers, staking,
 * minting, burning, approvals, etc.)
 * This can be used to notify your app with real time changes whenever an
 * EOA or a smart contract performs any action on-chain.
 */
export interface CustomGraphqlWebhook extends Webhook {
    type: WebhookType.GRAPHQL;
}
/** The response for a {@link NotifyNamespace.getAllWebhooks} method. */
export interface GetAllWebhooksResponse {
    /** All webhooks attached to the provided auth token. */
    webhooks: Webhook[];
    /** The total number of webhooks. */
    totalCount: number;
}
/** Options object for the {@link NotifyNamespace.getAddresses} method. */
export interface GetAddressesOptions {
    /** Number of addresses to fetch. */
    limit?: number;
    /** Page */
    pageKey?: string;
}
/** Response object for the {@link NotifyNamespace.getAddresses} method. */
export interface AddressActivityResponse {
    /** The addresses for the webhook. */
    addresses: string[];
    /** The total number of addresses. */
    totalCount: number;
    /** Optional page key used to fetch the remaining addresses. */
    pageKey?: string;
}
/** Response object for the {@link NotifyNamespace.getGraphqlQuery} method. */
export interface CustomGraphqlWebhookConfig {
    /** The graphql query for the webhook. */
    graphqlQuery: string;
}
/**
 * Params to pass in when calling {@link NotifyNamespace.createWebhook} in order
 * to create a {@link MinedTransactionWebhook} or {@link DroppedTransactionWebhook}.
 *
 * The webhook will be created on the app and network associated with the appId.
 * To find the app id of a project, go to the Alchemy Dashboard in the Apps tab.
 * After clicking on an app, the app id is the string in the URL following 'apps/'.
 *
 * This is a temporary workaround for now. We're planning on detecting the app
 * id from the provided api key directly. Stay tuned!
 */
export interface TransactionWebhookParams {
    /** The app id of the project to create the webhook on. */
    appId: string;
}
/**
 * Params to pass in when calling {@link NotifyNamespace.createWebhook} in order
 * to create a {@link NftActivityWebhook} or {@link NftMetadataUpdateWebhook}.
 */
export interface NftWebhookParams {
    /** Array of NFT filters the webhook should track. */
    filters: NftFilter[];
    /**
     * Optional network to create the webhook on. If omitted, the webhook will be
     * created on network of the app provided in the api key config.
     */
    network?: Network;
}
/**
 * Params to pass in when calling {@link NotifyNamespace.createWebhook} in order
 * to create a {@link CustomGraphqlWebhook}
 */
export interface CustomGraphqlWebhookParams {
    /** GraphQL query */
    graphqlQuery: string;
    /**
     * Optional network to create the webhook on. If omitted, the webhook will be
     * created on network of the app provided in the api key config.
     */
    network?: Network;
    /**
     * Whether to only receive webhooks if the query on the block is not empty.
     * Defaults to false.
     */
    skipEmptyMessages?: boolean;
    /**
     * App IDs are now required for graphQL webhooks. You can find the app ID
     * following the steps here:
     * {@link https://docs.alchemy.com/reference/notify-api-faq#where-can-i-find-the-app-id}.
     *
     * The webhook will be created on the app and network associated with the appId.
     * To find the app id of a project, go to the Alchemy Dashboard in the Apps tab.
     * After clicking on an app, the app id is the string in the URL following 'apps/'.
     *
     * Note that although this property is marked as optional, it is *actually required*
     * for creating a custom GraphQL webhook. This is a workaround to avoid a breaking
     * change in the API.
     */
    appId?: string;
}
/**
 * Params to pass in when calling {@link NotifyNamespace.createWebhook} in order
 * to create a {@link AddressActivityWebhook}.
 */
export interface AddressWebhookParams {
    /** Array of addresses the webhook should activity for. */
    addresses: string[];
    /**
     * Optional network to create the webhook on. If omitted, the webhook will be
     * created on network of the app provided in the api key config.
     */
    network?: Network;
}
/** NFT to track on a {@link NftActivityWebhook} or {@link NftMetadataUpdateWebhook}. */
export interface NftFilter {
    /** The contract address of the NFT. */
    contractAddress: string;
    /**
     * The token id of the NFT to track. If this field is omitted, defaults to
     * tracking all NFTs for the provided contract address.
     */
    tokenId?: BigNumberish;
}
/** Response object for the {@link NotifyNamespace.getNftFilters} method. */
export interface NftFiltersResponse {
    /** The NFT filters on the provided webhook. */
    filters: NftFilter[];
    /** The total number of NFT filters on the webhook. */
    totalCount: number;
    /** Optional page key used to fetch the remaining filters. */
    pageKey?: string;
}
/**
 * Params object when calling {@link NotifyNamespace.updateWebhook} to mark a
 * webhook as active or inactive.
 */
export interface WebhookStatusUpdate {
    /** Whether the webhook is active. */
    isActive: boolean;
}
/**
 * Params object when calling {@link NotifyNamespace.updateWebhook} to add and
 * remove NFT filters for a {@link NftActivityWebhook}.
 */
export interface WebhookNftFilterUpdate {
    /** The filters to additionally track. */
    addFilters: NftFilter[];
    /** Existing filters to remove. */
    removeFilters: NftFilter[];
}
/**
 * Params object when calling {@link NotifyNamespace.updateWebhook} to add and
 * remove NFT filters for a {@link NftMetadataUpdateWebhook}.
 */
export interface WebhookNftMetadataFilterUpdate {
    /** The filters to additionally track. */
    addMetadataFilters: NftFilter[];
    /** Existing filters to remove. */
    removeMetadataFilters: NftFilter[];
}
/**
 * Params object when calling {@link NotifyNamespace.updateWebhook} to add and
 * remove addresses for a {@link AddressActivityWebhook}.
 */
export interface WebhookAddressUpdate {
    /** The addresses to additionally track. */
    addAddresses: string[];
    /** Existing addresses to remove. */
    removeAddresses: string[];
}
/**
 * Params object when calling {@link NotifyNamespace.updateWebhook} to replace
 * all existing addresses for a {@link AddressActivityWebhook}.
 */
export interface WebhookAddressOverride {
    /** The new addresses to track. Existing addresses will be removed. */
    newAddresses: string[];
}
/**
 * Params object when calling {@link NotifyNamespace.updateWebhook} to update a
 * {@link NftActivityWebhook}.
 */
export declare type NftWebhookUpdate = WebhookStatusUpdate | RequireAtLeastOne<WebhookNftFilterUpdate>;
/**
 * Params object when calling {@link NotifyNamespace.updateWebhook} to update a
 * {@link NftMetadataUpdateWebhook}.
 */
export declare type NftMetadataWebhookUpdate = WebhookStatusUpdate | RequireAtLeastOne<WebhookNftMetadataFilterUpdate>;
/**
 * Params object when calling {@link NotifyNamespace.updateWebhook} to update a
 * {@link CustomGraphqlWebhook}.
 */
export declare type CustomGraphqlWebhookUpdate = WebhookStatusUpdate;
/**
 * Params object when calling {@link NotifyNamespace.updateWebhook} to update a
 * {@link AddressActivityWebhook}.
 */
export declare type AddressWebhookUpdate = WebhookStatusUpdate | RequireAtLeastOne<WebhookAddressUpdate> | WebhookAddressOverride;
/**
 * Transaction object used in {@link DebugNamespace.traceCall}, {@link TransactNamespace.simulateAssetChanges} and {@link TransactNamespace.simulateExecution}.
 */
export interface DebugTransaction {
    /** The address the transaction is directed to. */
    to?: string;
    /** The address the transaction is sent from. */
    from?: string;
    /** The gas provided for the transaction execution, as a hex string. */
    gas?: string;
    /** The gas price to use as a hex string. */
    gasPrice?: string;
    /** The value associated with the transaction as a hex string. */
    value?: string;
    /** The data associated with the transaction. */
    data?: string;
}
/**
 * Commitment level of the target block with using methods in the
 * {@link DebugNamespace}
 */
export declare enum CommitmentLevel {
    /**
     * Sample next block inferred by Alchemy built on top of the latest block.
     * This contains the set of transactions taken from the local mempool and
     * is a proxy for blocks that have not been mined yet.
     */
    PENDING = "pending",
    /**
     * The most recent block in the canonical chain observed by Alchemy. Note that
     * this block may be re-orged out of the canonical chain.
     */
    LATEST = "latest",
    /**
     * The most recent crypto-economically secure block that cannot be re-orged
     * outside of manual intervention driven by community coordination. This is
     * only available on {@link Network.ETH_GOERLI} and {@link Network.ETH_SEPOLIA}.
     */
    SAFE = "safe",
    /**
     * The most recent secure block that has been accepted by >2/3 of validators.
     * This block is very unlikely to be re-orged. This is only available on
     * {@link Network.ETH_GOERLI} and {@link Network.ETH_SEPOLIA}.
     */
    FINALIZED = "finalized",
    /**
     * The lowest numbered block available that is usually the first block created.
     */
    EARLIEST = "earliest"
}
/**
 * The block identifier to specify which block to run a debug call in, used for
 * methods in the {@link DebugNamespace}.
 */
export declare type BlockIdentifier = string | CommitmentLevel;
/**
 * The type of tracer to use when running debug methods in the
 * {@link DebugNamespace}.
 */
export declare enum DebugTracerType {
    CALL_TRACER = "callTracer",
    PRESTATE_TRACER = "prestateTracer"
}
/**
 * Tracer used with debug methods in the {@link DebugNamespace}.
 *
 * This tracer tracks all call frames executed during a transaction, including
 * depth 0. The returned result {@link DebugCallTrace} is a nested list of call
 * frames executed as part of the call.
 *
 * Here are some things to note when using the call tracer:
 * - Calls to precompiles are also included in the result.
 * - In case a frame reverts, the field output will contain the raw return data.
 * - In case the top level frame reverts, its `revertReason` field will contain
 *   the parsed reason of revert as returned by the Solidity contract
 */
export interface DebugCallTracer {
    /** Specified type is `CALL_TRACER`. */
    type: DebugTracerType.CALL_TRACER;
    /**
     * Whether to only trace the main (top-level) calls and ignore sub-calls.
     * Defaults to `false`.
     */
    onlyTopCall?: boolean;
}
/**
 * Tracer used with debug methods in the {@link DebugNamespace}.
 *
 * This tracer replays the transaction and tracks every part of state that was
 * touched during the transaction.
 *
 * Returns a {@link DebugPrestateTrace}. This contains sufficient information to
 * create a local execution of the transaction from a custom assembled genesis
 * block.
 */
export interface DebugPrestateTracer {
    /** Specified type is `PRESTATE_TRACER`. */
    type: DebugTracerType.PRESTATE_TRACER;
    /**
     * Whether to only trace the main (top-level) calls and ignore sub-calls.
     * Defaults to `false`.
     */
    onlyTopCall?: boolean;
}
/**
 * Debug result returned when using a {@link DebugCallTracer}.
 */
export interface DebugCallTrace {
    /** The type of call: `CALL` or `CREATE` for the top-level call. */
    type: string;
    /** From address of the transaction. */
    from: string;
    /** To address of the transaction. */
    to: string;
    /** Amount of value transfer as a hex string. */
    value: string;
    /** Gas provided for call as a hex string. */
    gas: string;
    /** Gas used during the call as a hex string. */
    gasUsed: string;
    /** Call data. */
    input: string;
    /** Return data. */
    output: string;
    /** Optional error field. */
    error?: string;
    /** Solidity revert reason, if the call reverted. */
    revertReason?: string;
    /** Array of sub-calls executed as part of the original call. */
    calls?: DebugCallTrace[];
}
/**
 * Filter object used to filter logs by a specific block hash when using
 * {@link CoreNamespace.getLogs}.
 */
export interface FilterByBlockHash extends EventFilter {
    /** The specific block hash to search for logs matching the filter. */
    blockHash?: string;
}
/**
 * Filter object used to filter logs by block number range when using
 * {@link CoreNamespace.getLogs}
 */
export interface Filter extends EventFilter {
    /** The starting block (inclusive) to search for logs matching the filter. */
    fromBlock?: BlockTag;
    /** The end block (inclusive) to search for logs matching the filter.*/
    toBlock?: BlockTag;
}
/**
 * Filter object used to filter logs by when using {@link CoreNamespace.getLogs}
 */
export interface EventFilter {
    /** The address to filter by. If omitted, filters for all addresses. */
    address?: string | string[];
    /** The topics to filter by, or null to match any topics. */
    topics?: Array<string | Array<string> | null>;
}
/**
 * Debug result returned by a {@link DebugPrestateTracer}.
 *
 * The keys are the addresses of the accounts, mapped to its corresponding state.
 */
export declare type DebugPrestateTrace = Record<string, DebugPrestate>;
/** The */
export interface DebugPrestate {
    /** Balance of the account in wei as a hex string. */
    balance: string;
    /** Nonce */
    nonce: number;
    /** Hex-encoded bytecode. */
    code: string;
    /** Storage slots of the contract. */
    storage: Record<string, string>;
}
/**
 * Requires at least one of the properties to be set.
 *
 * Implementation copied over from
 * {@link https://learn.microsoft.com/en-us/javascript/api/@azure/keyvault-certificates/requireatleastone?view=azure-node-latest}
 */
export declare type RequireAtLeastOne<T> = {
    [K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>;
}[keyof T];
/** Requires an array with at least one value. */
export declare type NonEmptyArray<T> = [T, ...T[]];
