OptionalsettlementConfig: false | SettlementConfigMachine-readable status of every deprecated server signer the wallet currently holds funds under (Section 6), without migrating. Covers both VTXO and boarding holdings (Section 7), merged per signer.
Get boarding inputs whose timelock has expired.
These inputs can no longer be onboarded cooperatively via settle() and
must be swept back to a fresh boarding address using the unilateral exit path.
OptionalprefetchedUtxos: ExtendedCoin[]Array of expired boarding inputs
Get virtual outputs that are expiring soon based on renewal configuration
OptionalthresholdMs: numberOptional override for threshold in milliseconds
Array of expiring virtual outputs, empty array if renewal is disabled or no virtual outputs expiring
const wallet = await Wallet.create({
identity,
arkProvider: new RestArkProvider(),
settlementConfig: {
vtxoThreshold: 86_400 // 24 hours
},
});
const manager = await wallet.getVtxoManager();
const expiringVtxos = await manager.getExpiringVtxos();
if (expiringVtxos.length > 0) {
console.log(`${expiringVtxos.length} virtual outputs expiring soon`);
}
Get information about recoverable balance without executing recovery.
Useful for displaying to users before they decide to recover funds.
Both amounts are net of the operator's intent fees, so recoverable is
what recoverVtxos would actually hand back rather than the gross
sum of the inputs. subdust is net of the per-input fees only — the
output fee is charged on the batch as a whole and is not attributed per
coin — so it reports what the subdust coins are worth once each has paid
its own way, and is not strictly a slice of recoverable. It can exceed
recoverable where a flat output fee meets a wholly subdust wallet.
The batch size caps are not applied here: they defer the overflow to the next cycle rather than reducing what is recoverable.
Inputs a contract refuses right now are excluded, so this and
recoverVtxos answer over the same set. Balance.recoverable still
counts them: that field reports what the wallet owns, this one what a
batch would hand back today.
Object containing recoverable amounts and subdust information
const manager = await wallet.getVtxoManager();
const balance = await manager.getRecoverableBalance();
if (balance.recoverable > 0n) {
console.log(`You can recover ${balance.recoverable} sats`);
if (balance.includesSubdust) {
console.log(`This includes ${balance.subdust} sats from subdust virtual outputs`);
}
}
Cooperatively migrate VTXOs minted under a now-deprecated server signer to the wallet's active-signer address. See IVtxoManager.
Optionaloptions: MigrateDeprecatedSignerOptionsRecover swept/expired virtual outputs by settling them back to the wallet's Arkade address.
This method:
Note: Settled virtual outputs with long expiry are NOT recovered to avoid locking liquidity unnecessarily. Only preconfirmed subdust is recovered to consolidate small amounts.
Inputs whose contract refuses a spend right now — an immature VHTLC refund path — are skipped rather than failing the batch that holds them, and getRecoverableBalance skips the same set. See unspendableNow for which rows that reaches.
OptionaleventCallback: (event: SettlementEvent) => voidOptional callback to receive settlement events
Settlement transaction ID
Renew expiring virtual outputs by settling them back to the wallet's address
This method collects all expiring spendable virtual outputs (including recoverable ones) and settles them back to the wallet, effectively refreshing their expiration time. This is the primary way to prevent virtual outputs from expiring.
OptionaleventCallback: (event: SettlementEvent) => voidOptional callback for settlement events
Optionaloptions: RenewVtxosOptionsOptional per-call overrides; see RenewVtxosOptions
Settlement transaction ID
const manager = await wallet.getVtxoManager();
// Simple renewal
const txid = await manager.renewVtxos();
// With event callback
const txid = await manager.renewVtxos((event) => {
console.log('Settlement event:', event.type);
});
// Renew only VTXOs that expire within 6 hours
const txid = await manager.renewVtxos(undefined, { thresholdSeconds: 6 * 60 * 60 });
Sweep expired boarding inputs back to a fresh boarding address via the unilateral exit path (onchain self-spend).
This builds a raw onchain transaction that:
No Arkade server involvement is needed — this is a pure onchain transaction.
OptionalprefetchedUtxos: ExtendedCoin[]The broadcast transaction ID
const wallet = await Wallet.create({
identity,
arkProvider: new RestArkProvider(),
settlementConfig: {
boardingUtxoSweep: true,
},
});
const manager = await wallet.getVtxoManager();
try {
const txid = await manager.sweepExpiredBoardingUtxos();
console.log('Swept expired boarding inputs:', txid);
} catch (e) {
console.log('No sweep needed or not economical');
}
VtxoManager is a unified class for managing virtual output lifecycle operations including recovery of swept/expired virtual outputs and renewal to prevent expiration.
Key Features:
Virtual outputs become recoverable when:
isSwept) and they remain spendableExample