@ocash/sdk 0.1.4-rc.2 → 0.1.4-rc.3
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/browser.cjs +15 -5
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.js +15 -5
- package/dist/browser.js.map +1 -1
- package/dist/index.cjs +15 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +15 -5
- package/dist/index.js.map +1 -1
- package/dist/node.cjs +15 -5
- package/dist/node.cjs.map +1 -1
- package/dist/node.js +15 -5
- package/dist/node.js.map +1 -1
- package/package.json +1 -1
package/dist/browser.cjs
CHANGED
|
@@ -7363,7 +7363,7 @@ var MerkleEngine = class _MerkleEngine {
|
|
|
7363
7363
|
const isZero = BigInt(onChainNorm) === 0n;
|
|
7364
7364
|
if (!isZero && onChainNorm !== result.rootHash) {
|
|
7365
7365
|
const target = state.mergedElements;
|
|
7366
|
-
await this.
|
|
7366
|
+
await this._rollback(chainId, target);
|
|
7367
7367
|
throw new SdkError("MERKLE", "Local merkle root mismatch with on-chain root \u2014 rolled back", {
|
|
7368
7368
|
chainId,
|
|
7369
7369
|
rootIndex,
|
|
@@ -7396,21 +7396,31 @@ var MerkleEngine = class _MerkleEngine {
|
|
|
7396
7396
|
}
|
|
7397
7397
|
// ── Rollback (tree O(1) + sync cursor reset) ──
|
|
7398
7398
|
/**
|
|
7399
|
-
*
|
|
7400
|
-
*
|
|
7399
|
+
* Public rollback: step back one batch (32 elements) from the current position.
|
|
7400
|
+
* Upper-layer code calls this on any error to reset and retry.
|
|
7401
7401
|
*
|
|
7402
7402
|
* What gets rolled back:
|
|
7403
7403
|
* - ChairmanMerkle tree version pointer (O(1) — old nodes still in storage)
|
|
7404
7404
|
* - Pending leaves buffer (cleared)
|
|
7405
7405
|
* - Sync cursor: memo + merkle fields (nullifier left unchanged — independent)
|
|
7406
7406
|
*
|
|
7407
|
+
* @returns true if rollback succeeded, false if already at 0 or target version doesn't exist.
|
|
7408
|
+
*/
|
|
7409
|
+
async rollback(chainId) {
|
|
7410
|
+
const state = this.ensureChainState(chainId);
|
|
7411
|
+
const target = Math.max(0, state.mergedElements - SUBTREE_SIZE);
|
|
7412
|
+
return this._rollback(chainId, target);
|
|
7413
|
+
}
|
|
7414
|
+
/**
|
|
7415
|
+
* Internal rollback to an exact batch boundary.
|
|
7416
|
+
*
|
|
7407
7417
|
* @param targetMergedElements Must be a non-negative multiple of 32.
|
|
7408
7418
|
* Pass 0 to reset to the empty tree.
|
|
7409
7419
|
* @returns true if rollback succeeded, false if the target version doesn't exist.
|
|
7410
7420
|
*/
|
|
7411
|
-
async
|
|
7421
|
+
async _rollback(chainId, targetMergedElements) {
|
|
7412
7422
|
if (targetMergedElements < 0 || targetMergedElements % SUBTREE_SIZE !== 0) {
|
|
7413
|
-
throw new SdkError("MERKLE", "
|
|
7423
|
+
throw new SdkError("MERKLE", "_rollback target must be a non-negative multiple of 32", { targetMergedElements });
|
|
7414
7424
|
}
|
|
7415
7425
|
const state = this.ensureChainState(chainId);
|
|
7416
7426
|
const pending = this.ensurePendingLeaves(chainId);
|