// Transactions scene — 1:1 with the SOC console at app.dipoli.io/transactions. // Toolbar (title + count + clear filters + export CSV) → 6-col filter bar // → sortable 8-col table with staggered row-in animation → pager footer. const TX_FULL = [ { when: '02/05/2026 17:10:09', id: 'tx-clean-001', client: 'acme-19104', amt: '250.50 USDT', ip: '8.8.8.8', score: 71, rules: 6, dec: 'BLOCK' }, { when: '02/05/2026 16:42:31', id: 'tx-1776854127', client: 'acme-19104', amt: '250.00 USDT', ip: '185.156.72.10', score: 53, rules: 4, dec: 'REVIEW' }, { when: '02/05/2026 12:14:08', id: 'tx-huge-1776847', client: 'acme-19104', amt: '50 000 USDT', ip: '185.156.72.10', score: 49, rules: 3, dec: 'REVIEW' }, { when: '02/05/2026 12:14:07', id: 'tx-warmup-7775', client: 'acme-19104', amt: '50.00 USDT', ip: '185.156.72.10', score: 56, rules: 4, dec: 'REVIEW' }, { when: '02/05/2026 11:08:52', id: 'tx-ls2-r10', client: 'orbit-18769', amt: '3 472.00 USDT', ip: '3.122.14.91', score: 3, rules: 0, dec: 'APPROVE' }, { when: '02/05/2026 11:08:48', id: 'tx-ls2-r9', client: 'orbit-18769', amt: '57.20 USDT', ip: '52.10.4.198', score: 0, rules: 0, dec: 'APPROVE' }, { when: '02/05/2026 11:08:43', id: 'tx-ls2-r8', client: 'orbit-18769', amt: '2 435.13 USDT', ip: '34.224.18.7', score: 1, rules: 0, dec: 'APPROVE' }, { when: '02/05/2026 11:08:32', id: 'tx-ls2-r7', client: 'lyra-20126', amt: '87.75 USDT', ip: '4.71.182.4', score: 0, rules: 0, dec: 'APPROVE' }, { when: '02/05/2026 09:53:21', id: 'tx-eu-9d40b1', client: 'apex-19104', amt: '1 480.00 USDT', ip: '5.255.232.201', score: 28, rules: 1, dec: 'APPROVE' }, { when: '02/05/2026 09:14:18', id: 'tx-eu-44ac9c', client: 'apex-19104', amt: '14 220 USDT', ip: '5.255.232.201', score: 64, rules: 2, dec: 'REVIEW' }, { when: '02/05/2026 08:48:02', id: 'tx-mx-7780af', client: 'lyra-20126', amt: '180.00 USDT', ip: '187.190.4.21', score: 18, rules: 1, dec: 'APPROVE' }, { when: '02/05/2026 08:30:11', id: 'tx-mx-7780ac', client: 'lyra-20126', amt: '9 800 USDT', ip: '187.190.4.21', score: 76, rules: 5, dec: 'BLOCK' }, ]; function TransactionsScene({ active }) { // Rows fade-in staggered when the scene becomes active. We reset to // an empty list then push each row on a setTimeout — matches the // legacy startTxScene() rhythm (90 ms cadence). const [rows, setRows] = React.useState([]); React.useEffect(() => { if (!active) return; setRows([]); const timers = TX_FULL.map((t, i) => setTimeout(() => setRows((prev) => [...prev, t]), i * 90) ); return () => timers.forEach(clearTimeout); }, [active]); const total = useTween(31065, { format: (n) => Math.round(n).toLocaleString('en-US').replace(/,/g, ' ') }); return (

Transactions

{total} evaluations
Clear filters Export CSV
e.g. merchant_main
All
0
100
1.2.3.4
0x… or bc1…
{rows.map((t, i) => ( ))}
When TX ID Client Amount IP Score Rules Decision
{t.when} {t.id} {t.client} {t.amt} {t.ip} {t.score} {t.rules} {t.dec}
Page 1 of 622 · 50 per page
); }