import { BlockId, TransactionId } from '../../block/id';
import { Output, OutputId } from '../../block/output';
import { SlotCommitmentId, SlotIndex } from '../../block/slot';
import { TransactionState } from '../state';
import { HexEncodedString } from '../../utils';
/**
 * OutputCommitmentProof types.
 */
export declare enum OutputCommitmentProofType {
    /** Denotes a HashableNode. */
    HashableNode = 0,
    /** Denotes a LeafHash. */
    LeafHash = 1,
    /** Denotes a ValueHash. */
    ValueHash = 2
}
export declare abstract class OutputCommitmentProof {
    readonly type: OutputCommitmentProofType;
    /**
     * @param type The type of OutputCommitmentProof.
     */
    constructor(type: OutputCommitmentProofType);
    /**
     * Parse an OutputCommitmentProof from a plain JSON object.
     */
    static parse(data: any): OutputCommitmentProof;
}
/**
 * Contains the hashes of the left and right children of a node in the OutputCommitmentProof tree.
 */
export declare class HashableNode extends OutputCommitmentProof {
    readonly l: OutputCommitmentProof;
    readonly r: OutputCommitmentProof;
    /**
     * @param l Output commitment proof of the left subtree.
     * @param r Output commitment proof of the right subtree.
     */
    constructor(l: OutputCommitmentProof, r: OutputCommitmentProof);
}
/**
 * Contains the hash of a leaf in the OutputCommitmentProof tree.
 */
export declare class LeafHash extends OutputCommitmentProof {
    readonly hash: HexEncodedString;
    /**
     * @param hash The hash of the leaf.
     */
    constructor(hash: HexEncodedString);
}
/**
 * Contains the hash of the value for which the OutputCommitmentProof is being computed.
 */
export declare class ValueHash extends OutputCommitmentProof {
    readonly hash: HexEncodedString;
    /**
     * @param hash The hash of the value.
     */
    constructor(hash: HexEncodedString);
}
/**
 * The proof of the output identifier.
 */
export declare class OutputIdProof {
    readonly slot: SlotIndex;
    readonly outputIndex: number;
    readonly transactionCommitment: HexEncodedString;
    readonly outputCommitmentProof: OutputCommitmentProof;
    /**
     * @param slot The slot index of the output.
     * @param outputIndex The index of the output within the corresponding transaction.
     * @param transactionCommitment The commitment of the transaction that created the output. Hex-encoded with 0x prefix.
     * @param outputCommitmentProof The proof of the output commitment.
     */
    constructor(slot: SlotIndex, outputIndex: number, transactionCommitment: HexEncodedString, outputCommitmentProof: OutputCommitmentProof);
}
/**
 * An output with its output id proof.
 * Response of GET /api/core/v3/outputs/{outputId}.
 */
export declare class OutputResponse {
    /**
     * One of the possible output types.
     */
    output: Output;
    /**
     * The proof of the output identifier.
     */
    outputIdProof: OutputIdProof;
}
/**
 * Metadata of the output if it is included in the ledger.
 */
export interface OutputInclusionMetadata {
    /**
     * Slot in which the output was included.
     */
    slot: SlotIndex;
    /**
     * Transaction ID that created the output.
     */
    transactionId: TransactionId;
    /**
     * Commitment ID that includes the creation of the output.
     */
    commitmentId?: SlotCommitmentId;
}
/**
 * Metadata of the output if it is marked as spent in the ledger.
 */
export interface OutputConsumptionMetadata {
    /**
     * Slot in which the output was spent.
     */
    slot: SlotIndex;
    /**
     * Transaction ID that spent the output.
     */
    transactionId: TransactionId;
    /**
     * Commitment ID that includes the spending of the output.
     */
    commitmentId?: SlotCommitmentId;
}
/**
 * Metadata of an output.
 */
export interface OutputMetadataResponse {
    /**
     * The ID of the output.
     */
    outputId: OutputId;
    /**
     * The ID of the block in which the output was included.
     */
    blockId: BlockId;
    /**
     * Metadata of the output if it is included in the ledger.
     */
    included: OutputInclusionMetadata;
    /**
     * Metadata of the output if it is marked as spent in the ledger.
     */
    spent?: OutputConsumptionMetadata;
    /**
     * Latest commitment ID of the node.
     */
    latestCommitmentId: SlotCommitmentId;
}
/**
 * An output with its output id proof and its metadata.
 * Response of GET /api/core/v3/outputs/{outputId}/full.
 */
export declare class OutputWithMetadataResponse {
    /**
     * One of the possible output types.
     */
    output: Output;
    /**
     * The associated Output ID proof.
     */
    outputIdProof: OutputIdProof;
    /**
     * The metadata of the output.
     */
    metadata: OutputMetadataResponse;
}
/**
 * An output and its metadata.
 */
