chore: sync submodule state (parent ref update)

Made-with: Cursor
This commit is contained in:
defiQUG
2026-03-02 12:14:07 -08:00
parent 6c4555cebd
commit 89b82cdadb
883 changed files with 78752 additions and 18180 deletions

View File

@@ -0,0 +1,31 @@
# SAL Extension and Migration
**Purpose:** State & Accounting Ledger (SAL) extension: positions (asset x chain), fees, reconciliation snapshots.
## Schema
- **sal_positions:** `(account_id, asset, chain_id)` → balance. Inventory per account per asset per chain.
- **sal_fees:** `reference_id`, `chain_id`, `tx_hash`, `fee_type`, `amount`, `currency_code`. Gas and protocol fees.
- **sal_reconciliation_snapshots:** `account_id`, `asset`, `chain_id`, `sal_balance`, `on_chain_balance`, `discrepancy`, `status`. On-chain vs SAL comparison.
## Migration
Run the SAL migration after existing ledger migrations:
```bash
export DATABASE_URL="postgresql://user:password@host:port/database"
psql $DATABASE_URL -f db/migrations/006_sal_positions_fees.sql
```
Or run in order with other migrations (see [db/migrations/README.md](../../db/migrations/README.md)).
## Usage
- **SalReconciliationService** ([src/core/ledger/sal-reconciliation.service.ts](../../src/core/ledger/sal-reconciliation.service.ts)):
- `upsertPosition({ accountId, asset, chainId, balance })` — upsert position.
- `recordFee({ referenceId, chainId, txHash?, feeType, amount, currencyCode? })` — record a fee.
- `getPosition(accountId, asset, chainId)` — get balance.
- `reconcile(input, fetcher?)` — compare SAL to on-chain; optional `OnChainBalanceFetcher(chainId, address, asset) => Promise<string>`.
- `listPositions(accountId, chainId?)`, `listFees(referenceId)`.
Reconciliation can be driven by EII (Event Ingestion + Indexing) once on-chain balance fetcher is wired (e.g. from multi-chain-execution chain adapters).