32 lines
1.8 KiB
JavaScript
32 lines
1.8 KiB
JavaScript
// Generated, do not edit. sha256:ef4dc1eb01e833a602dd00a17d235a583edc55c162bc923df89b4ecb9c82da16
|
|
import * as db from '../db.js';
|
|
import { nowIso } from './_shared.js';
|
|
import { assertSourceMatchesAccount } from './wallet-sources.js';
|
|
|
|
export function listWalletAddresses(accountId) {
|
|
return db.all(`SELECT * FROM WalletAddress
|
|
WHERE accountId = ? ORDER BY chainIndex, derivationIndex, address`, [accountId]);
|
|
}
|
|
export async function upsertWalletAddresses(list) {
|
|
for (const a of list) {
|
|
assertSourceMatchesAccount('WalletAddress', a.accountId, a.sourceId);
|
|
db.run(`INSERT INTO WalletAddress
|
|
(accountId, sourceId, address, chainIndex, derivationIndex, automaticLabel, balanceSats, transactionCount, lastScannedAt)
|
|
VALUES (?,?,?,?,?,?,?,?,?)
|
|
ON CONFLICT(address) DO UPDATE SET
|
|
accountId=excluded.accountId, sourceId=excluded.sourceId, chainIndex=excluded.chainIndex,
|
|
derivationIndex=excluded.derivationIndex, automaticLabel=excluded.automaticLabel,
|
|
balanceSats=excluded.balanceSats, transactionCount=excluded.transactionCount, lastScannedAt=excluded.lastScannedAt`,
|
|
[a.accountId, a.sourceId ?? null, a.address, a.chainIndex ?? null, a.derivationIndex ?? null,
|
|
a.automaticLabel ?? null, a.balanceSats ?? null, a.transactionCount ?? null, a.lastScannedAt ?? nowIso()]);
|
|
}
|
|
await db.persist();
|
|
}
|
|
export function sourceBalance(sourceId) {
|
|
return db.one(`SELECT COALESCE(SUM(balanceSats),0) AS sats, COUNT(*) AS n, MAX(lastScannedAt) AS scanned
|
|
FROM WalletAddress WHERE sourceId=?`, [sourceId]);
|
|
}
|
|
export function accountOnchainBalance(accountId) {
|
|
return db.one(`SELECT COALESCE(SUM(balanceSats),0) AS sats FROM WalletAddress WHERE accountId=?`, [accountId]).sats;
|
|
}
|