export declare class OutputWithMetadata {
    /**
     * One of the possible output types.
     */
    output: Output;
    /**
     * The metadata of the output.
     */
    metadata: OutputMetadataResponse;
}
/**
 * Metadata of a transaction.
 */
export interface TransactionMetadataResponse {
    /**
     * The transaction id.
     */
    transactionId: TransactionId;
    /**
     * The transaction state.
     */
    transactionState: TransactionState;
    /**
     * The slot of the earliest included valid block that contains an attachment of the transaction.
     */
    earliestAttachmentSlot: SlotIndex;
    /**
     * If applicable, indicates the error that occurred during the transaction processing.
     */
    transactionFailureReason?: TransactionFailureReason;
    /**
     * Contains the detailed error message that occurred during the transaction processing if the debug mode was activated in the retainer.
     */
    transactionFailureDetails?: string;
}
/**
 * Reason for transaction failure.
 */
export declare enum TransactionFailureReason {
    None = 0,
    ConflictRejected = 1,
    Orphaned = 2,
    InputAlreadySpent = 3,
    InputCreationAfterTxCreation = 4,
    UnlockSignatureInvalid = 5,
    ChainAddressUnlockInvalid = 6,
    DirectUnlockableAddressUnlockInvalid = 7,
    MultiAddressUnlockInvalid = 8,
    CommitmentInputReferenceInvalid = 9,
    BicInputReferenceInvalid = 10,
    RewardInputReferenceInvalid = 11,
    StakingRewardCalculationFailure = 12,
    DelegationRewardCalculationFailure = 13,
    InputOutputBaseTokenMismatch = 14,
    ManaOverflow = 15,
    InputOutputManaMismatch = 16,
    ManaDecayCreationIndexExceedsTargetIndex = 17,
    NativeTokenSumUnbalanced = 18,
    SimpleTokenSchemeMintedMeltedTokenDecrease = 19,
    SimpleTokenSchemeMintingInvalid = 20,
    SimpleTokenSchemeMeltingInvalid = 21,
    SimpleTokenSchemeMaximumSupplyChanged = 22,
    SimpleTokenSchemeGenesisInvalid = 23,
    MultiAddressLengthUnlockLengthMismatch = 24,
    MultiAddressUnlockThresholdNotReached = 25,
    SenderFeatureNotUnlocked = 26,
    IssuerFeatureNotUnlocked = 27,
    StakingRewardInputMissing = 28,
    StakingCommitmentInputMissing = 29,
    StakingRewardClaimingInvalid = 30,
    StakingFeatureRemovedBeforeUnbonding = 31,
    StakingFeatureModifiedBeforeUnbonding = 32,
    StakingStartEpochInvalid = 33,
    StakingEndEpochTooEarly = 34,
    BlockIssuerCommitmentInputMissing = 35,
    BlockIssuanceCreditInputMissing = 36,
    BlockIssuerNotExpired = 37,
    BlockIssuerExpiryTooEarly = 38,
    ManaMovedOffBlockIssuerAccount = 39,
    AccountLocked = 40,
    TimelockCommitmentInputMissing = 41,
    TimelockNotExpired = 42,
    ExpirationCommitmentInputMissing = 43,
    ExpirationNotUnlockable = 44,
    ReturnAmountNotFulFilled = 45,
    NewChainOutputHasNonZeroedId = 46,
    ChainOutputImmutableFeaturesChanged = 47,
    ImplicitAccountDestructionDisallowed = 48,
    MultipleImplicitAccountCreationAddresses = 49,
    AccountInvalidFoundryCounter = 50,
    AnchorInvalidStateTransition = 51,
    AnchorInvalidGovernanceTransition = 52,
    FoundryTransitionWithoutAccount = 53,
    FoundrySerialInvalid = 54,
    DelegationCommitmentInputMissing = 55,
    DelegationRewardInputMissing = 56,
    DelegationRewardsClaimingInvalid = 57,
    DelegationOutputTransitionedTwice = 58,
    DelegationModified = 59,
    DelegationStartEpochInvalid = 60,
    DelegationAmountMismatch = 61,
    DelegationEndEpochNotZero = 62,
    DelegationEndEpochInvalid = 63,
    CapabilitiesNativeTokenBurningNotAllowed = 64,
    CapabilitiesManaBurningNotAllowed = 65,
    CapabilitiesAccountDestructionNotAllowed = 66,
    CapabilitiesAnchorDestructionNotAllowed = 67,
    CapabilitiesFoundryDestructionNotAllowed = 68,
    CapabilitiesNftDestructionNotAllowed = 69,
    SemanticValidationFailed = 255
}
/**
 * Transaction failure reason strings.
 */
export declare const TRANSACTION_FAILURE_REASON_STRINGS: {
    [key in TransactionFailureReason]: string;
};
