@arkade-os/sdk Documentation - v0.4.36
    Preparing search index...

    Interface IContractManager

    interface IContractManager {
        annotateVtxos(vtxos: VirtualCoin[]): Promise<ExtendedVirtualCoin[]>;
        createContract(params: CreateContractParams): Promise<Contract>;
        deleteContract(script: string): Promise<void>;
        dispose(): void;
        getAllSpendingPaths(
            options: GetAllSpendingPathsOptions,
        ): Promise<PathSelection[]>;
        getContracts(filter?: ContractFilter): Promise<Contract[]>;
        getContractsWithVtxos(
            filter?: ContractFilter,
        ): Promise<ContractWithVtxos[]>;
        getSpendablePaths(
            options: GetSpendablePathsOptions,
        ): Promise<PathSelection[]>;
        isWatching(): Promise<boolean>;
        onContractEvent(callback: ContractEventCallback): () => void;
        refreshOutpoints(outpoints: Outpoint[]): Promise<void>;
        refreshVtxos(opts?: RefreshVtxosOptions): Promise<void>;
        scanContracts(opts: ScanContractsOptions): Promise<ScanResult>;
        setContractState(script: string, state: ContractState): Promise<void>;
        updateContract(
            script: string,
            updates: Partial<Omit<Contract, "script" | "createdAt">>,
        ): Promise<Contract>;
    }

    Hierarchy

    • Disposable
      • IContractManager

    Implemented by

    Index

    Methods

    • Stamp raw virtual outputs with the correct per-contract tapscripts (forfeit, intent, tap tree).

      Resolves each vtxo's script to its owning contract via the contract repository and attaches the matching tapscripts. Throws when any vtxo references a script with no registered contract — callers are expected to register the contract before asking for annotation. This is the single shared path that replaces scattered extendVirtualCoin* calls in wallet/handler code, and keeps the wallet from silently stamping the default tapscript onto a non-default vtxo.

      Parameters

      Returns Promise<ExtendedVirtualCoin[]>

    • Delete a contract by script and stop watching it (if applicable).

      Parameters

      • script: string

      Returns Promise<void>

    • Get all possible spending paths for a contract.

      Returns an empty array if the contract or its handler cannot be found.

      Parameters

      • options: GetAllSpendingPathsOptions

      Returns Promise<PathSelection[]>

    • List contracts with optional filters.

      Parameters

      • Optionalfilter: ContractFilter

      Returns Promise<Contract[]>

      const vhtlcs = await manager.getContracts({ type: "vhtlc" });
      const active = await manager.getContracts({ state: "active" });
    • Get all currently spendable paths for a contract.

      Returns an empty array if the contract or its handler cannot be found.

      Parameters

      • options: GetSpendablePathsOptions

      Returns Promise<PathSelection[]>

    • Reconcile specific outpoints with the indexer's authoritative state and upsert the result into the wallet repository.

      The cursor-derived delta sync filters by created_at, so a VTXO that was created before the cursor but spent recently won't surface in a standard refreshVtxos() call. This method is the surgical recovery path for that case: when something hands us a stale outpoint (e.g. the server returns VTXO_ALREADY_SPENT with a vtxo_outpoint in its error metadata), call this to pull the latest state and unblock the caller — no full re-scan, no cursor change.

      Outpoints not owned by any tracked contract are silently dropped.

      Parameters

      Returns Promise<void>

    • Force a virtual output refresh from the indexer.

      Without options, refreshes all contracts from scratch. With options, narrows the refresh to specific scripts and/or a time window.

      Parameters

      • Optionalopts: RefreshVtxosOptions

      Returns Promise<void>

    • Explicit, gap-limit contract discovery used by wallet.restore().

      Walks HD indices from 0, asking every registered Discoverable handler whether it owns a contract anchored at that index, and registers each find via the idempotent createContract. A hit at index i (by any handler, including an injected swap handler) resets the gap counter, so swap discovery keeps the HD window open.

      Error contract (safety-critical — see spec §4):

      • A handler's discoverAt rejecting is collected into handlerErrors and the loop continues; it never aborts the scan or throws.
      • A fatal operational error — materialize() throwing, or createContract rejecting — propagates out of scanContracts (it invalidates the gap-window signal, so a silent truncation would risk hiding user funds).

      Returns Promise<ScanResult>

      { lastIndexUsed, handlerErrors } — the caller surfaces handlerErrors after the inline VTXO pull.

    • Update mutable contract fields.

      script and createdAt are immutable.

      Parameters

      • script: string
      • updates: Partial<Omit<Contract, "script" | "createdAt">>

      Returns Promise<Contract>