/**
 * @since 2.0.0
 */
import { Equal, FastCheck, Hash, Inspectable, Schema } from "effect";
import * as Credential from "./Credential.js";
import * as KeyHash from "./KeyHash.js";
import * as NetworkId from "./NetworkId.js";
import * as ScriptHash from "./ScriptHash.js";
declare const Address_base: Schema.Class<Address, {
    networkId: Schema.refine<number, typeof Schema.NonNegative>;
    paymentCredential: Schema.Union<[typeof KeyHash.KeyHash, typeof ScriptHash.ScriptHash]>;
    stakingCredential: Schema.optional<Schema.Union<[typeof KeyHash.KeyHash, typeof ScriptHash.ScriptHash]>>;
}, Schema.Struct.Encoded<{
    networkId: Schema.refine<number, typeof Schema.NonNegative>;
    paymentCredential: Schema.Union<[typeof KeyHash.KeyHash, typeof ScriptHash.ScriptHash]>;
    stakingCredential: Schema.optional<Schema.Union<[typeof KeyHash.KeyHash, typeof ScriptHash.ScriptHash]>>;
}>, never, {
    readonly networkId: number;
} & {
    readonly paymentCredential: KeyHash.KeyHash | ScriptHash.ScriptHash;
} & {
    readonly stakingCredential?: KeyHash.KeyHash | ScriptHash.ScriptHash | undefined;
}, {}, {}>;
/**
 * @since 2.0.0
 * @category Schema
 */
export declare class Address extends Address_base {
    toJSON(): {
        networkId: number;
        paymentCredential: {
            _tag: "KeyHash";
            hash: string;
        } | {
            _tag: "ScriptHash";
            hash: string;
        };
        stakingCredential: {
            _tag: "KeyHash";
            hash: string;
        } | {
            _tag: "ScriptHash";
            hash: string;
        } | undefined;
    };
    toString(): string;
    [Inspectable.NodeInspectSymbol](): unknown;
    [Equal.symbol](that: unknown): boolean;
    [Hash.symbol](): number;
}
/**
 * Transform from bytes to AddressStructure
 * Handles both BaseAddress (57 bytes) and EnterpriseAddress (29 bytes)
 *
 * @since 2.0.0
 * @category Transformations
 */
export declare const FromBytes: Schema.transformOrFail<Schema.Union<[Schema.SchemaClass<Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>, never>, Schema.SchemaClass<Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>, never>]>, Schema.SchemaClass<Address, Address, never>, never>;
/**
 * Transform from hex string to AddressStructure
 *
 * @since 2.0.0
 * @category Transformations
 */
export declare const FromHex: Schema.transform<Schema.Schema<Uint8Array<ArrayBufferLike>, string, never>, Schema.transformOrFail<Schema.Union<[Schema.SchemaClass<Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>, never>, Schema.SchemaClass<Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>, never>]>, Schema.SchemaClass<Address, Address, never>, never>>;
/**
 * Transform from Bech32 string to AddressStructure
 *
 * @since 2.0.0
 * @category Transformations
 */
export declare const FromBech32: Schema.transformOrFail<typeof Schema.String, Schema.SchemaClass<Address, Address, never>, never>;
/**
 * Check if AddressStructure has staking credential (BaseAddress-like)
 *
 * @since 2.0.0
 * @category Utils
 */
export declare const hasStakingCredential: (address: Address) => boolean;
/**
 * Check if address has a script payment credential.
 *
 * @since 2.0.0
 * @category predicates
 */
export declare const isScript: (address: Address) => boolean;
/**
 * Check if AddressStructure is enterprise-like (no staking credential)
 *
 * @since 2.0.0
 * @category Utils
 */
export declare const isEnterprise: (address: Address) => boolean;
/**
 * Get network ID from AddressStructure
 *
 * @since 2.0.0
 * @category Utils
 */
export declare const getNetworkId: (address: Address) => NetworkId.NetworkId;
/**
 * Sync functions using Schema utilities
 *
 * @since 2.0.0
 * @category Functions
 */
export declare const fromBech32: (i: string, overrideOptions?: import("effect/SchemaAST").ParseOptions) => Address;
export declare const toBech32: (a: Address, overrideOptions?: import("effect/SchemaAST").ParseOptions) => string;
export declare const fromHex: (i: string, overrideOptions?: import("effect/SchemaAST").ParseOptions) => Address;
export declare const toHex: (a: Address, overrideOptions?: import("effect/SchemaAST").ParseOptions) => string;
export declare const fromBytes: (i: Uint8Array<ArrayBufferLike>, overrideOptions?: import("effect/SchemaAST").ParseOptions) => Address;
export declare const toBytes: (a: Address, overrideOptions?: import("effect/SchemaAST").ParseOptions) => Uint8Array<ArrayBufferLike>;
/**
 * Derive an address from a BIP-39 seed phrase.
 *
 * Pure, synchronous key derivation — no network access or running cluster required.
 * Useful for generating addresses before a devnet cluster starts (e.g. for genesis funding).
 *
 * @since 2.1.0
 * @category Functions
 *
 * @example
 * ```typescript
 * import * as Address from "@evolution-sdk/evolution/Address"
 *
 * const address = Address.fromSeed("your twenty-four word mnemonic ...", {
 *   accountIndex: 0,
 *   networkId: 0 // 0 = testnet, 1 = mainnet
 * })
 * const hex = Address.toHex(address)
 * ```
 */
export declare const fromSeed: (seed: string, options?: {
    password?: string;
    addressType?: "Base" | "Enterprise";
    accountIndex?: number;
    networkId?: number;
}) => Address;
/**
 * FastCheck arbitrary generator for testing
 *
 * @since 2.0.0
 * @category Arbitrary
 */
export declare const arbitrary: FastCheck.Arbitrary<Address>;
/**
 * Address details with both structured and serialized formats
 *
 * @since 2.0.0
 * @category Model
 */
export interface AddressDetails {
    readonly type: "Base" | "Enterprise";
    readonly networkId: NetworkId.NetworkId;
    readonly address: {
        readonly bech32: string;
        readonly hex: string;
    };
    readonly paymentCredential: Credential.Credential;
    readonly stakingCredential?: Credential.Credential;
}
/**
 * Parse address from bech32 or hex string and extract all details
 * Returns undefined if the address cannot be parsed
 *
 * Supports:
 * - Base addresses (payment + staking credentials)
 * - Enterprise addresses (payment credential only)
 *
 * @since 2.0.0
 * @category Utils
 * @example
 * ```typescript
 * import * as Address from "@evolution-sdk/evolution/Address"
 *
 * const details = Address.getAddressDetails("addr_test1qp...")
 * if (details) {
 *   console.log(details.type) // "Base" | "Enterprise"
 *   console.log(details.networkId) // 0 | 1
 *   console.log(details.paymentCredential)
 *   console.log(details.stakingCredential) // present for Base addresses
 * }
 * ```
 */
export declare const getAddressDetails: (address: string) => AddressDetails | undefined;
/**
 * Extract payment credential from address string
 * Returns undefined if the address cannot be parsed
 *
 * @since 2.0.0
 * @category Utils
 */
export declare const getPaymentCredential: (address: string) => Credential.Credential | undefined;
/**
 * Extract staking credential from address string
 * Returns undefined if the address has no staking credential or cannot be parsed
 *
 * @since 2.0.0
 * @category Utils
 */
export declare const getStakingCredential: (address: string) => Credential.Credential | undefined;
export {};
//# sourceMappingURL=Address.d.ts.map