20251102000000_create_keyset_amounts.sql 1.0 KB

123456789101112131415161718192021222324252627282930
  1. -- Create keyset_amounts table with total_issued and total_redeemed columns
  2. CREATE TABLE IF NOT EXISTS keyset_amounts (
  3. keyset_id TEXT PRIMARY KEY NOT NULL,
  4. total_issued INTEGER NOT NULL DEFAULT 0,
  5. total_redeemed INTEGER NOT NULL DEFAULT 0
  6. );
  7. -- Prefill with issued amounts
  8. INSERT OR IGNORE INTO keyset_amounts (keyset_id, total_issued, total_redeemed)
  9. SELECT keyset_id, SUM(amount) as total_issued, 0 as total_redeemed
  10. FROM blind_signature
  11. WHERE c IS NOT NULL
  12. GROUP BY keyset_id;
  13. -- Update with redeemed amounts
  14. UPDATE keyset_amounts
  15. SET total_redeemed = (
  16. SELECT COALESCE(SUM(amount), 0)
  17. FROM proof
  18. WHERE proof.keyset_id = keyset_amounts.keyset_id
  19. AND proof.state = 'SPENT'
  20. );
  21. -- Insert keysets that only have redeemed amounts (no issued)
  22. INSERT OR IGNORE INTO keyset_amounts (keyset_id, total_issued, total_redeemed)
  23. SELECT keyset_id, 0 as total_issued, SUM(amount) as total_redeemed
  24. FROM proof
  25. WHERE state = 'SPENT'
  26. AND keyset_id NOT IN (SELECT keyset_id FROM keyset_amounts)
  27. GROUP BY keyset_id;