@chironbuilder/ootle-sdk 0.1.16 → 0.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/wallet.d.ts +35 -0
- package/dist/wallet.d.ts.map +1 -1
- package/dist/wallet.js +218 -18
- package/package.json +1 -1
package/dist/wallet.d.ts
CHANGED
|
@@ -611,7 +611,35 @@ export declare class OotleAccount implements WalletAccountApi {
|
|
|
611
611
|
* deleting one is unrecoverable. A record skipped here is simply not offered as a candidate for
|
|
612
612
|
* *this* attempt; it stays in local storage to be tried again later.
|
|
613
613
|
*/
|
|
614
|
+
/** Whether any of these unspent records of `resourceAddress` holds more than `floor` and still reads (decrypts as ours) on chain. */
|
|
615
|
+
private hasReadableUtxoAbove;
|
|
616
|
+
/**
|
|
617
|
+
* `sendPrivately()` with a private fee taken from the send itself, for when no separate UTXO can
|
|
618
|
+
* pay it. One `StealthTransfer` in the fee phase spends the selected inputs into the recipient's
|
|
619
|
+
* output and this account's change, and reveals only the fee, which pays for the transaction
|
|
620
|
+
* (`PayFeeFromBucket`) -- the same shape `unshieldIntoNewAccount` uses, with no public funds or
|
|
621
|
+
* account component involved. The fee is measured with a dry run first, since a fee revealed from
|
|
622
|
+
* stealth funds is never refunded.
|
|
623
|
+
*/
|
|
624
|
+
private sendPrivatelyPayingFeeFromTransfer;
|
|
625
|
+
/**
|
|
626
|
+
* The records worth spending: every unspent record of `resourceAddress` is checked against the
|
|
627
|
+
* chain (not just enough of them to cover `targetAmount` -- a plan can reach past that, e.g.
|
|
628
|
+
* unshield's extra change input), and one that can't be read is left out. A record the indexer
|
|
629
|
+
* reports as not found is one that was spent elsewhere (another device or wallet on this seed) and
|
|
630
|
+
* is marked spent for good -- see `isSpentElsewhere` for the guard on fresh outputs. Any other
|
|
631
|
+
* failure only skips the record this time.
|
|
632
|
+
*/
|
|
614
633
|
private filterReadableShieldedOutputs;
|
|
634
|
+
/**
|
|
635
|
+
* Checks every unspent local shielded-output record against the chain and marks spent the ones
|
|
636
|
+
* that are gone (spent from another device or wallet sharing this seed), so the private balance
|
|
637
|
+
* and coin selection stop counting them. Returns how many were marked. Safe to call any time; a
|
|
638
|
+
* record the indexer can't answer for right now is left as it is.
|
|
639
|
+
*/
|
|
640
|
+
pruneSpentShieldedOutputs(): Promise<number>;
|
|
641
|
+
/** Reads each unspent record's UTXO; returns the unusable commitments, marking the definitively spent ones. */
|
|
642
|
+
private checkShieldedOutputs;
|
|
615
643
|
/**
|
|
616
644
|
* Shared prepare/authorize/seal/submit path for every `StealthTransfer`-based operation
|
|
617
645
|
* (shield/unshield/withdrawStealthAndExecute/etc.): `builder` must already have every
|
|
@@ -1020,6 +1048,13 @@ export declare function summarizePrivateHoldings(records: ShieldedOutputRecord[]
|
|
|
1020
1048
|
amount: bigint;
|
|
1021
1049
|
outputCount: number;
|
|
1022
1050
|
}[];
|
|
1051
|
+
/**
|
|
1052
|
+
* Whether a failed read of a record's UTXO means it is gone for good: the indexer said the
|
|
1053
|
+
* substate is not found (a spent UTXO is removed), and the record is old enough that this isn't
|
|
1054
|
+
* just the indexer not having caught up with a brand-new output. A 500 or a network error says
|
|
1055
|
+
* nothing about the UTXO and never counts.
|
|
1056
|
+
*/
|
|
1057
|
+
export declare function isSpentElsewhere(record: Pick<ShieldedOutputRecord, "createdAt">, error: unknown, now?: number): boolean;
|
|
1023
1058
|
export declare function selectShieldedUtxosForAmount(records: ShieldedOutputRecord[], resourceAddress: string, targetAmount: bigint): {
|
|
1024
1059
|
selected: ShieldedOutputRecord[];
|
|
1025
1060
|
total: bigint;
|
package/dist/wallet.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"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"}
|
package/dist/wallet.js
CHANGED
|
@@ -1415,37 +1415,207 @@ export class OotleAccount {
|
|
|
1415
1415
|
* deleting one is unrecoverable. A record skipped here is simply not offered as a candidate for
|
|
1416
1416
|
* *this* attempt; it stays in local storage to be tried again later.
|
|
1417
1417
|
*/
|
|
1418
|
-
|
|
1418
|
+
/** Whether any of these unspent records of `resourceAddress` holds more than `floor` and still reads (decrypts as ours) on chain. */
|
|
1419
|
+
async hasReadableUtxoAbove(records, resourceAddress, floor) {
|
|
1419
1420
|
const provider = await this.getProvider();
|
|
1420
1421
|
const crypto = new WasmStealthCrypto(this.network);
|
|
1421
1422
|
const viewSecret = await this.signer.getViewSecret();
|
|
1422
|
-
const
|
|
1423
|
-
.
|
|
1424
|
-
|
|
1425
|
-
const diff = BigInt(b.amount) - BigInt(a.amount);
|
|
1426
|
-
return diff > 0n ? 1 : diff < 0n ? -1 : 0;
|
|
1427
|
-
});
|
|
1428
|
-
const unreadable = new Set();
|
|
1429
|
-
let verifiedTotal = 0n;
|
|
1430
|
-
for (const record of candidates) {
|
|
1431
|
-
if (verifiedTotal >= targetAmount)
|
|
1432
|
-
break;
|
|
1423
|
+
for (const record of records) {
|
|
1424
|
+
if (record.spent || record.resourceAddress !== resourceAddress || BigInt(record.amount) <= floor)
|
|
1425
|
+
continue;
|
|
1433
1426
|
try {
|
|
1434
1427
|
const substateId = stealthUtxoSubstateId(resourceAddress, fromHex(record.commitment));
|
|
1428
|
+
if (await decryptOwnedUtxo(crypto, viewSecret, await provider.getSubstate(substateId), substateId))
|
|
1429
|
+
return true;
|
|
1430
|
+
}
|
|
1431
|
+
catch {
|
|
1432
|
+
/* spent elsewhere or unreachable: not usable for the fee */
|
|
1433
|
+
}
|
|
1434
|
+
}
|
|
1435
|
+
return false;
|
|
1436
|
+
}
|
|
1437
|
+
/**
|
|
1438
|
+
* `sendPrivately()` with a private fee taken from the send itself, for when no separate UTXO can
|
|
1439
|
+
* pay it. One `StealthTransfer` in the fee phase spends the selected inputs into the recipient's
|
|
1440
|
+
* output and this account's change, and reveals only the fee, which pays for the transaction
|
|
1441
|
+
* (`PayFeeFromBucket`) -- the same shape `unshieldIntoNewAccount` uses, with no public funds or
|
|
1442
|
+
* account component involved. The fee is measured with a dry run first, since a fee revealed from
|
|
1443
|
+
* stealth funds is never refunded.
|
|
1444
|
+
*/
|
|
1445
|
+
async sendPrivatelyPayingFeeFromTransfer(records, resourceAddress, recipientWalletAddress, amount, maxFee, memo, minimumValuePromise, opId) {
|
|
1446
|
+
const accountId = localAccountId(this.index);
|
|
1447
|
+
// The caller checked readability up to `amount` only; the fee needs more, and a stale record
|
|
1448
|
+
// (spent from another device) must not be picked for it.
|
|
1449
|
+
records = await this.filterReadableShieldedOutputs(records, resourceAddress, amount + maxFee);
|
|
1450
|
+
let commitments;
|
|
1451
|
+
try {
|
|
1452
|
+
({ commitments } = resolveSendPrivatelyPlan(records, resourceAddress, amount + maxFee));
|
|
1453
|
+
}
|
|
1454
|
+
catch {
|
|
1455
|
+
throw new Error(`Not enough private balance to send ${amount} and pay its private fee (up to ${maxFee}) from it.`);
|
|
1456
|
+
}
|
|
1457
|
+
await reserveCommitments(accountId, commitments, opId);
|
|
1458
|
+
try {
|
|
1459
|
+
const provider = await this.getProvider();
|
|
1460
|
+
const crypto = new WasmStealthCrypto(this.network);
|
|
1461
|
+
const viewSecret = await this.signer.getViewSecret();
|
|
1462
|
+
const walletAddress = await this.getWalletAddress();
|
|
1463
|
+
const inputs = await Promise.all(commitments.map(async (commitmentHex) => {
|
|
1464
|
+
const substateId = stealthUtxoSubstateId(resourceAddress, fromHex(commitmentHex));
|
|
1435
1465
|
const substate = await provider.getSubstate(substateId);
|
|
1436
1466
|
const decrypted = await decryptOwnedUtxo(crypto, viewSecret, substate, substateId);
|
|
1437
|
-
if (!decrypted)
|
|
1438
|
-
|
|
1439
|
-
|
|
1467
|
+
if (!decrypted)
|
|
1468
|
+
throw new Error(`sendPrivately: cannot decrypt ${substateId} -- it isn't this account's, or it is already spent.`);
|
|
1469
|
+
const nonce = substate.substate.Utxo.output.output
|
|
1470
|
+
.public_nonce;
|
|
1471
|
+
return { commitmentHex, substateId, mask: decrypted.mask, nonce, value: decrypted.value };
|
|
1472
|
+
}));
|
|
1473
|
+
const total = inputs.reduce((sum, i) => sum + i.value, 0n);
|
|
1474
|
+
const inputMask = await crypto.aggregateInputMasks(inputs.map((i) => i.mask));
|
|
1475
|
+
const inputsJson = JSON.stringify({
|
|
1476
|
+
inputs: inputs.map((i) => ({ commitment: i.commitmentHex, witness: "KeyPath" })),
|
|
1477
|
+
revealed_amount: "0",
|
|
1478
|
+
});
|
|
1479
|
+
const sealKeypair = generateSealKeypair();
|
|
1480
|
+
const build = async (fee, dryRun) => {
|
|
1481
|
+
const change = total - amount - fee;
|
|
1482
|
+
if (change < 0n)
|
|
1483
|
+
throw new Error(`sendPrivately: ${total} private does not cover ${amount} plus the ${fee} fee`);
|
|
1484
|
+
// Output 0 is the recipient's (the promise rides on it alone -- see sendPrivately); output 1, when present, is our change.
|
|
1485
|
+
const outputs = [createOutput({ destination: recipientWalletAddress, amount, resourceAddress, memo: toMemo(memo), minimumValuePromise })];
|
|
1486
|
+
if (change > 0n)
|
|
1487
|
+
outputs.push(createOutput({ destination: walletAddress, amount: change, resourceAddress }));
|
|
1488
|
+
const { statement: outputsStatement, outputMask } = await crypto.generateOutputsStatement(outputs, fee, sealKeypair.public_key);
|
|
1489
|
+
const inputsStatement = new StealthInputsStatement([], 0n, inputsJson);
|
|
1490
|
+
const balanceProof = await crypto.generateBalanceProofSignature(inputMask, outputMask, inputsJson, outputsStatement.statementJson);
|
|
1491
|
+
const statement = new StealthTransferStatement(inputsStatement, outputsStatement, balanceProof);
|
|
1492
|
+
await crypto.validateTransfer(statement);
|
|
1493
|
+
const parsed = outputsStatement.parsed().outputs;
|
|
1494
|
+
const builder = TransactionBuilder.new(this.network, await resolveMaxEpoch(provider));
|
|
1495
|
+
for (const instruction of [
|
|
1496
|
+
{
|
|
1497
|
+
StealthTransfer: {
|
|
1498
|
+
resource_address_ref: { Address: resourceAddress },
|
|
1499
|
+
statement: { __ootleRawJson: statement.toCompactJson() },
|
|
1500
|
+
revealed_input_bucket: null,
|
|
1501
|
+
},
|
|
1502
|
+
},
|
|
1503
|
+
{ PutLastInstructionOutputOnWorkspace: { key: 0 } },
|
|
1504
|
+
{ PayFeeFromBucket: { bucket: { id: 0, offset: null } } },
|
|
1505
|
+
]) {
|
|
1506
|
+
builder.addFeeInstruction(instruction);
|
|
1440
1507
|
}
|
|
1441
|
-
|
|
1508
|
+
builder.addInput({ substate_id: resourceAddress, version: null, is_write: false });
|
|
1509
|
+
for (const input of inputs)
|
|
1510
|
+
builder.addInput({ substate_id: input.substateId, version: null });
|
|
1511
|
+
const unsignedBody = builder.buildUnsignedTransaction();
|
|
1512
|
+
unsignedBody.is_seal_signer_authorized = true;
|
|
1513
|
+
unsignedBody.dry_run = dryRun;
|
|
1514
|
+
const unsignedTx = await resolveTransaction(provider, unsignedBody);
|
|
1515
|
+
const signers = inputs.map((input) => ({
|
|
1516
|
+
getAddress: async () => walletAddress,
|
|
1517
|
+
getPublicKey: async () => parseOotleAddress(walletAddress).owner_key,
|
|
1518
|
+
signTransaction: async (tx, sealPublicKey) => {
|
|
1519
|
+
const json = serializeUnsignedTx(tx);
|
|
1520
|
+
return [await this.signer.addStealthSignature(json, fromHex(input.nonce), sealPublicKey, { crypto })];
|
|
1521
|
+
},
|
|
1522
|
+
}));
|
|
1523
|
+
const signed = await signTransaction(signers, unsignedTx, sealKeypair);
|
|
1524
|
+
return {
|
|
1525
|
+
envelope: sealTransaction(signed),
|
|
1526
|
+
change,
|
|
1527
|
+
recipientCommitment: parsed[0].output.commitment,
|
|
1528
|
+
changeCommitment: change > 0n ? parsed[1].output.commitment : undefined,
|
|
1529
|
+
};
|
|
1530
|
+
};
|
|
1531
|
+
const fee = await this.estimateClaimFee(await build(maxFee, true), "private send");
|
|
1532
|
+
if (fee > maxFee)
|
|
1533
|
+
throw new Error(`sendPrivately: the private fee would be ${fee}, above the ${maxFee} limit`);
|
|
1534
|
+
const attempt = await build(fee, false);
|
|
1535
|
+
const transactionId = await submitTransaction(provider, attempt.envelope);
|
|
1536
|
+
await addPendingShield({
|
|
1537
|
+
transactionId,
|
|
1538
|
+
accountId,
|
|
1539
|
+
resourceAddress,
|
|
1540
|
+
amount: attempt.change.toString(),
|
|
1541
|
+
spentCommitments: commitments,
|
|
1542
|
+
ownCommitment: attempt.changeCommitment,
|
|
1543
|
+
});
|
|
1544
|
+
try {
|
|
1545
|
+
const response = await withTimeout(pollTransactionResult(provider, transactionId), 60_000, "submitting the private send");
|
|
1546
|
+
await recordKnownVersions(response);
|
|
1547
|
+
if (attempt.changeCommitment) {
|
|
1548
|
+
await recordKnownShieldedOutput(accountId, resourceAddress, attempt.changeCommitment, attempt.change, transactionId);
|
|
1549
|
+
}
|
|
1550
|
+
for (const commitment of commitments)
|
|
1551
|
+
await markShieldedOutputSpent(accountId, commitment);
|
|
1442
1552
|
}
|
|
1443
|
-
|
|
1444
|
-
|
|
1553
|
+
finally {
|
|
1554
|
+
await removePendingShield(transactionId);
|
|
1445
1555
|
}
|
|
1556
|
+
return {
|
|
1557
|
+
transactionId,
|
|
1558
|
+
recipientCommitment: attempt.recipientCommitment,
|
|
1559
|
+
recipientSubstateId: stealthUtxoSubstateId(resourceAddress, fromHex(attempt.recipientCommitment)),
|
|
1560
|
+
minimumValuePromise: minimumValuePromise.toString(),
|
|
1561
|
+
};
|
|
1562
|
+
}
|
|
1563
|
+
finally {
|
|
1564
|
+
await releaseReservations(opId);
|
|
1446
1565
|
}
|
|
1566
|
+
}
|
|
1567
|
+
/**
|
|
1568
|
+
* The records worth spending: every unspent record of `resourceAddress` is checked against the
|
|
1569
|
+
* chain (not just enough of them to cover `targetAmount` -- a plan can reach past that, e.g.
|
|
1570
|
+
* unshield's extra change input), and one that can't be read is left out. A record the indexer
|
|
1571
|
+
* reports as not found is one that was spent elsewhere (another device or wallet on this seed) and
|
|
1572
|
+
* is marked spent for good -- see `isSpentElsewhere` for the guard on fresh outputs. Any other
|
|
1573
|
+
* failure only skips the record this time.
|
|
1574
|
+
*/
|
|
1575
|
+
async filterReadableShieldedOutputs(records, resourceAddress,
|
|
1576
|
+
// Kept for callers' clarity; every candidate is checked regardless.
|
|
1577
|
+
_targetAmount) {
|
|
1578
|
+
const unreadable = await this.checkShieldedOutputs(records.filter((r) => r.resourceAddress === resourceAddress));
|
|
1447
1579
|
return records.filter((r) => !unreadable.has(r.commitment));
|
|
1448
1580
|
}
|
|
1581
|
+
/**
|
|
1582
|
+
* Checks every unspent local shielded-output record against the chain and marks spent the ones
|
|
1583
|
+
* that are gone (spent from another device or wallet sharing this seed), so the private balance
|
|
1584
|
+
* and coin selection stop counting them. Returns how many were marked. Safe to call any time; a
|
|
1585
|
+
* record the indexer can't answer for right now is left as it is.
|
|
1586
|
+
*/
|
|
1587
|
+
async pruneSpentShieldedOutputs() {
|
|
1588
|
+
const accountId = localAccountId(this.index);
|
|
1589
|
+
const before = (await listShieldedOutputs(accountId)).filter((r) => !r.spent).length;
|
|
1590
|
+
await this.checkShieldedOutputs(await listShieldedOutputs(accountId));
|
|
1591
|
+
const after = (await listShieldedOutputs(accountId)).filter((r) => !r.spent).length;
|
|
1592
|
+
return before - after;
|
|
1593
|
+
}
|
|
1594
|
+
/** Reads each unspent record's UTXO; returns the unusable commitments, marking the definitively spent ones. */
|
|
1595
|
+
async checkShieldedOutputs(records) {
|
|
1596
|
+
const accountId = localAccountId(this.index);
|
|
1597
|
+
const provider = await this.getProvider();
|
|
1598
|
+
const crypto = new WasmStealthCrypto(this.network);
|
|
1599
|
+
const viewSecret = await this.signer.getViewSecret();
|
|
1600
|
+
const unreadable = new Set();
|
|
1601
|
+
for (const record of records) {
|
|
1602
|
+
if (record.spent)
|
|
1603
|
+
continue;
|
|
1604
|
+
try {
|
|
1605
|
+
const substateId = stealthUtxoSubstateId(record.resourceAddress, fromHex(record.commitment));
|
|
1606
|
+
const substate = await provider.getSubstate(substateId);
|
|
1607
|
+
const decrypted = await decryptOwnedUtxo(crypto, viewSecret, substate, substateId);
|
|
1608
|
+
if (!decrypted)
|
|
1609
|
+
unreadable.add(record.commitment); // doesn't decrypt as ours -- don't offer it either
|
|
1610
|
+
}
|
|
1611
|
+
catch (e) {
|
|
1612
|
+
unreadable.add(record.commitment);
|
|
1613
|
+
if (isSpentElsewhere(record, e))
|
|
1614
|
+
await markShieldedOutputSpent(accountId, record.commitment);
|
|
1615
|
+
}
|
|
1616
|
+
}
|
|
1617
|
+
return unreadable;
|
|
1618
|
+
}
|
|
1449
1619
|
/**
|
|
1450
1620
|
* Shared prepare/authorize/seal/submit path for every `StealthTransfer`-based operation
|
|
1451
1621
|
* (shield/unshield/withdrawStealthAndExecute/etc.): `builder` must already have every
|
|
@@ -2173,6 +2343,24 @@ export class OotleAccount {
|
|
|
2173
2343
|
const opId = newOperationId("send-private");
|
|
2174
2344
|
const unavailable = await this.unavailableCommitments(accountId, opId);
|
|
2175
2345
|
const records = await this.filterReadableShieldedOutputs((await listShieldedOutputs(accountId)).filter((r) => !unavailable.has(r.commitment)), resourceAddress, amount);
|
|
2346
|
+
// An account that has only ever held private funds (e.g. a claimed L1 burn) has no component
|
|
2347
|
+
// on-chain to take the dust or a public fee from, so its send pays the fee from itself, like
|
|
2348
|
+
// unshield's new-account path.
|
|
2349
|
+
if (!(await substateExists(await this.getProvider(), await this.getComponentAddress()))) {
|
|
2350
|
+
if (resourceAddress !== TARI_RESOURCE_ADDRESS) {
|
|
2351
|
+
throw new Error("This account doesn't exist on-chain yet, so it can only send TARI privately until it is created (unshield some TARI first).");
|
|
2352
|
+
}
|
|
2353
|
+
return this.sendPrivatelyPayingFeeFromTransfer(records, resourceAddress, recipientWalletAddress, amount, maxFee, memo, minimumValuePromise, opId);
|
|
2354
|
+
}
|
|
2355
|
+
// A private fee normally comes from a UTXO of its own. With none to spare -- e.g. the whole
|
|
2356
|
+
// private balance is a single UTXO -- the fee comes out of the send itself instead.
|
|
2357
|
+
if (feeType.kind === "private" && feeType.feeResourceAddress === resourceAddress) {
|
|
2358
|
+
const planned = resolveSendPrivatelyPlan(records, resourceAddress, amount).commitments;
|
|
2359
|
+
const spare = records.filter((r) => !planned.includes(r.commitment));
|
|
2360
|
+
if (!(await this.hasReadableUtxoAbove(spare, resourceAddress, maxFee))) {
|
|
2361
|
+
return this.sendPrivatelyPayingFeeFromTransfer(records, resourceAddress, recipientWalletAddress, amount, maxFee, memo, minimumValuePromise, opId);
|
|
2362
|
+
}
|
|
2363
|
+
}
|
|
2176
2364
|
const { commitments, changeAmount } = resolveSendPrivatelyPlan(records, resourceAddress, amount);
|
|
2177
2365
|
await reserveCommitments(accountId, commitments, opId);
|
|
2178
2366
|
try {
|
|
@@ -2956,6 +3144,18 @@ export function summarizePrivateHoldings(records) {
|
|
|
2956
3144
|
}
|
|
2957
3145
|
return [...totals].map(([resourceAddress, entry]) => ({ resourceAddress, ...entry }));
|
|
2958
3146
|
}
|
|
3147
|
+
/** How long a freshly recorded output may still be missing from the indexer before "not found" is believed. */
|
|
3148
|
+
const SPENT_ELSEWHERE_GRACE_MS = 10 * 60_000;
|
|
3149
|
+
/**
|
|
3150
|
+
* Whether a failed read of a record's UTXO means it is gone for good: the indexer said the
|
|
3151
|
+
* substate is not found (a spent UTXO is removed), and the record is old enough that this isn't
|
|
3152
|
+
* just the indexer not having caught up with a brand-new output. A 500 or a network error says
|
|
3153
|
+
* nothing about the UTXO and never counts.
|
|
3154
|
+
*/
|
|
3155
|
+
export function isSpentElsewhere(record, error, now = Date.now()) {
|
|
3156
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
3157
|
+
return /\b404\b|not found/i.test(message) && now - record.createdAt >= SPENT_ELSEWHERE_GRACE_MS;
|
|
3158
|
+
}
|
|
2959
3159
|
export function selectShieldedUtxosForAmount(records, resourceAddress, targetAmount) {
|
|
2960
3160
|
const candidates = records
|
|
2961
3161
|
.filter((r) => r.resourceAddress === resourceAddress && !r.spent)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chironbuilder/ootle-sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.18",
|
|
4
4
|
"description": "Shared TypeScript client for Tari Ootle (L2): account derivation, balances, transactions, HTLCs, and stealth/confidential transfers — the account core behind Sapient and the Tari L1 web wallet's Ootle support.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|