Skip to content

Commit 77de585

Browse files
committed
feat: find denominated coins in wallet
1 parent 4df3a17 commit 77de585

File tree

2 files changed

+82
-18
lines changed

2 files changed

+82
-18
lines changed

public/index.html

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<script src="./node_modules/dashkeys/dashkeys.js"></script>
1111
<script src="./node_modules/dashhd/dashhd.js"></script>
1212
<script src="./node_modules/dashtx/dashtx.js"></script>
13+
<script src="./dashjoin.js"></script>
1314
<style>
1415
nav {
1516
margin-bottom: 0.3rem;
@@ -242,7 +243,7 @@ <h1>Digital Cash Wallet</h1>
242243

243244
<hr />
244245
<label
245-
>Cash Drawer (<code data-id="cash-balance">0.0000</code>)
246+
>Cash Drawer (<code data-id="cj-balance">0.0000</code>)
246247
<small>denominated coins</small>
247248
</label>
248249
<table>
@@ -262,124 +263,134 @@ <h1>Digital Cash Wallet</h1>
262263
<input
263264
name="priority"
264265
onkeyup="syncCashDrawer(event)"
266+
onchange="syncCashDrawer(event)"
265267
type="number"
266268
step="1"
267269
min="0"
268270
value="1"
269271
/>
270272
</th>
271-
<th>0</th>
273+
<th data-name="have">0</th>
272274
<th>
273275
<input
274276
name="want"
275277
onkeyup="syncCashDrawer(event)"
278+
onchange="syncCashDrawer(event)"
276279
type="number"
277280
step="1"
278281
min="0"
279282
value="2"
280283
/>
281284
</th>
282-
<th>0</th>
285+
<th data-name="need">0</th>
283286
</tr>
284287
<tr data-denom="100001000">
285288
<th>1.000<span hidden>01000</span></th>
286289
<th>
287290
<input
288291
name="priority"
289292
onkeyup="syncCashDrawer(event)"
293+
onchange="syncCashDrawer(event)"
290294
type="number"
291295
step="1"
292296
min="0"
293297
value="10"
294298
/>
295299
</th>
296-
<th>0</th>
300+
<th data-name="have">0</th>
297301
<th>
298302
<input
299303
name="want"
300304
onkeyup="syncCashDrawer(event)"
305+
onchange="syncCashDrawer(event)"
301306
type="number"
302307
step="1"
303308
min="0"
304309
value="10"
305310
/>
306311
</th>
307-
<th>0</th>
312+
<th data-name="need">0</th>
308313
</tr>
309314
<tr data-denom="10000100">
310315
<th>0.100<span hidden>00100</span></th>
311316
<th>
312317
<input
313318
name="priority"
314319
onkeyup="syncCashDrawer(event)"
320+
onchange="syncCashDrawer(event)"
315321
type="number"
316322
step="1"
317323
min="0"
318324
value="10"
319325
/>
320326
</th>
321-
<th>0</th>
327+
<th data-name="have">0</th>
322328
<th>
323329
<input
324330
name="want"
325331
onkeyup="syncCashDrawer(event)"
332+
onchange="syncCashDrawer(event)"
326333
type="number"
327334
step="1"
328335
min="0"
329336
value="50"
330337
/>
331338
</th>
332-
<th>0</th>
339+
<th data-name="need">0</th>
333340
</tr>
334341
<tr data-denom="1000010">
335342
<th>0.010<span hidden>00010</span></th>
336343
<th>
337344
<input
338345
name="priority"
339346
onkeyup="syncCashDrawer(event)"
347+
onchange="syncCashDrawer(event)"
340348
type="number"
341349
step="1"
342350
min="0"
343351
value="1"
344352
/>
345353
</th>
346-
<th>0</th>
354+
<th data-name="have">0</th>
347355
<th>
348356
<input
349357
name="want"
350358
onkeyup="syncCashDrawer(event)"
359+
onchange="syncCashDrawer(event)"
351360
type="number"
352361
step="1"
353362
min="0"
354363
value="20"
355364
/>
356365
</th>
357-
<th>0</th>
366+
<th data-name="need">0</th>
358367
</tr>
359368
<tr data-denom="100001">
360369
<th>0.001<span hidden>00001</span></th>
361370
<th>
362371
<input
363372
name="priority"
364373
onkeyup="syncCashDrawer(event)"
374+
onchange="syncCashDrawer(event)"
365375
type="number"
366376
step="1"
367377
min="0"
368378
value="0"
369379
/>
370380
</th>
371-
<th>0</th>
381+
<th data-name="have">0</th>
372382
<th>
373383
<input
374384
name="want"
375385
onkeyup="syncCashDrawer(event)"
386+
onchange="syncCashDrawer(event)"
376387
type="number"
377388
step="1"
378389
min="0"
379390
value="5"
380391
/>
381392
</th>
382-
<th>0</th>
393+
<th data-name="need">0</th>
383394
</tr>
384395
</tbody>
385396
</table>

public/wallet-app.js

Lines changed: 60 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
let DashTx = window.DashTx;
1616
let Secp256k1 = window.nobleSecp256k1;
1717

18+
let DashJoin = window.DashJoin;
19+
1820
const SATS = 100000000;
1921
const MIN_BALANCE = 100001 * 1000;
2022

@@ -28,6 +30,7 @@
2830
let spentAddrs = [];
2931
let deltasMap = {};
3032
let keysMap = {};
33+
let denomsMap = {};
3134

3235
let keyUtils = {
3336
getPrivateKey: async function (txInput, i) {
@@ -440,7 +443,7 @@
440443

441444
let defaultCjSlots = [
442445
{
443-
denom: 10000100000,
446+
denom: 1000010000,
444447
priority: 1,
445448
have: 0,
446449
want: 2,
@@ -484,19 +487,16 @@
484487
return slots;
485488
}
486489
window.syncCashDrawer = function (event) {
487-
console.log('DEBUG syncCashDrawer');
488490
let isDirty = false;
489491

490492
let slots = getCashDrawer();
491493
for (let slot of slots) {
492494
let $row = $(`[data-denom="${slot.denom}"]`);
493-
console.log('DEBUG syncCashDrawer slot', slot, $row);
494495

495496
let priorityStr = $('[name=priority]', $row).value;
496497
if (priorityStr) {
497498
let priority = parseFloat(priorityStr);
498499
if (slot.priority !== priority) {
499-
console.log('DEBUG update priority', slot.priority, priority);
500500
isDirty = true;
501501
slot.priority = priority;
502502
}
@@ -506,7 +506,6 @@
506506
if (wantStr) {
507507
let want = parseFloat(wantStr);
508508
if (slot.want !== want) {
509-
console.log('DEBUG update priority', slot.want, want);
510509
isDirty = true;
511510
slot.want = want;
512511
}
@@ -517,15 +516,43 @@
517516
dbSet('cash-drawer-control', slots);
518517
}
519518

519+
renderCashDrawer();
520520
return true;
521521
};
522+
522523
function renderCashDrawer() {
524+
let cjBalance = 0;
523525
let slots = getCashDrawer();
524526
for (let slot of slots) {
525527
let $row = $(`[data-denom="${slot.denom}"]`);
526-
$('[name=priority]', $row).value = slot.priority;
527-
$('[name=want]', $row).value = slot.want;
528+
let addrs = Object.keys(denomsMap[slot.denom]);
529+
let have = addrs.length;
530+
let need = slot.want - have;
531+
need = Math.max(0, need);
532+
533+
let priority = $('[name=priority]', $row).value;
534+
if (priority) {
535+
if (priority !== slot.priority.toString()) {
536+
$('[name=priority]', $row).value = slot.priority;
537+
}
538+
}
539+
let want = $('[name=want]', $row).value;
540+
if (want) {
541+
if (want !== slot.want.toString()) {
542+
$('[name=want]', $row).value = slot.want;
543+
}
544+
}
545+
546+
$('[data-name=have]', $row).textContent = have;
547+
$('[data-name=need]', $row).textContent = need;
548+
549+
for (let addr of addrs) {
550+
cjBalance += denomsMap[slot.denom][addr].satoshis;
551+
}
528552
}
553+
554+
let cjAmount = cjBalance / SATS;
555+
$('[data-id=cj-balance]').textContent = cjAmount.toFixed(8);
529556
}
530557

531558
async function updateDeltas(addrs) {
@@ -625,6 +652,31 @@
625652
}
626653
}
627654

655+
function siftDenoms() {
656+
for (let denom of DashJoin.DENOMS) {
657+
if (!denomsMap[denom]) {
658+
denomsMap[denom] = {};
659+
}
660+
}
661+
662+
let addrs = Object.keys(deltasMap);
663+
for (let addr of addrs) {
664+
let info = deltasMap[addr];
665+
if (info.balance === 0) {
666+
continue;
667+
}
668+
669+
for (let coin of info.deltas) {
670+
let denom = DashJoin.getDenom(coin.satoshis);
671+
if (!denom) {
672+
continue;
673+
}
674+
675+
denomsMap[denom][coin.address] = coin;
676+
}
677+
}
678+
}
679+
628680
async function main() {
629681
if (network === `testnet`) {
630682
let $testnets = $$('[data-network=testnet]');
@@ -634,6 +686,7 @@
634686
}
635687

636688
await init();
689+
siftDenoms();
637690
renderCashDrawer();
638691
}
639692

0 commit comments

Comments
 (0)