@gvnrdao/dh-lit-actions 0.0.61 → 0.0.63
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/pkg-dist/pkg-src/constants/chunks/contract-deployments.d.ts.map +1 -0
- package/pkg-dist/pkg-src/constants/chunks/contract-deployments.js.map +1 -0
- package/pkg-dist/pkg-src/constants/chunks/lit-actions-registry.d.ts.map +1 -0
- package/pkg-dist/pkg-src/constants/chunks/lit-actions-registry.js.map +1 -0
- package/pkg-dist/pkg-src/constants/chunks/package-registry.d.ts.map +1 -0
- package/pkg-dist/pkg-src/constants/chunks/package-registry.js.map +1 -0
- package/pkg-dist/pkg-src/constants/index.d.ts.map +1 -0
- package/pkg-dist/pkg-src/constants/index.js.map +1 -0
- package/pkg-dist/pkg-src/executors/chunks/vault-snapshot-executor.d.ts +40 -0
- package/pkg-dist/pkg-src/executors/chunks/vault-snapshot-executor.d.ts.map +1 -0
- package/pkg-dist/pkg-src/executors/chunks/vault-snapshot-executor.js +102 -0
- package/pkg-dist/pkg-src/executors/chunks/vault-snapshot-executor.js.map +1 -0
- package/pkg-dist/pkg-src/executors/index.d.ts +43 -0
- package/pkg-dist/pkg-src/executors/index.d.ts.map +1 -0
- package/pkg-dist/pkg-src/executors/index.js +48 -0
- package/pkg-dist/pkg-src/executors/index.js.map +1 -0
- package/pkg-dist/pkg-src/index.d.ts.map +1 -0
- package/pkg-dist/pkg-src/index.js.map +1 -0
- package/pkg-dist/pkg-src/interfaces/chunks/diamond-hands-lit-actions.i.d.ts.map +1 -0
- package/pkg-dist/pkg-src/interfaces/chunks/diamond-hands-lit-actions.i.js.map +1 -0
- package/pkg-dist/pkg-src/interfaces/chunks/lit-action-config.i.d.ts.map +1 -0
- package/pkg-dist/pkg-src/interfaces/chunks/lit-action-config.i.js.map +1 -0
- package/pkg-dist/pkg-src/interfaces/chunks/lit-action-name.i.d.ts.map +1 -0
- package/pkg-dist/pkg-src/interfaces/chunks/lit-action-name.i.js.map +1 -0
- package/pkg-dist/pkg-src/interfaces/chunks/lit-action-registry.i.d.ts.map +1 -0
- package/pkg-dist/pkg-src/interfaces/chunks/lit-action-registry.i.js.map +1 -0
- package/pkg-dist/pkg-src/interfaces/chunks/pkp-info.i.d.ts.map +1 -0
- package/pkg-dist/pkg-src/interfaces/chunks/pkp-info.i.js.map +1 -0
- package/pkg-dist/pkg-src/interfaces/deployments.d.ts.map +1 -0
- package/pkg-dist/pkg-src/interfaces/deployments.js.map +1 -0
- package/pkg-dist/pkg-src/interfaces/index.d.ts.map +1 -0
- package/pkg-dist/pkg-src/interfaces/index.js.map +1 -0
- package/pkg-dist/pkg-src/utils/chunks/cid-utils.d.ts.map +1 -0
- package/pkg-dist/pkg-src/utils/chunks/cid-utils.js.map +1 -0
- package/pkg-dist/pkg-src/utils/chunks/connection-helpers.d.ts.map +1 -0
- package/pkg-dist/pkg-src/utils/chunks/connection-helpers.js.map +1 -0
- package/pkg-dist/pkg-src/utils/chunks/debug-logger.d.ts.map +1 -0
- package/pkg-dist/pkg-src/utils/chunks/debug-logger.js.map +1 -0
- package/pkg-dist/pkg-src/utils/chunks/error-classification.d.ts.map +1 -0
- package/pkg-dist/pkg-src/utils/chunks/error-classification.js.map +1 -0
- package/pkg-dist/pkg-src/utils/chunks/lit-action-helpers.d.ts.map +1 -0
- package/pkg-dist/pkg-src/utils/chunks/lit-action-helpers.js.map +1 -0
- package/pkg-dist/pkg-src/utils/chunks/pkp-setup.d.ts.map +1 -0
- package/pkg-dist/pkg-src/utils/chunks/pkp-setup.js.map +1 -0
- package/pkg-dist/pkg-src/utils/chunks/session-signature-cache.d.ts.map +1 -0
- package/pkg-dist/pkg-src/utils/chunks/session-signature-cache.js.map +1 -0
- package/pkg-dist/pkg-src/utils/index.d.ts.map +1 -0
- package/pkg-dist/pkg-src/utils/index.js.map +1 -0
- package/pkg-dist/src/constants/chunks/bitcoin-network-config.d.ts +130 -0
- package/pkg-dist/src/constants/chunks/bitcoin-network-config.d.ts.map +1 -0
- package/pkg-dist/src/constants/chunks/bitcoin-network-config.js +244 -0
- package/pkg-dist/src/constants/chunks/bitcoin-network-config.js.map +1 -0
- package/pkg-dist/src/constants/chunks/bitcoin.d.ts +42 -0
- package/pkg-dist/src/constants/chunks/bitcoin.d.ts.map +1 -0
- package/pkg-dist/src/constants/chunks/bitcoin.js +45 -0
- package/pkg-dist/src/constants/chunks/bitcoin.js.map +1 -0
- package/pkg-dist/src/constants/chunks/decimals.d.ts +44 -0
- package/pkg-dist/src/constants/chunks/decimals.d.ts.map +1 -0
- package/pkg-dist/src/constants/chunks/decimals.js +47 -0
- package/pkg-dist/src/constants/chunks/decimals.js.map +1 -0
- package/pkg-dist/src/constants/chunks/liquidation.d.ts +51 -0
- package/pkg-dist/src/constants/chunks/liquidation.d.ts.map +1 -0
- package/pkg-dist/src/constants/chunks/liquidation.js +54 -0
- package/pkg-dist/src/constants/chunks/liquidation.js.map +1 -0
- package/pkg-dist/src/constants/chunks/loan-status.d.ts +57 -0
- package/pkg-dist/src/constants/chunks/loan-status.d.ts.map +1 -0
- package/pkg-dist/src/constants/chunks/loan-status.js +95 -0
- package/pkg-dist/src/constants/chunks/loan-status.js.map +1 -0
- package/pkg-dist/src/constants/chunks/price-oracle.d.ts +46 -0
- package/pkg-dist/src/constants/chunks/price-oracle.d.ts.map +1 -0
- package/pkg-dist/src/constants/chunks/price-oracle.js +49 -0
- package/pkg-dist/src/constants/chunks/price-oracle.js.map +1 -0
- package/pkg-dist/src/constants/chunks/quantum-time.d.ts +63 -0
- package/pkg-dist/src/constants/chunks/quantum-time.d.ts.map +1 -0
- package/pkg-dist/src/constants/chunks/quantum-time.js +66 -0
- package/pkg-dist/src/constants/chunks/quantum-time.js.map +1 -0
- package/pkg-dist/src/constants/index.d.ts +16 -0
- package/pkg-dist/src/constants/index.d.ts.map +1 -0
- package/pkg-dist/src/constants/index.js +57 -0
- package/pkg-dist/src/constants/index.js.map +1 -0
- package/pkg-dist/src/interfaces/chunks/authorization.i.d.ts +19 -0
- package/pkg-dist/src/interfaces/chunks/authorization.i.d.ts.map +1 -0
- package/pkg-dist/src/interfaces/chunks/authorization.i.js +3 -0
- package/pkg-dist/src/interfaces/chunks/authorization.i.js.map +1 -0
- package/pkg-dist/src/interfaces/chunks/bitcoin-data-provider.i.d.ts +60 -0
- package/pkg-dist/src/interfaces/chunks/bitcoin-data-provider.i.d.ts.map +1 -0
- package/pkg-dist/src/interfaces/chunks/bitcoin-data-provider.i.js +3 -0
- package/pkg-dist/src/interfaces/chunks/bitcoin-data-provider.i.js.map +1 -0
- package/pkg-dist/src/interfaces/chunks/circuit-breaker.i.d.ts +18 -0
- package/pkg-dist/src/interfaces/chunks/circuit-breaker.i.d.ts.map +1 -0
- package/pkg-dist/src/interfaces/chunks/circuit-breaker.i.js +8 -0
- package/pkg-dist/src/interfaces/chunks/circuit-breaker.i.js.map +1 -0
- package/pkg-dist/src/interfaces/chunks/mint-authorization.i.d.ts +24 -0
- package/pkg-dist/src/interfaces/chunks/mint-authorization.i.d.ts.map +1 -0
- package/pkg-dist/src/interfaces/chunks/mint-authorization.i.js +5 -0
- package/pkg-dist/src/interfaces/chunks/mint-authorization.i.js.map +1 -0
- package/pkg-dist/src/interfaces/chunks/owner-authorization.d.ts +60 -0
- package/pkg-dist/src/interfaces/chunks/owner-authorization.d.ts.map +1 -0
- package/pkg-dist/src/interfaces/chunks/owner-authorization.js +8 -0
- package/pkg-dist/src/interfaces/chunks/owner-authorization.js.map +1 -0
- package/pkg-dist/src/interfaces/chunks/price-oracle.i.d.ts +26 -0
- package/pkg-dist/src/interfaces/chunks/price-oracle.i.d.ts.map +1 -0
- package/pkg-dist/src/interfaces/chunks/price-oracle.i.js +3 -0
- package/pkg-dist/src/interfaces/chunks/price-oracle.i.js.map +1 -0
- package/pkg-dist/src/interfaces/chunks/vault-balance-module.i.d.ts +23 -0
- package/pkg-dist/src/interfaces/chunks/vault-balance-module.i.d.ts.map +1 -0
- package/pkg-dist/src/interfaces/chunks/vault-balance-module.i.js +3 -0
- package/pkg-dist/src/interfaces/chunks/vault-balance-module.i.js.map +1 -0
- package/pkg-dist/src/interfaces/chunks/vault-balance.i.d.ts +63 -0
- package/pkg-dist/src/interfaces/chunks/vault-balance.i.d.ts.map +1 -0
- package/pkg-dist/src/interfaces/chunks/vault-balance.i.js +3 -0
- package/pkg-dist/src/interfaces/chunks/vault-balance.i.js.map +1 -0
- package/pkg-dist/src/interfaces/chunks/vault-snapshot.i.d.ts +51 -0
- package/pkg-dist/src/interfaces/chunks/vault-snapshot.i.d.ts.map +1 -0
- package/pkg-dist/src/interfaces/chunks/vault-snapshot.i.js +3 -0
- package/pkg-dist/src/interfaces/chunks/vault-snapshot.i.js.map +1 -0
- package/pkg-dist/src/interfaces/index.d.ts +15 -0
- package/pkg-dist/src/interfaces/index.d.ts.map +1 -0
- package/pkg-dist/src/interfaces/index.js +30 -0
- package/pkg-dist/src/interfaces/index.js.map +1 -0
- package/pkg-dist/src/modules/authorization.module.d.ts +160 -0
- package/pkg-dist/src/modules/authorization.module.d.ts.map +1 -0
- package/pkg-dist/src/modules/authorization.module.js +317 -0
- package/pkg-dist/src/modules/authorization.module.js.map +1 -0
- package/pkg-dist/src/modules/bitcoin-data-provider.module.d.ts +91 -0
- package/pkg-dist/src/modules/bitcoin-data-provider.module.d.ts.map +1 -0
- package/pkg-dist/src/modules/bitcoin-data-provider.module.js +261 -0
- package/pkg-dist/src/modules/bitcoin-data-provider.module.js.map +1 -0
- package/pkg-dist/src/modules/business-rules-math.module.d.ts +155 -0
- package/pkg-dist/src/modules/business-rules-math.module.d.ts.map +1 -0
- package/pkg-dist/src/modules/business-rules-math.module.js +309 -0
- package/pkg-dist/src/modules/business-rules-math.module.js.map +1 -0
- package/pkg-dist/src/modules/price-oracle.module.d.ts +29 -0
- package/pkg-dist/src/modules/price-oracle.module.d.ts.map +1 -0
- package/pkg-dist/src/modules/price-oracle.module.js +223 -0
- package/pkg-dist/src/modules/price-oracle.module.js.map +1 -0
- package/pkg-dist/src/modules/protocol-parameters.module.d.ts +58 -0
- package/pkg-dist/src/modules/protocol-parameters.module.d.ts.map +1 -0
- package/pkg-dist/src/modules/protocol-parameters.module.js +125 -0
- package/pkg-dist/src/modules/protocol-parameters.module.js.map +1 -0
- package/pkg-dist/src/modules/quantum-time.module.d.ts +149 -0
- package/pkg-dist/src/modules/quantum-time.module.d.ts.map +1 -0
- package/pkg-dist/src/modules/quantum-time.module.js +240 -0
- package/pkg-dist/src/modules/quantum-time.module.js.map +1 -0
- package/pkg-dist/src/modules/vault-balance.module.d.ts +172 -0
- package/pkg-dist/src/modules/vault-balance.module.d.ts.map +1 -0
- package/pkg-dist/src/modules/vault-balance.module.js +318 -0
- package/pkg-dist/src/modules/vault-balance.module.js.map +1 -0
- package/pkg-dist/src/modules/vault-snapshot.d.ts +168 -0
- package/pkg-dist/src/modules/vault-snapshot.d.ts.map +1 -0
- package/pkg-dist/src/modules/vault-snapshot.js +370 -0
- package/pkg-dist/src/modules/vault-snapshot.js.map +1 -0
- package/pkg-dist/constants/chunks/contract-deployments.d.ts.map +0 -1
- package/pkg-dist/constants/chunks/contract-deployments.js.map +0 -1
- package/pkg-dist/constants/chunks/lit-actions-registry.d.ts.map +0 -1
- package/pkg-dist/constants/chunks/lit-actions-registry.js.map +0 -1
- package/pkg-dist/constants/chunks/package-registry.d.ts.map +0 -1
- package/pkg-dist/constants/chunks/package-registry.js.map +0 -1
- package/pkg-dist/constants/index.d.ts.map +0 -1
- package/pkg-dist/constants/index.js.map +0 -1
- package/pkg-dist/index.d.ts.map +0 -1
- package/pkg-dist/index.js.map +0 -1
- package/pkg-dist/interfaces/chunks/diamond-hands-lit-actions.i.d.ts.map +0 -1
- package/pkg-dist/interfaces/chunks/diamond-hands-lit-actions.i.js.map +0 -1
- package/pkg-dist/interfaces/chunks/lit-action-config.i.d.ts.map +0 -1
- package/pkg-dist/interfaces/chunks/lit-action-config.i.js.map +0 -1
- package/pkg-dist/interfaces/chunks/lit-action-name.i.d.ts.map +0 -1
- package/pkg-dist/interfaces/chunks/lit-action-name.i.js.map +0 -1
- package/pkg-dist/interfaces/chunks/lit-action-registry.i.d.ts.map +0 -1
- package/pkg-dist/interfaces/chunks/lit-action-registry.i.js.map +0 -1
- package/pkg-dist/interfaces/chunks/pkp-info.i.d.ts.map +0 -1
- package/pkg-dist/interfaces/chunks/pkp-info.i.js.map +0 -1
- package/pkg-dist/interfaces/deployments.d.ts.map +0 -1
- package/pkg-dist/interfaces/deployments.js.map +0 -1
- package/pkg-dist/interfaces/index.d.ts.map +0 -1
- package/pkg-dist/interfaces/index.js.map +0 -1
- package/pkg-dist/utils/chunks/cid-utils.d.ts.map +0 -1
- package/pkg-dist/utils/chunks/cid-utils.js.map +0 -1
- package/pkg-dist/utils/chunks/connection-helpers.d.ts.map +0 -1
- package/pkg-dist/utils/chunks/connection-helpers.js.map +0 -1
- package/pkg-dist/utils/chunks/debug-logger.d.ts.map +0 -1
- package/pkg-dist/utils/chunks/debug-logger.js.map +0 -1
- package/pkg-dist/utils/chunks/error-classification.d.ts.map +0 -1
- package/pkg-dist/utils/chunks/error-classification.js.map +0 -1
- package/pkg-dist/utils/chunks/lit-action-helpers.d.ts.map +0 -1
- package/pkg-dist/utils/chunks/lit-action-helpers.js.map +0 -1
- package/pkg-dist/utils/chunks/pkp-setup.d.ts.map +0 -1
- package/pkg-dist/utils/chunks/pkp-setup.js.map +0 -1
- package/pkg-dist/utils/chunks/session-signature-cache.d.ts.map +0 -1
- package/pkg-dist/utils/chunks/session-signature-cache.js.map +0 -1
- package/pkg-dist/utils/index.d.ts.map +0 -1
- package/pkg-dist/utils/index.js.map +0 -1
- /package/pkg-dist/{constants → pkg-src/constants}/chunks/contract-deployments.d.ts +0 -0
- /package/pkg-dist/{constants → pkg-src/constants}/chunks/contract-deployments.js +0 -0
- /package/pkg-dist/{constants → pkg-src/constants}/chunks/lit-actions-registry.d.ts +0 -0
- /package/pkg-dist/{constants → pkg-src/constants}/chunks/lit-actions-registry.js +0 -0
- /package/pkg-dist/{constants → pkg-src/constants}/chunks/package-registry.d.ts +0 -0
- /package/pkg-dist/{constants → pkg-src/constants}/chunks/package-registry.js +0 -0
- /package/pkg-dist/{constants → pkg-src/constants}/index.d.ts +0 -0
- /package/pkg-dist/{constants → pkg-src/constants}/index.js +0 -0
- /package/pkg-dist/{index.d.ts → pkg-src/index.d.ts} +0 -0
- /package/pkg-dist/{index.js → pkg-src/index.js} +0 -0
- /package/pkg-dist/{interfaces → pkg-src/interfaces}/chunks/diamond-hands-lit-actions.i.d.ts +0 -0
- /package/pkg-dist/{interfaces → pkg-src/interfaces}/chunks/diamond-hands-lit-actions.i.js +0 -0
- /package/pkg-dist/{interfaces → pkg-src/interfaces}/chunks/lit-action-config.i.d.ts +0 -0
- /package/pkg-dist/{interfaces → pkg-src/interfaces}/chunks/lit-action-config.i.js +0 -0
- /package/pkg-dist/{interfaces → pkg-src/interfaces}/chunks/lit-action-name.i.d.ts +0 -0
- /package/pkg-dist/{interfaces → pkg-src/interfaces}/chunks/lit-action-name.i.js +0 -0
- /package/pkg-dist/{interfaces → pkg-src/interfaces}/chunks/lit-action-registry.i.d.ts +0 -0
- /package/pkg-dist/{interfaces → pkg-src/interfaces}/chunks/lit-action-registry.i.js +0 -0
- /package/pkg-dist/{interfaces → pkg-src/interfaces}/chunks/pkp-info.i.d.ts +0 -0
- /package/pkg-dist/{interfaces → pkg-src/interfaces}/chunks/pkp-info.i.js +0 -0
- /package/pkg-dist/{interfaces → pkg-src/interfaces}/deployments.d.ts +0 -0
- /package/pkg-dist/{interfaces → pkg-src/interfaces}/deployments.js +0 -0
- /package/pkg-dist/{interfaces → pkg-src/interfaces}/index.d.ts +0 -0
- /package/pkg-dist/{interfaces → pkg-src/interfaces}/index.js +0 -0
- /package/pkg-dist/{utils → pkg-src/utils}/chunks/cid-utils.d.ts +0 -0
- /package/pkg-dist/{utils → pkg-src/utils}/chunks/cid-utils.js +0 -0
- /package/pkg-dist/{utils → pkg-src/utils}/chunks/connection-helpers.d.ts +0 -0
- /package/pkg-dist/{utils → pkg-src/utils}/chunks/connection-helpers.js +0 -0
- /package/pkg-dist/{utils → pkg-src/utils}/chunks/debug-logger.d.ts +0 -0
- /package/pkg-dist/{utils → pkg-src/utils}/chunks/debug-logger.js +0 -0
- /package/pkg-dist/{utils → pkg-src/utils}/chunks/error-classification.d.ts +0 -0
- /package/pkg-dist/{utils → pkg-src/utils}/chunks/error-classification.js +0 -0
- /package/pkg-dist/{utils → pkg-src/utils}/chunks/lit-action-helpers.d.ts +0 -0
- /package/pkg-dist/{utils → pkg-src/utils}/chunks/lit-action-helpers.js +0 -0
- /package/pkg-dist/{utils → pkg-src/utils}/chunks/pkp-setup.d.ts +0 -0
- /package/pkg-dist/{utils → pkg-src/utils}/chunks/pkp-setup.js +0 -0
- /package/pkg-dist/{utils → pkg-src/utils}/chunks/session-signature-cache.d.ts +0 -0
- /package/pkg-dist/{utils → pkg-src/utils}/chunks/session-signature-cache.js +0 -0
- /package/pkg-dist/{utils → pkg-src/utils}/index.d.ts +0 -0
- /package/pkg-dist/{utils → pkg-src/utils}/index.js +0 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vault Balance Module - Super Module for Trusted Balance Calculation
|
|
3
|
+
*
|
|
4
|
+
* Combines Bitcoin network data with smart contract state to calculate
|
|
5
|
+
* the "trusted balance" - the amount available for new authorizations.
|
|
6
|
+
*
|
|
7
|
+
* Formula: Available Balance = Total UTXOs - Authorized Spends
|
|
8
|
+
*
|
|
9
|
+
* This is the primary source of truth for determining if a new spending
|
|
10
|
+
* authorization can be created for a given position.
|
|
11
|
+
*/
|
|
12
|
+
import { AuthorizedSpend, UTXO, VaultBalanceConfig, VaultBalanceResult } from "../interfaces/chunks/vault-balance.i";
|
|
13
|
+
import { IVaultBalance } from "../interfaces/chunks/vault-balance-module.i";
|
|
14
|
+
/**
|
|
15
|
+
* Vault Balance Module
|
|
16
|
+
*
|
|
17
|
+
* This module is the "super module" that combines:
|
|
18
|
+
* 1. Bitcoin network data (UTXOs from bitcoin-data-provider)
|
|
19
|
+
* 2. Smart contract state (authorized spends from contract)
|
|
20
|
+
*
|
|
21
|
+
* To produce: Trusted Balance = Total - Authorized
|
|
22
|
+
*
|
|
23
|
+
* DESIGN NOTES:
|
|
24
|
+
*
|
|
25
|
+
* 1. Change Output Handling:
|
|
26
|
+
* When a UTXO is spent, the change output will have a DIFFERENT txid.
|
|
27
|
+
* This means we don't need special logic for change - it appears as a new UTXO.
|
|
28
|
+
* The old UTXO (original deposit) will be gone from Bitcoin queries.
|
|
29
|
+
*
|
|
30
|
+
* 2. Authorization is Commitment:
|
|
31
|
+
* Any UTXO in the AuthorizedSpend array is considered committed/consumed.
|
|
32
|
+
* Once authorized, it's the user's responsibility to sign and broadcast.
|
|
33
|
+
* If they don't, that's their problem - not the ecosystem's concern.
|
|
34
|
+
*
|
|
35
|
+
* 3. Security Model - Dual Source of Truth:
|
|
36
|
+
* - Bitcoin Network: What UTXOs actually exist
|
|
37
|
+
* - Smart Contract: What UTXOs are authorized to be spent
|
|
38
|
+
* - Available Balance = Total UTXOs - Authorized UTXOs
|
|
39
|
+
*
|
|
40
|
+
* This prevents double-spending by ensuring the same UTXO cannot be
|
|
41
|
+
* authorized twice. The contract's isAuthorizedSpend mapping enforces this.
|
|
42
|
+
*
|
|
43
|
+
* 4. Race Condition Protection:
|
|
44
|
+
* The FAFO (First Actor Fails Others) model protects against concurrent
|
|
45
|
+
* authorization attempts via state hash commitment in quantum time windows.
|
|
46
|
+
* This module provides the trusted balance INPUT to that authorization process.
|
|
47
|
+
*
|
|
48
|
+
* 5. UTXO Matching:
|
|
49
|
+
* We match authorized spends to UTXOs by (txid, vout) pair.
|
|
50
|
+
* A UTXO is available if it exists in Bitcoin but NOT in authorized spends.
|
|
51
|
+
*
|
|
52
|
+
* 6. Edge Cases:
|
|
53
|
+
* - UTXO authorized but not yet spent: Appears in Bitcoin, appears in contract
|
|
54
|
+
* - UTXO spent: Doesn't appear in Bitcoin, may still appear in contract
|
|
55
|
+
* - New deposit: Appears in Bitcoin, doesn't appear in contract
|
|
56
|
+
*/
|
|
57
|
+
export declare class VaultBalanceModule implements IVaultBalance {
|
|
58
|
+
private config;
|
|
59
|
+
private bitcoinProvider;
|
|
60
|
+
constructor(config: VaultBalanceConfig);
|
|
61
|
+
/**
|
|
62
|
+
* Calculate trusted balance for a position
|
|
63
|
+
*
|
|
64
|
+
* This is the main entry point for determining available balance.
|
|
65
|
+
*
|
|
66
|
+
* CRITICAL: Validates that all authorized spends have been properly broadcasted
|
|
67
|
+
* to Bitcoin network with sufficient confirmations. Throws errors if:
|
|
68
|
+
* 1. Authorized transaction not found on network (not broadcasted)
|
|
69
|
+
* 2. Authorized transaction has insufficient confirmations (network updating)
|
|
70
|
+
*
|
|
71
|
+
* @param positionId - The position ID to check
|
|
72
|
+
* @param vaultAddress - Bitcoin address of the vault
|
|
73
|
+
* @returns Complete breakdown of vault balance
|
|
74
|
+
* @throws Error if authorized spends are in invalid state
|
|
75
|
+
*/
|
|
76
|
+
calculateTrustedBalance(positionId: string, vaultAddress: string): Promise<VaultBalanceResult>;
|
|
77
|
+
/**
|
|
78
|
+
* Get just the trusted balance amount
|
|
79
|
+
*
|
|
80
|
+
* Convenience method when you only need the number.
|
|
81
|
+
*
|
|
82
|
+
* @param positionId - The position ID to check
|
|
83
|
+
* @param vaultAddress - Bitcoin address of the vault
|
|
84
|
+
* @returns Available balance in satoshis
|
|
85
|
+
*/
|
|
86
|
+
getTrustedBalance(positionId: string, vaultAddress: string): Promise<bigint>;
|
|
87
|
+
/**
|
|
88
|
+
* Get available UTXOs that can be used for new authorizations
|
|
89
|
+
*
|
|
90
|
+
* This is useful when you need to select specific UTXOs for authorization.
|
|
91
|
+
*
|
|
92
|
+
* @param positionId - The position ID to check
|
|
93
|
+
* @param vaultAddress - Bitcoin address of the vault
|
|
94
|
+
* @returns Array of available UTXOs
|
|
95
|
+
*/
|
|
96
|
+
getAvailableUTXOs(positionId: string, vaultAddress: string): Promise<UTXO[]>;
|
|
97
|
+
/**
|
|
98
|
+
* Check if a specific UTXO is available for authorization
|
|
99
|
+
*
|
|
100
|
+
* @param positionId - The position ID to check
|
|
101
|
+
* @param vaultAddress - Bitcoin address of the vault
|
|
102
|
+
* @param txid - Transaction ID of the UTXO
|
|
103
|
+
* @param vout - Output index of the UTXO
|
|
104
|
+
* @returns True if UTXO is available, false otherwise
|
|
105
|
+
*/
|
|
106
|
+
isUTXOAvailable(positionId: string, vaultAddress: string, txid: string, vout: number): Promise<boolean>;
|
|
107
|
+
/**
|
|
108
|
+
* Check if a UTXO is authorized (appears in authorized spends)
|
|
109
|
+
*
|
|
110
|
+
* @param utxo - The UTXO to check
|
|
111
|
+
* @param authorizedSpends - List of authorized spends from contract
|
|
112
|
+
* @returns True if UTXO is authorized, false otherwise
|
|
113
|
+
*/
|
|
114
|
+
private isUTXOAuthorized;
|
|
115
|
+
/**
|
|
116
|
+
* Query smart contract for authorized spends
|
|
117
|
+
*
|
|
118
|
+
* Calls the contract's getAuthorizedSpends(positionId) view function
|
|
119
|
+
* to retrieve all authorized Bitcoin spends for this position.
|
|
120
|
+
*
|
|
121
|
+
* Contract struct AuthorizedSpend:
|
|
122
|
+
* - txid: string
|
|
123
|
+
* - vout: uint32
|
|
124
|
+
* - satoshis: uint256
|
|
125
|
+
* - authorizedAt: uint256 (timestamp)
|
|
126
|
+
*
|
|
127
|
+
* @param positionId - The position ID to query
|
|
128
|
+
* @returns Array of authorized spends for this position
|
|
129
|
+
*/
|
|
130
|
+
protected getAuthorizedSpendsFromContract(positionId: string): Promise<AuthorizedSpend[]>;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Factory function to create VaultBalanceModule instance
|
|
134
|
+
*
|
|
135
|
+
* @param config - Configuration for the module
|
|
136
|
+
* @returns VaultBalanceModule instance
|
|
137
|
+
*/
|
|
138
|
+
export declare function createVaultBalanceModule(config: VaultBalanceConfig): VaultBalanceModule;
|
|
139
|
+
/**
|
|
140
|
+
* USAGE EXAMPLE:
|
|
141
|
+
*
|
|
142
|
+
* ```typescript
|
|
143
|
+
* import { createVaultBalanceModule } from './vault-balance.module';
|
|
144
|
+
* import { BitcoinDataProvider } from './bitcoin-data-provider.module';
|
|
145
|
+
*
|
|
146
|
+
* const bitcoinProvider = new BitcoinDataProvider({
|
|
147
|
+
* providerUrl: 'https://blockstream.info/testnet/api'
|
|
148
|
+
* });
|
|
149
|
+
*
|
|
150
|
+
* const vaultBalance = createVaultBalanceModule({
|
|
151
|
+
* contractAddress: '0x...',
|
|
152
|
+
* chain: 'sepolia',
|
|
153
|
+
* bitcoinProvider,
|
|
154
|
+
* minConfirmations: 6
|
|
155
|
+
* });
|
|
156
|
+
*
|
|
157
|
+
* // Get complete balance breakdown
|
|
158
|
+
* const result = await vaultBalance.calculateTrustedBalance(
|
|
159
|
+
* 'position123',
|
|
160
|
+
* 'tb1q...'
|
|
161
|
+
* );
|
|
162
|
+
*
|
|
163
|
+
* console.log('Total Balance:', result.totalBalance, 'sats');
|
|
164
|
+
* console.log('Authorized Balance:', result.authorizedBalance, 'sats');
|
|
165
|
+
* console.log('Available Balance:', result.availableBalance, 'sats');
|
|
166
|
+
*
|
|
167
|
+
* // Or just get the available amount
|
|
168
|
+
* const available = await vaultBalance.getTrustedBalance('position123', 'tb1q...');
|
|
169
|
+
* console.log('Can authorize:', available, 'sats');
|
|
170
|
+
* ```
|
|
171
|
+
*/
|
|
172
|
+
//# sourceMappingURL=vault-balance.module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-balance.module.d.ts","sourceRoot":"","sources":["../../../src/modules/vault-balance.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,eAAe,EACf,IAAI,EAEJ,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAG5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACtD,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,eAAe,CAAuB;gBAElC,MAAM,EAAE,kBAAkB;IAKtC;;;;;;;;;;;;;;OAcG;IACG,uBAAuB,CAC3B,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,kBAAkB,CAAC;IA6E9B;;;;;;;;OAQG;IACG,iBAAiB,CACrB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC;IAKlB;;;;;;;;OAQG;IACG,iBAAiB,CACrB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,EAAE,CAAC;IAKlB;;;;;;;;OAQG;IACG,eAAe,CACnB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC;IAUnB;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IASxB;;;;;;;;;;;;;;OAcG;cACa,+BAA+B,CAC7C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,EAAE,CAAC;CA8F9B;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,kBAAkB,GACzB,kBAAkB,CAEpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG"}
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Vault Balance Module - Super Module for Trusted Balance Calculation
|
|
4
|
+
*
|
|
5
|
+
* Combines Bitcoin network data with smart contract state to calculate
|
|
6
|
+
* the "trusted balance" - the amount available for new authorizations.
|
|
7
|
+
*
|
|
8
|
+
* Formula: Available Balance = Total UTXOs - Authorized Spends
|
|
9
|
+
*
|
|
10
|
+
* This is the primary source of truth for determining if a new spending
|
|
11
|
+
* authorization can be created for a given position.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.VaultBalanceModule = void 0;
|
|
15
|
+
exports.createVaultBalanceModule = createVaultBalanceModule;
|
|
16
|
+
/**
|
|
17
|
+
* Vault Balance Module
|
|
18
|
+
*
|
|
19
|
+
* This module is the "super module" that combines:
|
|
20
|
+
* 1. Bitcoin network data (UTXOs from bitcoin-data-provider)
|
|
21
|
+
* 2. Smart contract state (authorized spends from contract)
|
|
22
|
+
*
|
|
23
|
+
* To produce: Trusted Balance = Total - Authorized
|
|
24
|
+
*
|
|
25
|
+
* DESIGN NOTES:
|
|
26
|
+
*
|
|
27
|
+
* 1. Change Output Handling:
|
|
28
|
+
* When a UTXO is spent, the change output will have a DIFFERENT txid.
|
|
29
|
+
* This means we don't need special logic for change - it appears as a new UTXO.
|
|
30
|
+
* The old UTXO (original deposit) will be gone from Bitcoin queries.
|
|
31
|
+
*
|
|
32
|
+
* 2. Authorization is Commitment:
|
|
33
|
+
* Any UTXO in the AuthorizedSpend array is considered committed/consumed.
|
|
34
|
+
* Once authorized, it's the user's responsibility to sign and broadcast.
|
|
35
|
+
* If they don't, that's their problem - not the ecosystem's concern.
|
|
36
|
+
*
|
|
37
|
+
* 3. Security Model - Dual Source of Truth:
|
|
38
|
+
* - Bitcoin Network: What UTXOs actually exist
|
|
39
|
+
* - Smart Contract: What UTXOs are authorized to be spent
|
|
40
|
+
* - Available Balance = Total UTXOs - Authorized UTXOs
|
|
41
|
+
*
|
|
42
|
+
* This prevents double-spending by ensuring the same UTXO cannot be
|
|
43
|
+
* authorized twice. The contract's isAuthorizedSpend mapping enforces this.
|
|
44
|
+
*
|
|
45
|
+
* 4. Race Condition Protection:
|
|
46
|
+
* The FAFO (First Actor Fails Others) model protects against concurrent
|
|
47
|
+
* authorization attempts via state hash commitment in quantum time windows.
|
|
48
|
+
* This module provides the trusted balance INPUT to that authorization process.
|
|
49
|
+
*
|
|
50
|
+
* 5. UTXO Matching:
|
|
51
|
+
* We match authorized spends to UTXOs by (txid, vout) pair.
|
|
52
|
+
* A UTXO is available if it exists in Bitcoin but NOT in authorized spends.
|
|
53
|
+
*
|
|
54
|
+
* 6. Edge Cases:
|
|
55
|
+
* - UTXO authorized but not yet spent: Appears in Bitcoin, appears in contract
|
|
56
|
+
* - UTXO spent: Doesn't appear in Bitcoin, may still appear in contract
|
|
57
|
+
* - New deposit: Appears in Bitcoin, doesn't appear in contract
|
|
58
|
+
*/
|
|
59
|
+
class VaultBalanceModule {
|
|
60
|
+
constructor(config) {
|
|
61
|
+
this.config = config;
|
|
62
|
+
this.bitcoinProvider = config.bitcoinProvider;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Calculate trusted balance for a position
|
|
66
|
+
*
|
|
67
|
+
* This is the main entry point for determining available balance.
|
|
68
|
+
*
|
|
69
|
+
* CRITICAL: Validates that all authorized spends have been properly broadcasted
|
|
70
|
+
* to Bitcoin network with sufficient confirmations. Throws errors if:
|
|
71
|
+
* 1. Authorized transaction not found on network (not broadcasted)
|
|
72
|
+
* 2. Authorized transaction has insufficient confirmations (network updating)
|
|
73
|
+
*
|
|
74
|
+
* @param positionId - The position ID to check
|
|
75
|
+
* @param vaultAddress - Bitcoin address of the vault
|
|
76
|
+
* @returns Complete breakdown of vault balance
|
|
77
|
+
* @throws Error if authorized spends are in invalid state
|
|
78
|
+
*/
|
|
79
|
+
async calculateTrustedBalance(positionId, vaultAddress) {
|
|
80
|
+
const minConfirmations = this.config.minConfirmations || 6;
|
|
81
|
+
// 1. Get all UTXOs from Bitcoin network
|
|
82
|
+
const utxoSet = await this.bitcoinProvider.getUTXOSet(vaultAddress, minConfirmations);
|
|
83
|
+
// 2. Get authorized spends from smart contract
|
|
84
|
+
const authorizedSpends = await this.getAuthorizedSpendsFromContract(positionId);
|
|
85
|
+
// 3. CRITICAL: Validate each authorized spend state
|
|
86
|
+
// For each authorized spend, check if UTXO still exists as unspent
|
|
87
|
+
for (const spend of authorizedSpends) {
|
|
88
|
+
const utxoStillExists = utxoSet.utxos.some((utxo) => utxo.txid === spend.txid && utxo.vout === spend.vout);
|
|
89
|
+
if (utxoStillExists) {
|
|
90
|
+
// ERROR B: UTXO authorized in contract but still unspent on Bitcoin network
|
|
91
|
+
// This means SDK authorized but never signed/broadcasted the spending transaction
|
|
92
|
+
throw new Error(`Authorized UTXO ${spend.txid}:${spend.vout} not yet spent. ` +
|
|
93
|
+
`Transaction was authorized in smart contract but not signed and broadcasted to Bitcoin network. ` +
|
|
94
|
+
`Complete the transaction by signing and broadcasting it.`);
|
|
95
|
+
}
|
|
96
|
+
// UTXO no longer exists as unspent (it's been spent)
|
|
97
|
+
// This is expected - now we verify the spending transaction has enough confirmations
|
|
98
|
+
// Note: spend.txid refers to the INPUT UTXO, not the spending transaction
|
|
99
|
+
// We cannot validate spending transaction confirmations without storing its txid
|
|
100
|
+
// For now, we trust that if UTXO doesn't exist, it's been properly spent
|
|
101
|
+
// TODO: Consider adding spendingTxid to AuthorizedSpend for full validation
|
|
102
|
+
}
|
|
103
|
+
// 4. Calculate authorized balance (sum of all authorized spends)
|
|
104
|
+
const authorizedBalance = authorizedSpends.reduce((sum, spend) => sum + spend.satoshis, 0n);
|
|
105
|
+
// 5. Filter out UTXOs that are authorized (not available)
|
|
106
|
+
// Note: After validation above, authorized UTXOs should NOT appear in utxoSet
|
|
107
|
+
// But we filter anyway for safety
|
|
108
|
+
const availableUTXOs = utxoSet.utxos.filter((utxo) => !this.isUTXOAuthorized(utxo, authorizedSpends));
|
|
109
|
+
// 6. Calculate available balance
|
|
110
|
+
const availableBalance = availableUTXOs.reduce((sum, utxo) => sum + utxo.satoshis, 0n);
|
|
111
|
+
return {
|
|
112
|
+
// Total from Bitcoin
|
|
113
|
+
totalUTXOs: utxoSet.utxos,
|
|
114
|
+
totalBalance: utxoSet.totalBalance,
|
|
115
|
+
// Authorized from Contract
|
|
116
|
+
authorizedUTXOs: authorizedSpends,
|
|
117
|
+
authorizedBalance,
|
|
118
|
+
// Available = Total - Authorized (THIS IS THE TRUSTED BALANCE)
|
|
119
|
+
availableUTXOs,
|
|
120
|
+
availableBalance,
|
|
121
|
+
// Metadata
|
|
122
|
+
vaultAddress,
|
|
123
|
+
positionId,
|
|
124
|
+
timestamp: Date.now(),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get just the trusted balance amount
|
|
129
|
+
*
|
|
130
|
+
* Convenience method when you only need the number.
|
|
131
|
+
*
|
|
132
|
+
* @param positionId - The position ID to check
|
|
133
|
+
* @param vaultAddress - Bitcoin address of the vault
|
|
134
|
+
* @returns Available balance in satoshis
|
|
135
|
+
*/
|
|
136
|
+
async getTrustedBalance(positionId, vaultAddress) {
|
|
137
|
+
const result = await this.calculateTrustedBalance(positionId, vaultAddress);
|
|
138
|
+
return result.availableBalance;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get available UTXOs that can be used for new authorizations
|
|
142
|
+
*
|
|
143
|
+
* This is useful when you need to select specific UTXOs for authorization.
|
|
144
|
+
*
|
|
145
|
+
* @param positionId - The position ID to check
|
|
146
|
+
* @param vaultAddress - Bitcoin address of the vault
|
|
147
|
+
* @returns Array of available UTXOs
|
|
148
|
+
*/
|
|
149
|
+
async getAvailableUTXOs(positionId, vaultAddress) {
|
|
150
|
+
const result = await this.calculateTrustedBalance(positionId, vaultAddress);
|
|
151
|
+
return result.availableUTXOs;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Check if a specific UTXO is available for authorization
|
|
155
|
+
*
|
|
156
|
+
* @param positionId - The position ID to check
|
|
157
|
+
* @param vaultAddress - Bitcoin address of the vault
|
|
158
|
+
* @param txid - Transaction ID of the UTXO
|
|
159
|
+
* @param vout - Output index of the UTXO
|
|
160
|
+
* @returns True if UTXO is available, false otherwise
|
|
161
|
+
*/
|
|
162
|
+
async isUTXOAvailable(positionId, vaultAddress, txid, vout) {
|
|
163
|
+
const availableUTXOs = await this.getAvailableUTXOs(positionId, vaultAddress);
|
|
164
|
+
return availableUTXOs.some((utxo) => utxo.txid === txid && utxo.vout === vout);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Check if a UTXO is authorized (appears in authorized spends)
|
|
168
|
+
*
|
|
169
|
+
* @param utxo - The UTXO to check
|
|
170
|
+
* @param authorizedSpends - List of authorized spends from contract
|
|
171
|
+
* @returns True if UTXO is authorized, false otherwise
|
|
172
|
+
*/
|
|
173
|
+
isUTXOAuthorized(utxo, authorizedSpends) {
|
|
174
|
+
return authorizedSpends.some((spend) => spend.txid === utxo.txid && spend.vout === utxo.vout);
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Query smart contract for authorized spends
|
|
178
|
+
*
|
|
179
|
+
* Calls the contract's getAuthorizedSpends(positionId) view function
|
|
180
|
+
* to retrieve all authorized Bitcoin spends for this position.
|
|
181
|
+
*
|
|
182
|
+
* Contract struct AuthorizedSpend:
|
|
183
|
+
* - txid: string
|
|
184
|
+
* - vout: uint32
|
|
185
|
+
* - satoshis: uint256
|
|
186
|
+
* - authorizedAt: uint256 (timestamp)
|
|
187
|
+
*
|
|
188
|
+
* @param positionId - The position ID to query
|
|
189
|
+
* @returns Array of authorized spends for this position
|
|
190
|
+
*/
|
|
191
|
+
async getAuthorizedSpendsFromContract(positionId) {
|
|
192
|
+
// For LIT Actions, Lit.Actions.call provides RPC access
|
|
193
|
+
// This uses the ethers.js-like interface available in LIT runtime
|
|
194
|
+
// Convert positionId to bytes32 if it's a hex string
|
|
195
|
+
const positionIdBytes32 = positionId.startsWith("0x")
|
|
196
|
+
? positionId
|
|
197
|
+
: `0x${positionId.padStart(64, "0")}`;
|
|
198
|
+
// ABI fragment for getAuthorizedSpends function
|
|
199
|
+
const getAuthorizedSpendsABI = [
|
|
200
|
+
{
|
|
201
|
+
inputs: [
|
|
202
|
+
{ internalType: "bytes32", name: "positionId", type: "bytes32" },
|
|
203
|
+
],
|
|
204
|
+
name: "getAuthorizedSpends",
|
|
205
|
+
outputs: [
|
|
206
|
+
{
|
|
207
|
+
components: [
|
|
208
|
+
{ internalType: "string", name: "txid", type: "string" },
|
|
209
|
+
{ internalType: "uint32", name: "vout", type: "uint32" },
|
|
210
|
+
{ internalType: "uint256", name: "satoshis", type: "uint256" },
|
|
211
|
+
{
|
|
212
|
+
internalType: "string",
|
|
213
|
+
name: "targetAddress",
|
|
214
|
+
type: "string",
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
internalType: "uint256",
|
|
218
|
+
name: "targetAmount",
|
|
219
|
+
type: "uint256",
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
internalType: "string",
|
|
223
|
+
name: "changeAddress",
|
|
224
|
+
type: "string",
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
internalType: "uint256",
|
|
228
|
+
name: "authorizedAt",
|
|
229
|
+
type: "uint256",
|
|
230
|
+
},
|
|
231
|
+
],
|
|
232
|
+
internalType: "struct LoanOperationsManager.AuthorizedSpend[]",
|
|
233
|
+
name: "",
|
|
234
|
+
type: "tuple[]",
|
|
235
|
+
},
|
|
236
|
+
],
|
|
237
|
+
stateMutability: "view",
|
|
238
|
+
type: "function",
|
|
239
|
+
},
|
|
240
|
+
];
|
|
241
|
+
// Get RPC URL - either from config (for local testing) or from Lit runtime
|
|
242
|
+
let rpcUrl;
|
|
243
|
+
if (this.config.rpcUrl) {
|
|
244
|
+
// Local testing: use provided RPC URL
|
|
245
|
+
rpcUrl = this.config.rpcUrl;
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
// Production: get RPC from Lit runtime
|
|
249
|
+
// @ts-ignore - Lit.Actions is available in LIT runtime
|
|
250
|
+
rpcUrl = await Lit.Actions.getRpcUrl({ chain: this.config.chain });
|
|
251
|
+
}
|
|
252
|
+
// Use ethers.js to query the contract directly
|
|
253
|
+
// @ts-ignore - ethers is available in LIT runtime
|
|
254
|
+
// StaticJsonRpcProvider with explicit network bypasses auto-detection (required for ngrok URLs)
|
|
255
|
+
const provider = new ethers.providers.StaticJsonRpcProvider(rpcUrl, {
|
|
256
|
+
name: "any",
|
|
257
|
+
chainId: 1337,
|
|
258
|
+
});
|
|
259
|
+
// @ts-ignore - ethers is available in LIT runtime
|
|
260
|
+
const contract = new ethers.Contract(this.config.contractAddress, getAuthorizedSpendsABI, provider);
|
|
261
|
+
const result = await contract.getAuthorizedSpends(positionIdBytes32);
|
|
262
|
+
// Transform contract response to our interface
|
|
263
|
+
return result.map((spend) => ({
|
|
264
|
+
txid: spend.txid,
|
|
265
|
+
vout: Number(spend.vout),
|
|
266
|
+
satoshis: BigInt(spend.satoshis.toString()),
|
|
267
|
+
positionId: positionId,
|
|
268
|
+
targetAddress: spend.targetAddress,
|
|
269
|
+
targetAmount: BigInt(spend.targetAmount.toString()),
|
|
270
|
+
changeAddress: spend.changeAddress,
|
|
271
|
+
timestamp: Number(spend.authorizedAt),
|
|
272
|
+
}));
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
exports.VaultBalanceModule = VaultBalanceModule;
|
|
276
|
+
/**
|
|
277
|
+
* Factory function to create VaultBalanceModule instance
|
|
278
|
+
*
|
|
279
|
+
* @param config - Configuration for the module
|
|
280
|
+
* @returns VaultBalanceModule instance
|
|
281
|
+
*/
|
|
282
|
+
function createVaultBalanceModule(config) {
|
|
283
|
+
return new VaultBalanceModule(config);
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* USAGE EXAMPLE:
|
|
287
|
+
*
|
|
288
|
+
* ```typescript
|
|
289
|
+
* import { createVaultBalanceModule } from './vault-balance.module';
|
|
290
|
+
* import { BitcoinDataProvider } from './bitcoin-data-provider.module';
|
|
291
|
+
*
|
|
292
|
+
* const bitcoinProvider = new BitcoinDataProvider({
|
|
293
|
+
* providerUrl: 'https://blockstream.info/testnet/api'
|
|
294
|
+
* });
|
|
295
|
+
*
|
|
296
|
+
* const vaultBalance = createVaultBalanceModule({
|
|
297
|
+
* contractAddress: '0x...',
|
|
298
|
+
* chain: 'sepolia',
|
|
299
|
+
* bitcoinProvider,
|
|
300
|
+
* minConfirmations: 6
|
|
301
|
+
* });
|
|
302
|
+
*
|
|
303
|
+
* // Get complete balance breakdown
|
|
304
|
+
* const result = await vaultBalance.calculateTrustedBalance(
|
|
305
|
+
* 'position123',
|
|
306
|
+
* 'tb1q...'
|
|
307
|
+
* );
|
|
308
|
+
*
|
|
309
|
+
* console.log('Total Balance:', result.totalBalance, 'sats');
|
|
310
|
+
* console.log('Authorized Balance:', result.authorizedBalance, 'sats');
|
|
311
|
+
* console.log('Available Balance:', result.availableBalance, 'sats');
|
|
312
|
+
*
|
|
313
|
+
* // Or just get the available amount
|
|
314
|
+
* const available = await vaultBalance.getTrustedBalance('position123', 'tb1q...');
|
|
315
|
+
* console.log('Can authorize:', available, 'sats');
|
|
316
|
+
* ```
|
|
317
|
+
*/
|
|
318
|
+
//# sourceMappingURL=vault-balance.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-balance.module.js","sourceRoot":"","sources":["../../../src/modules/vault-balance.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vault Snapshot Module - The Brain
|
|
3
|
+
*
|
|
4
|
+
* This module calculates ALL vault intelligence from simple contract state.
|
|
5
|
+
* It is the single source of truth for vault health metrics.
|
|
6
|
+
*
|
|
7
|
+
* Architecture:
|
|
8
|
+
* - Smart Contract: Stores simple state (ucdDebt, termStartTimestamp, btcCollateralSats)
|
|
9
|
+
* - This Module: Calculates everything else (ratios, thresholds, risk metrics)
|
|
10
|
+
*
|
|
11
|
+
* The vault-snapshot is used by:
|
|
12
|
+
* - Minting authorization (check if sufficient collateral)
|
|
13
|
+
* - Liquidation detection (check if under threshold)
|
|
14
|
+
* - UI display (show vault health to user)
|
|
15
|
+
* - Repayment calculations (how much can be repaid)
|
|
16
|
+
*/
|
|
17
|
+
import { VaultSnapshot, VaultSnapshotConfig } from "../interfaces/chunks/vault-snapshot.i";
|
|
18
|
+
/**
|
|
19
|
+
* Vault Snapshot Module
|
|
20
|
+
*
|
|
21
|
+
* The intelligence layer that transforms simple contract state into
|
|
22
|
+
* comprehensive vault health metrics.
|
|
23
|
+
*/
|
|
24
|
+
export declare class VaultSnapshotModule {
|
|
25
|
+
private config;
|
|
26
|
+
constructor(config: VaultSnapshotConfig);
|
|
27
|
+
/**
|
|
28
|
+
* Get complete vault snapshot
|
|
29
|
+
*
|
|
30
|
+
* This is the main entry point. Returns everything you need to know
|
|
31
|
+
* about a vault's health in a single call.
|
|
32
|
+
*
|
|
33
|
+
* @param positionId - Position to snapshot
|
|
34
|
+
* @returns Complete VaultSnapshot with all metrics
|
|
35
|
+
*/
|
|
36
|
+
getVaultSnapshot(positionId: string): Promise<VaultSnapshot>;
|
|
37
|
+
/**
|
|
38
|
+
* Query position state from smart contract
|
|
39
|
+
*
|
|
40
|
+
* Gets the simple state that contract stores:
|
|
41
|
+
* - positionId, pkpId, borrower, vaultAddress
|
|
42
|
+
* - ucdDebt
|
|
43
|
+
* - termStartTimestamp
|
|
44
|
+
* - selectedTerm
|
|
45
|
+
* - status
|
|
46
|
+
*/
|
|
47
|
+
protected queryPositionState(positionId: string): Promise<{
|
|
48
|
+
positionId: string;
|
|
49
|
+
pkpId: string;
|
|
50
|
+
borrower: string;
|
|
51
|
+
vaultAddress: string;
|
|
52
|
+
ucdDebt: bigint;
|
|
53
|
+
termStartTimestamp: number;
|
|
54
|
+
selectedTerm: number;
|
|
55
|
+
status: number;
|
|
56
|
+
}>;
|
|
57
|
+
/**
|
|
58
|
+
* Parse vault address based on format and network
|
|
59
|
+
*
|
|
60
|
+
* Supports two formats:
|
|
61
|
+
* 1. Single string: "mqM3ZR2N6DzZkafSdFqxEAkWovAU3uYTAN"
|
|
62
|
+
* 2. JSON object: {"mainnet":"bc1q...","testnet":"mqM3ZR2N6DzZkafSdFqxEAkWovAU3uYTAN"}
|
|
63
|
+
*
|
|
64
|
+
* @param rawVaultAddress Raw vault address from contract
|
|
65
|
+
* @param chain EVM chain (sepolia, ethereum)
|
|
66
|
+
* @returns Parsed Bitcoin address for the appropriate network
|
|
67
|
+
*/
|
|
68
|
+
private parseVaultAddress;
|
|
69
|
+
/**
|
|
70
|
+
* Quick check if position is liquidatable
|
|
71
|
+
*
|
|
72
|
+
* Convenience method when you only need to know if position can be liquidated.
|
|
73
|
+
*
|
|
74
|
+
* @param positionId - Position to check
|
|
75
|
+
* @returns True if position is liquidatable
|
|
76
|
+
*/
|
|
77
|
+
isLiquidatable(positionId: string): Promise<boolean>;
|
|
78
|
+
/**
|
|
79
|
+
* Get collateral ratio for position
|
|
80
|
+
*
|
|
81
|
+
* Convenience method when you only need the collateral ratio.
|
|
82
|
+
*
|
|
83
|
+
* @param positionId - Position to check
|
|
84
|
+
* @returns Collateral ratio in basis points
|
|
85
|
+
*/
|
|
86
|
+
getCollateralRatio(positionId: string): Promise<number>;
|
|
87
|
+
/**
|
|
88
|
+
* Get available BTC balance
|
|
89
|
+
*
|
|
90
|
+
* Convenience method when you only need available balance.
|
|
91
|
+
*
|
|
92
|
+
* @param positionId - Position to check
|
|
93
|
+
* @returns Available BTC in satoshis
|
|
94
|
+
*/
|
|
95
|
+
getAvailableBalance(positionId: string): Promise<bigint>;
|
|
96
|
+
/**
|
|
97
|
+
* Check if position has sufficient collateral for new debt
|
|
98
|
+
*
|
|
99
|
+
* Used by minting authorization to validate new mints.
|
|
100
|
+
*
|
|
101
|
+
* @param positionId - Position to check
|
|
102
|
+
* @param additionalDebt - Additional UCD debt to add
|
|
103
|
+
* @param requiredRatioBps - Required collateral ratio (e.g., 13000 for 130%)
|
|
104
|
+
* @returns True if sufficient collateral exists
|
|
105
|
+
*/
|
|
106
|
+
hasSufficientCollateral(positionId: string, additionalDebt: bigint, requiredRatioBps: number): Promise<boolean>;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Factory function to create VaultSnapshotModule
|
|
110
|
+
*
|
|
111
|
+
* @param config - Configuration
|
|
112
|
+
* @returns VaultSnapshotModule instance
|
|
113
|
+
*/
|
|
114
|
+
export declare function createVaultSnapshotModule(config: VaultSnapshotConfig): VaultSnapshotModule;
|
|
115
|
+
/**
|
|
116
|
+
* USAGE EXAMPLE:
|
|
117
|
+
*
|
|
118
|
+
* ```typescript
|
|
119
|
+
* import { createVaultSnapshotModule } from './modules/vault-snapshot';
|
|
120
|
+
* import { BitcoinDataProvider } from './modules/bitcoin-data-provider.module';
|
|
121
|
+
* import { PriceOracleModule } from './modules/price-oracle.module';
|
|
122
|
+
*
|
|
123
|
+
* // Initialize dependencies
|
|
124
|
+
* const bitcoinProvider = new BitcoinDataProvider({
|
|
125
|
+
* providerUrl: 'https://blockstream.info/testnet/api'
|
|
126
|
+
* });
|
|
127
|
+
*
|
|
128
|
+
* const priceOracle = new PriceOracleModule('mainnet');
|
|
129
|
+
*
|
|
130
|
+
* // Create vault balance module
|
|
131
|
+
* const vaultBalance = createVaultBalanceModule({
|
|
132
|
+
* contractAddress: '0x...',
|
|
133
|
+
* chain: 'sepolia',
|
|
134
|
+
* bitcoinProvider,
|
|
135
|
+
* minConfirmations: 6
|
|
136
|
+
* });
|
|
137
|
+
*
|
|
138
|
+
* // Create vault snapshot module
|
|
139
|
+
* const vaultSnapshot = createVaultSnapshotModule({
|
|
140
|
+
* contractAddress: '0x...',
|
|
141
|
+
* chain: 'sepolia',
|
|
142
|
+
* vaultBalance,
|
|
143
|
+
* priceOracle,
|
|
144
|
+
* });
|
|
145
|
+
*
|
|
146
|
+
* // Get complete snapshot
|
|
147
|
+
* const snapshot = await vaultSnapshot.getVaultSnapshot('position123');
|
|
148
|
+
*
|
|
149
|
+
* console.log('Position:', snapshot.positionId);
|
|
150
|
+
* console.log('Collateral Ratio:', snapshot.collateralRatioBps / 100, '%');
|
|
151
|
+
* console.log('Liquidatable:', snapshot.isLiquidatable);
|
|
152
|
+
* console.log('Days Until Expiry:', snapshot.daysUntilExpiry);
|
|
153
|
+
* console.log('Available BTC:', snapshot.availableBTCSats, 'sats');
|
|
154
|
+
*
|
|
155
|
+
* // Or use convenience methods
|
|
156
|
+
* const isLiquidatable = await vaultSnapshot.isLiquidatable('position123');
|
|
157
|
+
* const collateralRatio = await vaultSnapshot.getCollateralRatio('position123');
|
|
158
|
+
* const availableBalance = await vaultSnapshot.getAvailableBalance('position123');
|
|
159
|
+
*
|
|
160
|
+
* // Check if can mint more UCD
|
|
161
|
+
* const canMint = await vaultSnapshot.hasSufficientCollateral(
|
|
162
|
+
* 'position123',
|
|
163
|
+
* BigInt(5000), // Want to mint 5000 more UCD
|
|
164
|
+
* 13000 // Required 130% ratio
|
|
165
|
+
* );
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
//# sourceMappingURL=vault-snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-snapshot.d.ts","sourceRoot":"","sources":["../../../src/modules/vault-snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EACL,aAAa,EACb,mBAAmB,EACpB,MAAM,uCAAuC,CAAC;AAgB/C;;;;;GAKG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAsB;gBAExB,MAAM,EAAE,mBAAmB;IAIvC;;;;;;;;OAQG;IACG,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA0GlE;;;;;;;;;OASG;cACa,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAC9D,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IAmHF;;;;;;;;;;OAUG;IACH,OAAO,CAAC,iBAAiB;IA8BzB;;;;;;;OAOG;IACG,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK1D;;;;;;;OAOG;IACG,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK7D;;;;;;;OAOG;IACG,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK9D;;;;;;;;;OASG;IACG,uBAAuB,CAC3B,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,OAAO,CAAC;CAWpB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,mBAAmB,GAC1B,mBAAmB,CAErB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG"}
|