import { Signature } from '@radixdlt/crypto';
import { AddressT } from '@radixdlt/account';
import { DSONCodable, JSONEncodable } from '@radixdlt/data-formats';
import { SpunParticleQueryable, SpunParticles } from './particles/_types';
/**
 * A Radix resource identifier is a human readable index into the Ledger which points to a name state machine
 *
 * On format: `/:address/:name`, e.g.
 * `"/JH1P8f3znbyrDj8F4RWpix7hRkgxqHjdW2fNnKpR3v6ufXnknor/XRD"`
 */
export declare type ResourceIdentifierT = JSONEncodable & DSONCodable & Readonly<{
    address: AddressT;
    name: string;
    toString: () => string;
    equals: (other: ResourceIdentifierT) => boolean;
}>;
/**
 * An Atom Identifier, made up of 256 bits of a hash.
 * The Atom ID is used so that Atoms can be located using just their hash id.
 */
export declare type AtomIdentifierT = DSONCodable & Readonly<{
    toString: () => string;
    equals: (other: AtomIdentifierT) => boolean;
}>;
export declare type IsOwnerOfToken = () => boolean;
export declare enum TokenPermission {
    TOKEN_OWNER_ONLY = "token_owner_only",
    ALL = "all",
    NONE = "none"
}
export declare enum TokenTransition {
    MINT = "mint",
    BURN = "burn"
}
export declare const SERIALIZER_KEY = "serializer";
export declare type TokenPermissions = JSONEncodable & DSONCodable & Readonly<{
    permissions: Readonly<{
        [key in TokenTransition]: TokenPermission;
    }>;
    canBeMinted: (isOwnerOfToken: IsOwnerOfToken) => boolean;
    canBeBurned: (isOwnerOfToken: IsOwnerOfToken) => boolean;
    mintPermission: TokenPermission;
    equals: (other: TokenPermissions) => boolean;
}>;
export declare type ParticleGroupT = JSONEncodable & DSONCodable & SpunParticleQueryable & Readonly<{
    spunParticles: SpunParticles;
}>;
export declare type ParticleGroups = DSONCodable & SpunParticleQueryable & Readonly<{
    groups: ParticleGroupT[];
}>;
export declare type PublicKeyID = string;
export declare type SignatureID = PublicKeyID;
export declare type Signatures = Readonly<{
    [key in SignatureID]: Signature;
}>;
export declare type AtomT = JSONEncodable & DSONCodable & SpunParticleQueryable & Readonly<{
    particleGroups: ParticleGroups;
    signatures: Signatures;
    message?: string;
    equals: (other: AtomT) => boolean;
    identifier: () => AtomIdentifierT;
    isSigned: () => boolean;
}>;
//# sourceMappingURL=_types.d.ts.map