@totemsdk/core 1.2.5 → 1.2.7
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/MiniNumber.js +19 -21
- package/dist/Streamable.js +31 -54
- package/dist/adapters/index.js +9 -18
- package/dist/adapters/types.js +11 -19
- package/dist/binio.js +7 -20
- package/dist/bip39.js +14 -24
- package/dist/canonical.d.ts +3 -0
- package/dist/canonical.js +22 -0
- package/dist/cjs/MiniNumber.d.ts +47 -0
- package/dist/cjs/MiniNumber.js +302 -0
- package/dist/cjs/Streamable.d.ts +268 -0
- package/dist/cjs/Streamable.js +439 -0
- package/dist/cjs/adapters/index.d.ts +190 -0
- package/dist/cjs/adapters/index.js +118 -0
- package/dist/cjs/adapters/types.d.ts +150 -0
- package/dist/cjs/adapters/types.js +81 -0
- package/dist/cjs/binio.d.ts +9 -0
- package/dist/cjs/binio.js +25 -0
- package/dist/cjs/bip39.d.ts +91 -0
- package/dist/cjs/bip39.js +434 -0
- package/dist/cjs/canonical.d.ts +3 -0
- package/dist/cjs/canonical.js +27 -0
- package/dist/cjs/derive.d.ts +2 -0
- package/dist/cjs/derive.js +13 -0
- package/dist/cjs/index.d.ts +49 -0
- package/dist/cjs/index.js +231 -0
- package/dist/cjs/javaStreamables.d.ts +254 -0
- package/dist/cjs/javaStreamables.js +391 -0
- package/dist/cjs/lease/LeaseMonitor.d.ts +44 -0
- package/dist/cjs/lease/LeaseMonitor.js +115 -0
- package/dist/cjs/lease/LeaseStore.d.ts +58 -0
- package/dist/cjs/lease/LeaseStore.js +151 -0
- package/dist/cjs/lease/WatermarkStore.d.ts +61 -0
- package/dist/cjs/lease/WatermarkStore.js +209 -0
- package/dist/cjs/lease/index.d.ts +14 -0
- package/dist/cjs/lease/index.js +22 -0
- package/dist/cjs/lease-client.d.ts +31 -0
- package/dist/cjs/lease-client.js +44 -0
- package/dist/cjs/legacy.d.ts +23 -0
- package/dist/cjs/legacy.js +163 -0
- package/dist/cjs/minima32.d.ts +18 -0
- package/dist/cjs/minima32.js +121 -0
- package/dist/cjs/minimaWireSerializer.d.ts +60 -0
- package/dist/cjs/minimaWireSerializer.js +77 -0
- package/dist/cjs/mmr.d.ts +157 -0
- package/dist/cjs/mmr.js +352 -0
- package/dist/cjs/mx.d.ts +1 -0
- package/dist/cjs/mx.js +10 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/params.d.ts +29 -0
- package/dist/cjs/params.js +20 -0
- package/dist/cjs/script.d.ts +7 -0
- package/dist/cjs/script.js +27 -0
- package/dist/cjs/scripts/contract-helpers.d.ts +252 -0
- package/dist/cjs/scripts/contract-helpers.js +407 -0
- package/dist/cjs/scripts/dapp-types.d.ts +119 -0
- package/dist/cjs/scripts/dapp-types.js +77 -0
- package/dist/cjs/scripts/index.d.ts +4 -0
- package/dist/cjs/scripts/index.js +38 -0
- package/dist/cjs/scripts/types.d.ts +81 -0
- package/dist/cjs/scripts/types.js +159 -0
- package/dist/cjs/scripts/witness-serializer.d.ts +29 -0
- package/dist/cjs/scripts/witness-serializer.js +306 -0
- package/dist/cjs/transaction.d.ts +106 -0
- package/dist/cjs/transaction.js +293 -0
- package/dist/cjs/treekey.d.ts +399 -0
- package/dist/cjs/treekey.js +827 -0
- package/dist/cjs/tx/TransactionLifecycle.d.ts +55 -0
- package/dist/cjs/tx/TransactionLifecycle.js +205 -0
- package/dist/cjs/tx/TransactionReceiptStore.d.ts +36 -0
- package/dist/cjs/tx/TransactionReceiptStore.js +93 -0
- package/dist/cjs/tx/TransactionService.d.ts +50 -0
- package/dist/cjs/tx/TransactionService.js +186 -0
- package/dist/cjs/tx/index.d.ts +13 -0
- package/dist/cjs/tx/index.js +20 -0
- package/dist/cjs/tx/types.d.ts +115 -0
- package/dist/cjs/tx/types.js +6 -0
- package/dist/cjs/util.d.ts +1 -0
- package/dist/cjs/util.js +5 -0
- package/dist/cjs/utils.d.ts +8 -0
- package/dist/cjs/utils.js +42 -0
- package/dist/cjs/verify.d.ts +18 -0
- package/dist/cjs/verify.js +174 -0
- package/dist/cjs/version.d.ts +12 -0
- package/dist/cjs/version.js +15 -0
- package/dist/cjs/wasm-sync.d.ts +71 -0
- package/dist/cjs/wasm-sync.js +97 -0
- package/dist/cjs/wots.d.ts +232 -0
- package/dist/cjs/wots.js +589 -0
- package/dist/derive.js +7 -11
- package/dist/index.d.ts +8 -2
- package/dist/index.js +50 -143
- package/dist/javaStreamables.js +34 -55
- package/dist/lease/LeaseMonitor.js +10 -10
- package/dist/lease/LeaseStore.js +8 -9
- package/dist/lease/WatermarkStore.js +8 -9
- package/dist/lease/index.js +4 -13
- package/dist/lease-client.js +3 -8
- package/dist/legacy.js +13 -140
- package/dist/minima32.js +13 -22
- package/dist/minimaWireSerializer.js +14 -20
- package/dist/mmr.js +27 -41
- package/dist/mx.js +1 -10
- package/dist/params.js +5 -9
- package/dist/script.js +7 -12
- package/dist/scripts/contract-helpers.js +25 -36
- package/dist/scripts/dapp-types.js +6 -11
- package/dist/scripts/index.js +4 -38
- package/dist/scripts/types.js +12 -26
- package/dist/scripts/witness-serializer.js +30 -48
- package/dist/transaction.js +46 -55
- package/dist/treekey.js +96 -89
- package/dist/tx/TransactionLifecycle.js +15 -11
- package/dist/tx/TransactionReceiptStore.js +9 -9
- package/dist/tx/TransactionService.js +14 -14
- package/dist/tx/index.js +3 -11
- package/dist/tx/types.js +1 -2
- package/dist/util.js +1 -5
- package/dist/utils.js +5 -12
- package/dist/verify.js +25 -36
- package/dist/version.js +2 -5
- package/dist/wasm-sync.d.ts +2 -2
- package/dist/wasm-sync.js +58 -61
- package/dist/wots.js +64 -94
- package/package.json +84 -45
- package/dist/wasm-bridge.d.ts +0 -54
- package/dist/wasm-bridge.js +0 -303
package/dist/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @module @totemsdk/core
|
|
4
3
|
* Core cryptographic primitives, adapters, and utilities for Minima blockchain.
|
|
@@ -6,181 +5,89 @@
|
|
|
6
5
|
* Cryptographic primitives are backed by Rust/WASM (@totemsdk/core-wasm).
|
|
7
6
|
* Legacy JS implementations are available at @totemsdk/core/legacy.
|
|
8
7
|
*/
|
|
9
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
-
}
|
|
15
|
-
Object.defineProperty(o, k2, desc);
|
|
16
|
-
}) : (function(o, m, k, k2) {
|
|
17
|
-
if (k2 === undefined) k2 = k;
|
|
18
|
-
o[k2] = m[k];
|
|
19
|
-
}));
|
|
20
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
21
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
22
|
-
};
|
|
23
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
-
exports.validateChallenge = exports.createChallenge = exports.timingSafeEqual = exports.computeTransactionDigest = exports.serializeTransaction = exports.wotsAddressFromKeypair = exports.parseMxAddress = exports.makeMxAddress = exports.cleanSeedPhrase = exports.validatePhrase = exports.generateWordList = exports.phraseToSeed = exports.verifyMMRProof = exports.mmrRootFromPublicKeys = exports.verifyTreeSignature = exports.deriveUnifiedAddressPublicKey = exports.createUnifiedRootTreeKey = exports.createUnifiedChildTreeKey = exports.precomputeTransactionCoinID = exports.writeMiniString = exports.writeMiniData = exports.writeMiniNumber = exports.deriveRootPrivSeed = exports.derivePerAddressSeed = exports.deriveChainSeedJava = exports.wotsKeypairFromSeed = exports.wotsPublicKeyFromSeed = exports.wotsPkFromSig = exports.wotsVerifyDigest = exports.wotsVerify = exports.wotsSign = exports.deriveFullPublicKey = exports.derivePKdigest = exports.hashChain = exports.expandPrivateKey = exports.sha3_256 = exports.concatBytes = exports.hexToBytes = exports.bytesToHex = exports.TransactionReceiptStore = exports.WatermarkExhaustedError = exports.TransactionLifecycleError = exports.TransactionLifecycle = exports.TransactionService = exports.flatIndexFromLanes = exports.finalizeLease = exports.prepareLease = exports.LeaseMonitor = exports.WatermarkStore = exports.LeaseStore = void 0;
|
|
25
|
-
exports.MINIMA_CONSTANTS = exports.createPerAddressTreeKeyAsync = exports.createPerAddressTreeKey = exports.createUnifiedChildTreeKeyAsync = exports.DEFAULT_LEVELS = exports.DEFAULT_KEYS_PER_LEVEL = exports.getRootPublicKey = exports.deserializeTreeSignature = exports.serializeTreeSignature = exports.TreeKeyNode = exports.TreeKey = exports.serializeMMREntry = exports.serializeMMRData = exports.serializeMMREntryNumber = exports.createMMREntryNumber = exports.deriveUnifiedChildSeed = exports.indexToMiniDataBytes = exports.javaHashAllObjects = exports.writeHashToStream = exports.serializeMiniNumberONE = exports.serializeMiniNumberZERO = exports.hashObject = exports.deriveChildTreeSeedJava = exports.hashAllObjects = exports.serializeMiniData = exports.serializeMiniNumber = exports.bigIntToByteArray = exports.concat = exports.writeMMREntryNumber = exports.writeMiniByte = exports.normalizeHex = exports.deriveAddressFromPublicKey = exports.verifyTreeSignatureDetailed = exports.verifySignatureDetailed = exports.verifySignature = exports.buildMinimaCoin = exports.createDefaultTransaction = exports.serializeCoin = exports.parseDecimalToMiniNumber = exports.MiniNumber = exports.generateSeedPhrase = exports.convertWordListToSeed = exports.convertStringToSeed = exports.WORD_LIST = exports.addressToRoot = exports.scriptToAddress = exports.decodeMx = exports.encodeMx = exports.scriptFromWotsPk = void 0;
|
|
26
8
|
// Version information for bundle duplication detection
|
|
27
|
-
|
|
9
|
+
export * from './version.js';
|
|
28
10
|
// Platform-agnostic Adapters (SDK Upgrade)
|
|
29
|
-
|
|
11
|
+
export * from './adapters/index.js';
|
|
30
12
|
// Lease Management (SDK Upgrade) - exclude conflicting WotsIndices
|
|
31
|
-
|
|
32
|
-
Object.defineProperty(exports, "LeaseStore", { enumerable: true, get: function () { return index_js_1.LeaseStore; } });
|
|
33
|
-
Object.defineProperty(exports, "WatermarkStore", { enumerable: true, get: function () { return index_js_1.WatermarkStore; } });
|
|
34
|
-
Object.defineProperty(exports, "LeaseMonitor", { enumerable: true, get: function () { return index_js_1.LeaseMonitor; } });
|
|
35
|
-
Object.defineProperty(exports, "prepareLease", { enumerable: true, get: function () { return index_js_1.prepareLease; } });
|
|
36
|
-
Object.defineProperty(exports, "finalizeLease", { enumerable: true, get: function () { return index_js_1.finalizeLease; } });
|
|
37
|
-
Object.defineProperty(exports, "flatIndexFromLanes", { enumerable: true, get: function () { return index_js_1.flatIndexFromLanes; } });
|
|
13
|
+
export { LeaseStore, WatermarkStore, LeaseMonitor, prepareLease, finalizeLease, flatIndexFromLanes, } from './lease/index.js';
|
|
38
14
|
// Transaction Management (SDK Upgrade) - exclude conflicting WotsIndices
|
|
39
|
-
|
|
40
|
-
Object.defineProperty(exports, "TransactionService", { enumerable: true, get: function () { return index_js_2.TransactionService; } });
|
|
41
|
-
Object.defineProperty(exports, "TransactionLifecycle", { enumerable: true, get: function () { return index_js_2.TransactionLifecycle; } });
|
|
42
|
-
Object.defineProperty(exports, "TransactionLifecycleError", { enumerable: true, get: function () { return index_js_2.TransactionLifecycleError; } });
|
|
43
|
-
Object.defineProperty(exports, "WatermarkExhaustedError", { enumerable: true, get: function () { return index_js_2.WatermarkExhaustedError; } });
|
|
44
|
-
Object.defineProperty(exports, "TransactionReceiptStore", { enumerable: true, get: function () { return index_js_2.TransactionReceiptStore; } });
|
|
15
|
+
export { TransactionService, TransactionLifecycle, TransactionLifecycleError, WatermarkExhaustedError, TransactionReceiptStore, } from './tx/index.js';
|
|
45
16
|
// ---------------------------------------------------------------------------
|
|
46
17
|
// Cryptographic primitives — backed by Rust/WASM (@totemsdk/core-wasm)
|
|
47
18
|
// ---------------------------------------------------------------------------
|
|
48
19
|
// Utilities
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
Object.defineProperty(exports, "hexToBytes", { enumerable: true, get: function () { return wasm_sync_js_1.hexToBytes; } });
|
|
52
|
-
Object.defineProperty(exports, "concatBytes", { enumerable: true, get: function () { return wasm_sync_js_1.concatBytes; } });
|
|
20
|
+
export { bytesToHex, hexToBytes, concatBytes } from './wasm-sync.js';
|
|
21
|
+
import { bytesToHex, parseMxAddress } from './wasm-sync.js';
|
|
53
22
|
// SHA3-256
|
|
54
|
-
|
|
55
|
-
Object.defineProperty(exports, "sha3_256", { enumerable: true, get: function () { return wasm_sync_js_2.sha3_256; } });
|
|
23
|
+
export { sha3_256 } from './wasm-sync.js';
|
|
56
24
|
// WOTS Signatures
|
|
57
|
-
|
|
58
|
-
Object.defineProperty(exports, "expandPrivateKey", { enumerable: true, get: function () { return wasm_sync_js_3.expandPrivateKey; } });
|
|
59
|
-
Object.defineProperty(exports, "hashChain", { enumerable: true, get: function () { return wasm_sync_js_3.hashChain; } });
|
|
60
|
-
Object.defineProperty(exports, "derivePKdigest", { enumerable: true, get: function () { return wasm_sync_js_3.derivePKdigest; } });
|
|
61
|
-
Object.defineProperty(exports, "deriveFullPublicKey", { enumerable: true, get: function () { return wasm_sync_js_3.deriveFullPublicKey; } });
|
|
62
|
-
Object.defineProperty(exports, "wotsSign", { enumerable: true, get: function () { return wasm_sync_js_3.wotsSign; } });
|
|
63
|
-
Object.defineProperty(exports, "wotsVerify", { enumerable: true, get: function () { return wasm_sync_js_3.wotsVerify; } });
|
|
64
|
-
Object.defineProperty(exports, "wotsVerifyDigest", { enumerable: true, get: function () { return wasm_sync_js_3.wotsVerifyDigest; } });
|
|
65
|
-
Object.defineProperty(exports, "wotsPkFromSig", { enumerable: true, get: function () { return wasm_sync_js_3.wotsPkFromSig; } });
|
|
66
|
-
Object.defineProperty(exports, "wotsPublicKeyFromSeed", { enumerable: true, get: function () { return wasm_sync_js_3.wotsPublicKeyFromSeed; } });
|
|
67
|
-
Object.defineProperty(exports, "wotsKeypairFromSeed", { enumerable: true, get: function () { return wasm_sync_js_3.wotsKeypairFromSeed; } });
|
|
25
|
+
export { expandPrivateKey, hashChain, derivePKdigest, deriveFullPublicKey, wotsSign, wotsVerify, wotsVerifyDigest, wotsPkFromSig, wotsPublicKeyFromSeed, wotsKeypairFromSeed, } from './wasm-sync.js';
|
|
68
26
|
// WOTS Params (from params.ts — constants, no crypto)
|
|
69
|
-
|
|
27
|
+
export * from './params.js';
|
|
70
28
|
// Java-Compatible Serialization
|
|
71
|
-
|
|
72
|
-
Object.defineProperty(exports, "deriveChainSeedJava", { enumerable: true, get: function () { return wasm_sync_js_4.deriveChainSeedJava; } });
|
|
73
|
-
Object.defineProperty(exports, "derivePerAddressSeed", { enumerable: true, get: function () { return wasm_sync_js_4.derivePerAddressSeed; } });
|
|
74
|
-
Object.defineProperty(exports, "deriveRootPrivSeed", { enumerable: true, get: function () { return wasm_sync_js_4.deriveRootPrivSeed; } });
|
|
75
|
-
Object.defineProperty(exports, "writeMiniNumber", { enumerable: true, get: function () { return wasm_sync_js_4.writeMiniNumber; } });
|
|
76
|
-
Object.defineProperty(exports, "writeMiniData", { enumerable: true, get: function () { return wasm_sync_js_4.writeMiniData; } });
|
|
77
|
-
Object.defineProperty(exports, "writeMiniString", { enumerable: true, get: function () { return wasm_sync_js_4.writeMiniString; } });
|
|
78
|
-
Object.defineProperty(exports, "precomputeTransactionCoinID", { enumerable: true, get: function () { return wasm_sync_js_4.precomputeTransactionCoinID; } });
|
|
29
|
+
export { deriveChainSeedJava, derivePerAddressSeed, deriveRootPrivSeed, writeMiniNumber, writeMiniData, writeMiniString, precomputeTransactionCoinID, } from './wasm-sync.js';
|
|
79
30
|
// TreeKey/TreeKeyNode — WASM-backed
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
Object.defineProperty(exports, "verifyMMRProof", { enumerable: true, get: function () { return wasm_sync_js_5.verifyMMRProof; } });
|
|
31
|
+
// createUnifiedChildTreeKey / createUnifiedRootTreeKey come from the TS
|
|
32
|
+
// implementation (returning a full TreeKey object with setUses/sign/getPublicKey)
|
|
33
|
+
// to match the object API that downstream consumers (server, root-identity)
|
|
34
|
+
// rely on. The WASM binding only returns the root public key bytes.
|
|
35
|
+
export { createUnifiedChildTreeKey, createUnifiedRootTreeKey, deriveUnifiedAddressPublicKey, verifyTreeSignature, } from './treekey.js';
|
|
36
|
+
export { mmrRootFromPublicKeys, verifyMMRProof, } from './wasm-sync.js';
|
|
87
37
|
// BIP39 Seed Phrase Handling
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
38
|
+
// NOTE: the TS implementation (bip39.ts) uses the complete 2048-word BIP39
|
|
39
|
+
// word list and Minima-compatible uppercase canonicalization. The WASM
|
|
40
|
+
// binding (wasm-sync.ts) ships a corrupted/partial word list (missing
|
|
41
|
+
// "hungry", contains spurious words) and lowercases instead of uppercasing,
|
|
42
|
+
// so the public API routes through the TS implementation.
|
|
43
|
+
export { phraseToSeed, generateWordList, validatePhrase, cleanSeedPhrase, } from './bip39.js';
|
|
93
44
|
// Address Derivation
|
|
94
|
-
|
|
95
|
-
Object.defineProperty(exports, "makeMxAddress", { enumerable: true, get: function () { return wasm_sync_js_7.makeMxAddress; } });
|
|
96
|
-
Object.defineProperty(exports, "parseMxAddress", { enumerable: true, get: function () { return wasm_sync_js_7.parseMxAddress; } });
|
|
97
|
-
Object.defineProperty(exports, "wotsAddressFromKeypair", { enumerable: true, get: function () { return wasm_sync_js_7.wotsAddressFromKeypair; } });
|
|
45
|
+
export { makeMxAddress, parseMxAddress, wotsAddressFromKeypair, } from './wasm-sync.js';
|
|
98
46
|
// Transaction Serialization & Digest
|
|
99
|
-
|
|
100
|
-
Object.defineProperty(exports, "serializeTransaction", { enumerable: true, get: function () { return wasm_sync_js_8.serializeTransaction; } });
|
|
101
|
-
Object.defineProperty(exports, "computeTransactionDigest", { enumerable: true, get: function () { return wasm_sync_js_8.computeTransactionDigest; } });
|
|
47
|
+
export { serializeTransaction, computeTransactionDigest, } from './wasm-sync.js';
|
|
102
48
|
// Verification
|
|
103
|
-
|
|
104
|
-
Object.defineProperty(exports, "timingSafeEqual", { enumerable: true, get: function () { return wasm_sync_js_9.timingSafeEqual; } });
|
|
105
|
-
Object.defineProperty(exports, "createChallenge", { enumerable: true, get: function () { return wasm_sync_js_9.createChallenge; } });
|
|
106
|
-
Object.defineProperty(exports, "validateChallenge", { enumerable: true, get: function () { return wasm_sync_js_9.validateChallenge; } });
|
|
49
|
+
export { timingSafeEqual, createChallenge, validateChallenge, } from './wasm-sync.js';
|
|
107
50
|
// ---------------------------------------------------------------------------
|
|
108
51
|
// TypeScript-only modules (no crypto — keep as-is)
|
|
109
52
|
// ---------------------------------------------------------------------------
|
|
110
53
|
// Script helpers (for address derivation)
|
|
111
|
-
|
|
112
|
-
Object.defineProperty(exports, "scriptFromWotsPk", { enumerable: true, get: function () { return script_js_1.scriptFromWotsPk; } });
|
|
54
|
+
export { scriptFromWotsPk } from './script.js';
|
|
113
55
|
// Base32 Encoding (Minima-compatible) — re-export from WASM
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
56
|
+
export { makeMxAddress as encodeMx, parseMxAddress as decodeMx } from './wasm-sync.js';
|
|
57
|
+
/** Convert an Mx (radix-32) or hex Minima address to lowercase hex. */
|
|
58
|
+
export function mxToHex(address) {
|
|
59
|
+
const upper = address.startsWith('0x') || address.startsWith('0X') ? address.slice(2) : address;
|
|
60
|
+
return upper.toUpperCase().startsWith('MX')
|
|
61
|
+
? bytesToHex(parseMxAddress(address))
|
|
62
|
+
: upper.replace(/^0x/i, '');
|
|
63
|
+
}
|
|
117
64
|
// Merkle Mountain Range (original JS — types and helpers)
|
|
118
|
-
|
|
65
|
+
export * from './mmr.js';
|
|
119
66
|
// Script Types, Witness Serializer, Contract Helpers
|
|
120
|
-
|
|
67
|
+
export * from './scripts/index.js';
|
|
121
68
|
// Address Derivation (original)
|
|
122
|
-
|
|
123
|
-
Object.defineProperty(exports, "scriptToAddress", { enumerable: true, get: function () { return derive_js_1.scriptToAddress; } });
|
|
124
|
-
Object.defineProperty(exports, "addressToRoot", { enumerable: true, get: function () { return derive_js_1.addressToRoot; } });
|
|
69
|
+
export { scriptToAddress, addressToRoot } from './derive.js';
|
|
125
70
|
// BIP39 — re-export word list and legacy helpers from JS
|
|
126
|
-
|
|
127
|
-
Object.defineProperty(exports, "WORD_LIST", { enumerable: true, get: function () { return bip39_js_1.WORD_LIST; } });
|
|
128
|
-
Object.defineProperty(exports, "convertStringToSeed", { enumerable: true, get: function () { return bip39_js_1.convertStringToSeed; } });
|
|
129
|
-
Object.defineProperty(exports, "convertWordListToSeed", { enumerable: true, get: function () { return bip39_js_1.convertWordListToSeed; } });
|
|
130
|
-
Object.defineProperty(exports, "generateSeedPhrase", { enumerable: true, get: function () { return bip39_js_1.generateSeedPhrase; } });
|
|
71
|
+
export { WORD_LIST, convertStringToSeed, convertWordListToSeed, generateSeedPhrase, } from './bip39.js';
|
|
131
72
|
// MiniNumber class (matches Java MiniNumber/BigDecimal semantics)
|
|
132
|
-
|
|
133
|
-
Object.defineProperty(exports, "MiniNumber", { enumerable: true, get: function () { return MiniNumber_js_1.MiniNumber; } });
|
|
73
|
+
export { MiniNumber } from './MiniNumber.js';
|
|
134
74
|
// Transaction types (from JS)
|
|
135
|
-
|
|
136
|
-
Object.defineProperty(exports, "parseDecimalToMiniNumber", { enumerable: true, get: function () { return transaction_js_1.parseDecimalToMiniNumber; } });
|
|
137
|
-
Object.defineProperty(exports, "serializeCoin", { enumerable: true, get: function () { return transaction_js_1.serializeCoin; } });
|
|
138
|
-
Object.defineProperty(exports, "createDefaultTransaction", { enumerable: true, get: function () { return transaction_js_1.createDefaultTransaction; } });
|
|
139
|
-
Object.defineProperty(exports, "buildMinimaCoin", { enumerable: true, get: function () { return transaction_js_1.buildMinimaCoin; } });
|
|
75
|
+
export { parseDecimalToMiniNumber, serializeCoin, createDefaultTransaction, buildMinimaCoin, } from './transaction.js';
|
|
140
76
|
// High-level Verification API (convenience functions for integrators)
|
|
141
|
-
|
|
142
|
-
Object.defineProperty(exports, "verifySignature", { enumerable: true, get: function () { return verify_js_1.verifySignature; } });
|
|
143
|
-
Object.defineProperty(exports, "verifySignatureDetailed", { enumerable: true, get: function () { return verify_js_1.verifySignatureDetailed; } });
|
|
144
|
-
Object.defineProperty(exports, "verifyTreeSignatureDetailed", { enumerable: true, get: function () { return verify_js_1.verifyTreeSignatureDetailed; } });
|
|
145
|
-
Object.defineProperty(exports, "deriveAddressFromPublicKey", { enumerable: true, get: function () { return verify_js_1.deriveAddressFromPublicKey; } });
|
|
146
|
-
Object.defineProperty(exports, "normalizeHex", { enumerable: true, get: function () { return verify_js_1.normalizeHex; } });
|
|
77
|
+
export { verifySignature, verifySignatureDetailed, verifyTreeSignatureDetailed, deriveAddressFromPublicKey, normalizeHex, } from './verify.js';
|
|
147
78
|
// Streamable primitives (low-level serialization building blocks)
|
|
148
|
-
|
|
149
|
-
Object.defineProperty(exports, "writeMiniByte", { enumerable: true, get: function () { return Streamable_js_1.writeMiniByte; } });
|
|
150
|
-
Object.defineProperty(exports, "writeMMREntryNumber", { enumerable: true, get: function () { return Streamable_js_1.writeMMREntryNumber; } });
|
|
151
|
-
Object.defineProperty(exports, "concat", { enumerable: true, get: function () { return Streamable_js_1.concat; } });
|
|
152
|
-
Object.defineProperty(exports, "bigIntToByteArray", { enumerable: true, get: function () { return Streamable_js_1.bigIntToByteArray; } });
|
|
79
|
+
export { writeMiniByte, writeMMREntryNumber, concat, bigIntToByteArray, } from './Streamable.js';
|
|
153
80
|
// Java-Compatible Serialization Helpers (non-crypto)
|
|
154
|
-
|
|
155
|
-
Object.defineProperty(exports, "serializeMiniNumber", { enumerable: true, get: function () { return javaStreamables_js_1.serializeMiniNumber; } });
|
|
156
|
-
Object.defineProperty(exports, "serializeMiniData", { enumerable: true, get: function () { return javaStreamables_js_1.serializeMiniData; } });
|
|
157
|
-
Object.defineProperty(exports, "hashAllObjects", { enumerable: true, get: function () { return javaStreamables_js_1.hashAllObjects; } });
|
|
158
|
-
Object.defineProperty(exports, "deriveChildTreeSeedJava", { enumerable: true, get: function () { return javaStreamables_js_1.deriveChildTreeSeedJava; } });
|
|
159
|
-
Object.defineProperty(exports, "hashObject", { enumerable: true, get: function () { return javaStreamables_js_1.hashObject; } });
|
|
160
|
-
Object.defineProperty(exports, "serializeMiniNumberZERO", { enumerable: true, get: function () { return javaStreamables_js_1.serializeMiniNumberZERO; } });
|
|
161
|
-
Object.defineProperty(exports, "serializeMiniNumberONE", { enumerable: true, get: function () { return javaStreamables_js_1.serializeMiniNumberONE; } });
|
|
162
|
-
Object.defineProperty(exports, "writeHashToStream", { enumerable: true, get: function () { return javaStreamables_js_1.writeHashToStream; } });
|
|
163
|
-
Object.defineProperty(exports, "javaHashAllObjects", { enumerable: true, get: function () { return javaStreamables_js_1.javaHashAllObjects; } });
|
|
164
|
-
Object.defineProperty(exports, "indexToMiniDataBytes", { enumerable: true, get: function () { return javaStreamables_js_1.indexToMiniDataBytes; } });
|
|
165
|
-
Object.defineProperty(exports, "deriveUnifiedChildSeed", { enumerable: true, get: function () { return javaStreamables_js_1.deriveUnifiedChildSeed; } });
|
|
166
|
-
Object.defineProperty(exports, "createMMREntryNumber", { enumerable: true, get: function () { return javaStreamables_js_1.createMMREntryNumber; } });
|
|
167
|
-
Object.defineProperty(exports, "serializeMMREntryNumber", { enumerable: true, get: function () { return javaStreamables_js_1.serializeMMREntryNumber; } });
|
|
168
|
-
Object.defineProperty(exports, "serializeMMRData", { enumerable: true, get: function () { return javaStreamables_js_1.serializeMMRData; } });
|
|
169
|
-
Object.defineProperty(exports, "serializeMMREntry", { enumerable: true, get: function () { return javaStreamables_js_1.serializeMMREntry; } });
|
|
81
|
+
export { serializeMiniNumber, serializeMiniData, hashAllObjects, deriveChildTreeSeedJava, hashObject, serializeMiniNumberZERO, serializeMiniNumberONE, writeHashToStream, javaHashAllObjects, indexToMiniDataBytes, deriveUnifiedChildSeed, createMMREntryNumber, serializeMMREntryNumber, serializeMMRData, serializeMMREntry, } from './javaStreamables.js';
|
|
170
82
|
// TreeKey/TreeKeyNode — JS types and helpers
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
Object.defineProperty(exports, "DEFAULT_KEYS_PER_LEVEL", { enumerable: true, get: function () { return treekey_js_1.DEFAULT_KEYS_PER_LEVEL; } });
|
|
178
|
-
Object.defineProperty(exports, "DEFAULT_LEVELS", { enumerable: true, get: function () { return treekey_js_1.DEFAULT_LEVELS; } });
|
|
179
|
-
Object.defineProperty(exports, "createUnifiedChildTreeKeyAsync", { enumerable: true, get: function () { return treekey_js_1.createUnifiedChildTreeKeyAsync; } });
|
|
180
|
-
Object.defineProperty(exports, "createPerAddressTreeKey", { enumerable: true, get: function () { return treekey_js_1.createPerAddressTreeKey; } });
|
|
181
|
-
Object.defineProperty(exports, "createPerAddressTreeKeyAsync", { enumerable: true, get: function () { return treekey_js_1.createPerAddressTreeKeyAsync; } });
|
|
83
|
+
export { TreeKey, TreeKeyNode, serializeTreeSignature, deserializeTreeSignature, getRootPublicKey, DEFAULT_KEYS_PER_LEVEL, DEFAULT_LEVELS, createUnifiedChildTreeKeyAsync, createPerAddressTreeKey, createPerAddressTreeKeyAsync, } from './treekey.js';
|
|
84
|
+
export { F, hex, fromHex, u16be, u32be, assert32, h, prfChainSeed, toWinternitzDigits, baseWWithChecksum, wotsSignLegacy, } from './wots.js';
|
|
85
|
+
// Canonical helpers (deterministic JSON + hashing)
|
|
86
|
+
export { toHex, canonicalJson, hashCanonical } from './canonical.js';
|
|
87
|
+
// Byte/string utilities
|
|
88
|
+
export { utf8ToBytes, bytesToUtf8 } from './utils.js';
|
|
182
89
|
// Constants
|
|
183
|
-
|
|
90
|
+
export const MINIMA_CONSTANTS = {
|
|
184
91
|
WOTS_W: 8,
|
|
185
92
|
WOTS_N: 32,
|
|
186
93
|
MAX_SIGNATURES: 262144,
|
package/dist/javaStreamables.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Java-Compatible Serialization Helpers
|
|
4
3
|
*
|
|
@@ -13,28 +12,8 @@
|
|
|
13
12
|
* NOTE: This module provides number-based wrappers for backward compatibility.
|
|
14
13
|
* The canonical implementations are in Streamable.ts which uses bigint for precision.
|
|
15
14
|
*/
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
exports.serializeMiniData = serializeMiniData;
|
|
19
|
-
exports.hashAllObjects = hashAllObjects;
|
|
20
|
-
exports.deriveChainSeedJava = deriveChainSeedJava;
|
|
21
|
-
exports.deriveChildTreeSeedJava = deriveChildTreeSeedJava;
|
|
22
|
-
exports.hashObject = hashObject;
|
|
23
|
-
exports.indexToMiniDataBytes = indexToMiniDataBytes;
|
|
24
|
-
exports.derivePerAddressSeed = derivePerAddressSeed;
|
|
25
|
-
exports.serializeMiniNumberZERO = serializeMiniNumberZERO;
|
|
26
|
-
exports.serializeMiniNumberONE = serializeMiniNumberONE;
|
|
27
|
-
exports.writeHashToStream = writeHashToStream;
|
|
28
|
-
exports.javaHashAllObjects = javaHashAllObjects;
|
|
29
|
-
exports.createMMREntryNumber = createMMREntryNumber;
|
|
30
|
-
exports.serializeMMREntryNumber = serializeMMREntryNumber;
|
|
31
|
-
exports.serializeMMRData = serializeMMRData;
|
|
32
|
-
exports.serializeMMREntry = serializeMMREntry;
|
|
33
|
-
exports.deriveRootPrivSeed = deriveRootPrivSeed;
|
|
34
|
-
exports.deriveUnifiedChildSeed = deriveUnifiedChildSeed;
|
|
35
|
-
exports.precomputeTransactionCoinID = precomputeTransactionCoinID;
|
|
36
|
-
const wasm_sync_js_1 = require("./wasm-sync.js");
|
|
37
|
-
const Streamable_js_1 = require("./Streamable.js");
|
|
15
|
+
import { sha3_256 } from './wasm-sync.js';
|
|
16
|
+
import { writeMiniNumber as streamableWriteMiniNumber, writeMiniData as streamableWriteMiniData, writeHashToStream as streamableWriteHashToStream, bigIntToByteArray } from './Streamable.js';
|
|
38
17
|
/**
|
|
39
18
|
* Serialize a number in MiniNumber format (Java compatible)
|
|
40
19
|
*
|
|
@@ -43,10 +22,10 @@ const Streamable_js_1 = require("./Streamable.js");
|
|
|
43
22
|
* @param n - Non-negative integer to serialize
|
|
44
23
|
* @returns Serialized bytes matching Java MiniNumber format
|
|
45
24
|
*/
|
|
46
|
-
function serializeMiniNumber(n) {
|
|
25
|
+
export function serializeMiniNumber(n) {
|
|
47
26
|
if (n < 0)
|
|
48
27
|
throw new Error('MiniNumber must be non-negative');
|
|
49
|
-
return (
|
|
28
|
+
return streamableWriteMiniNumber(BigInt(n));
|
|
50
29
|
}
|
|
51
30
|
/**
|
|
52
31
|
* Serialize bytes in MiniData format (Java compatible)
|
|
@@ -56,8 +35,8 @@ function serializeMiniNumber(n) {
|
|
|
56
35
|
* @param data - Bytes to serialize
|
|
57
36
|
* @returns Serialized bytes matching Java MiniData format
|
|
58
37
|
*/
|
|
59
|
-
function serializeMiniData(data) {
|
|
60
|
-
return (
|
|
38
|
+
export function serializeMiniData(data) {
|
|
39
|
+
return streamableWriteMiniData(data);
|
|
61
40
|
}
|
|
62
41
|
/**
|
|
63
42
|
* Hash multiple Streamable objects (Java compatible)
|
|
@@ -72,7 +51,7 @@ function serializeMiniData(data) {
|
|
|
72
51
|
* @param items - Array of serialized objects (use serializeMiniNumber/serializeMiniData)
|
|
73
52
|
* @returns 32-byte SHA3-256 hash
|
|
74
53
|
*/
|
|
75
|
-
function hashAllObjects(...items) {
|
|
54
|
+
export function hashAllObjects(...items) {
|
|
76
55
|
// Concatenate all serialized items
|
|
77
56
|
const totalLength = items.reduce((sum, item) => sum + item.length, 0);
|
|
78
57
|
const combined = new Uint8Array(totalLength);
|
|
@@ -82,7 +61,7 @@ function hashAllObjects(...items) {
|
|
|
82
61
|
offset += item.length;
|
|
83
62
|
}
|
|
84
63
|
// SHA3-256 hash
|
|
85
|
-
return
|
|
64
|
+
return sha3_256(combined);
|
|
86
65
|
}
|
|
87
66
|
/**
|
|
88
67
|
* Derive per-chain seed matching Java TreeKeyNode.java exactly
|
|
@@ -94,7 +73,7 @@ function hashAllObjects(...items) {
|
|
|
94
73
|
* @param index - Chain index (0-63)
|
|
95
74
|
* @returns 32-byte derived seed for this chain
|
|
96
75
|
*/
|
|
97
|
-
function deriveChainSeedJava(privateSeed, index) {
|
|
76
|
+
export function deriveChainSeedJava(privateSeed, index) {
|
|
98
77
|
const indexSerialized = serializeMiniNumber(index);
|
|
99
78
|
const seedSerialized = serializeMiniData(privateSeed);
|
|
100
79
|
return hashAllObjects(indexSerialized, seedSerialized);
|
|
@@ -112,7 +91,7 @@ function deriveChainSeedJava(privateSeed, index) {
|
|
|
112
91
|
* @param childIndex - Child index (0-63)
|
|
113
92
|
* @returns 32-byte derived seed for child tree
|
|
114
93
|
*/
|
|
115
|
-
function deriveChildTreeSeedJava(childSeed, childIndex) {
|
|
94
|
+
export function deriveChildTreeSeedJava(childSeed, childIndex) {
|
|
116
95
|
const indexSerialized = serializeMiniNumber(childIndex);
|
|
117
96
|
const seedSerialized = serializeMiniData(childSeed);
|
|
118
97
|
return hashAllObjects(indexSerialized, seedSerialized);
|
|
@@ -128,9 +107,9 @@ function deriveChildTreeSeedJava(childSeed, childIndex) {
|
|
|
128
107
|
* @param data - Raw bytes (will be serialized as MiniData)
|
|
129
108
|
* @returns 32-byte SHA3-256 hash
|
|
130
109
|
*/
|
|
131
|
-
function hashObject(data) {
|
|
110
|
+
export function hashObject(data) {
|
|
132
111
|
const serialized = serializeMiniData(data);
|
|
133
|
-
return
|
|
112
|
+
return sha3_256(serialized);
|
|
134
113
|
}
|
|
135
114
|
/**
|
|
136
115
|
* Convert index to MiniData bytes matching Java's:
|
|
@@ -142,7 +121,7 @@ function hashObject(data) {
|
|
|
142
121
|
* @param index - Non-negative integer (0, 1, 2, ...)
|
|
143
122
|
* @returns Minimal byte representation of the index
|
|
144
123
|
*/
|
|
145
|
-
function indexToMiniDataBytes(index) {
|
|
124
|
+
export function indexToMiniDataBytes(index) {
|
|
146
125
|
if (index === 0) {
|
|
147
126
|
return new Uint8Array([0x00]);
|
|
148
127
|
}
|
|
@@ -170,7 +149,7 @@ function indexToMiniDataBytes(index) {
|
|
|
170
149
|
* @param addressIndex - Address index (0, 1, 2, ... 63)
|
|
171
150
|
* @returns 32-byte private seed for this address's TreeKey
|
|
172
151
|
*/
|
|
173
|
-
function derivePerAddressSeed(baseSeed, addressIndex) {
|
|
152
|
+
export function derivePerAddressSeed(baseSeed, addressIndex) {
|
|
174
153
|
// Step 1: Create modifier bytes from BigInteger representation of index
|
|
175
154
|
const modifierBytes = indexToMiniDataBytes(addressIndex);
|
|
176
155
|
// Step 2: Serialize both as MiniData (4-byte length prefix each)
|
|
@@ -180,7 +159,7 @@ function derivePerAddressSeed(baseSeed, addressIndex) {
|
|
|
180
159
|
const combined = new Uint8Array(baseSeedSerialized.length + modifierSerialized.length);
|
|
181
160
|
combined.set(baseSeedSerialized, 0);
|
|
182
161
|
combined.set(modifierSerialized, baseSeedSerialized.length);
|
|
183
|
-
const result =
|
|
162
|
+
const result = sha3_256(combined);
|
|
184
163
|
// DIAGNOSTIC: Log first 8 bytes to detect bundle duplication or implementation differences
|
|
185
164
|
// Enable via: globalThis.TOTEM_SEED_DEBUG = true
|
|
186
165
|
if (typeof console !== 'undefined' && globalThis.TOTEM_SEED_DEBUG) {
|
|
@@ -193,14 +172,14 @@ function derivePerAddressSeed(baseSeed, addressIndex) {
|
|
|
193
172
|
* Serialize MiniNumber.ZERO - cached for performance
|
|
194
173
|
* Returns: [0x00, 0x01, 0x00] = scale(0) + length(1) + value(0)
|
|
195
174
|
*/
|
|
196
|
-
function serializeMiniNumberZERO() {
|
|
175
|
+
export function serializeMiniNumberZERO() {
|
|
197
176
|
return new Uint8Array([0x00, 0x01, 0x00]);
|
|
198
177
|
}
|
|
199
178
|
/**
|
|
200
179
|
* Serialize MiniNumber.ONE
|
|
201
180
|
* Returns: [0x00, 0x01, 0x01] = scale(0) + length(1) + value(1)
|
|
202
181
|
*/
|
|
203
|
-
function serializeMiniNumberONE() {
|
|
182
|
+
export function serializeMiniNumberONE() {
|
|
204
183
|
return new Uint8Array([0x00, 0x01, 0x01]);
|
|
205
184
|
}
|
|
206
185
|
/**
|
|
@@ -211,8 +190,8 @@ function serializeMiniNumberONE() {
|
|
|
211
190
|
* @param data - Hash bytes (max 64 bytes per MINIMA_MAX_HASH_LENGTH)
|
|
212
191
|
* @returns Serialized bytes with 4-byte length prefix
|
|
213
192
|
*/
|
|
214
|
-
function writeHashToStream(data) {
|
|
215
|
-
return (
|
|
193
|
+
export function writeHashToStream(data) {
|
|
194
|
+
return streamableWriteHashToStream(data);
|
|
216
195
|
}
|
|
217
196
|
/**
|
|
218
197
|
* Java hashAllObjects for MMRData hashing
|
|
@@ -232,7 +211,7 @@ function writeHashToStream(data) {
|
|
|
232
211
|
* @param items - Pre-serialized items to concatenate and hash
|
|
233
212
|
* @returns 32-byte SHA3-256 hash
|
|
234
213
|
*/
|
|
235
|
-
function javaHashAllObjects(...items) {
|
|
214
|
+
export function javaHashAllObjects(...items) {
|
|
236
215
|
const totalLength = items.reduce((sum, item) => sum + item.length, 0);
|
|
237
216
|
const combined = new Uint8Array(totalLength);
|
|
238
217
|
let offset = 0;
|
|
@@ -240,12 +219,12 @@ function javaHashAllObjects(...items) {
|
|
|
240
219
|
combined.set(item, offset);
|
|
241
220
|
offset += item.length;
|
|
242
221
|
}
|
|
243
|
-
return
|
|
222
|
+
return sha3_256(combined);
|
|
244
223
|
}
|
|
245
224
|
/**
|
|
246
225
|
* Create MMREntryNumber from bigint (common case for integer positions)
|
|
247
226
|
*/
|
|
248
|
-
function createMMREntryNumber(value) {
|
|
227
|
+
export function createMMREntryNumber(value) {
|
|
249
228
|
return { scale: 0, unscaled: value };
|
|
250
229
|
}
|
|
251
230
|
/**
|
|
@@ -258,7 +237,7 @@ function createMMREntryNumber(value) {
|
|
|
258
237
|
* @param entry - MMREntryNumber to serialize
|
|
259
238
|
* @returns Serialized bytes: MiniNumber(scale) + MiniData(unscaled bytes)
|
|
260
239
|
*/
|
|
261
|
-
function serializeMMREntryNumber(entry) {
|
|
240
|
+
export function serializeMMREntryNumber(entry) {
|
|
262
241
|
const scaleSerialized = serializeMiniNumber(entry.scale);
|
|
263
242
|
const unscaledBytes = bigintToSignedBytes(entry.unscaled);
|
|
264
243
|
const unscaledSerialized = serializeMiniData(unscaledBytes);
|
|
@@ -272,7 +251,7 @@ function serializeMMREntryNumber(entry) {
|
|
|
272
251
|
* Uses the canonical implementation from Streamable.ts
|
|
273
252
|
*/
|
|
274
253
|
function bigintToSignedBytes(n) {
|
|
275
|
-
return
|
|
254
|
+
return bigIntToByteArray(n);
|
|
276
255
|
}
|
|
277
256
|
/**
|
|
278
257
|
* Serialize MMRData matching Java MMRData.writeDataStream()
|
|
@@ -284,7 +263,7 @@ function bigintToSignedBytes(n) {
|
|
|
284
263
|
* @param mmrData - MMRData to serialize
|
|
285
264
|
* @returns Serialized bytes: writeHashToStream(hash) + MiniNumber(value)
|
|
286
265
|
*/
|
|
287
|
-
function serializeMMRData(mmrData) {
|
|
266
|
+
export function serializeMMRData(mmrData) {
|
|
288
267
|
const hashSerialized = writeHashToStream(mmrData.data);
|
|
289
268
|
const valueSerialized = serializeMiniNumber(Number(mmrData.value));
|
|
290
269
|
const result = new Uint8Array(hashSerialized.length + valueSerialized.length);
|
|
@@ -304,7 +283,7 @@ function serializeMMRData(mmrData) {
|
|
|
304
283
|
* @param entry - MMREntry to serialize
|
|
305
284
|
* @returns Serialized bytes: MiniNumber(row) + MMREntryNumber + MMRData
|
|
306
285
|
*/
|
|
307
|
-
function serializeMMREntry(entry) {
|
|
286
|
+
export function serializeMMREntry(entry) {
|
|
308
287
|
const rowSerialized = serializeMiniNumber(entry.row);
|
|
309
288
|
const entryNumberSerialized = serializeMMREntryNumber(entry.entryNumber);
|
|
310
289
|
const mmrDataSerialized = serializeMMRData(entry.mmrData);
|
|
@@ -327,14 +306,14 @@ function serializeMMREntry(entry) {
|
|
|
327
306
|
* @param baseSeed - 32-byte wallet base seed (from mnemonic)
|
|
328
307
|
* @returns 32-byte root private seed
|
|
329
308
|
*/
|
|
330
|
-
function deriveRootPrivSeed(baseSeed) {
|
|
309
|
+
export function deriveRootPrivSeed(baseSeed) {
|
|
331
310
|
const baseSeedSerialized = serializeMiniData(baseSeed);
|
|
332
311
|
const rootIdentityBytes = new TextEncoder().encode('ROOT_IDENTITY');
|
|
333
312
|
const rootIdentitySerialized = serializeMiniData(rootIdentityBytes);
|
|
334
313
|
const combined = new Uint8Array(baseSeedSerialized.length + rootIdentitySerialized.length);
|
|
335
314
|
combined.set(baseSeedSerialized, 0);
|
|
336
315
|
combined.set(rootIdentitySerialized, baseSeedSerialized.length);
|
|
337
|
-
return
|
|
316
|
+
return sha3_256(combined);
|
|
338
317
|
}
|
|
339
318
|
/**
|
|
340
319
|
* Derive a unified child seed for the address at `index`.
|
|
@@ -346,7 +325,7 @@ function deriveRootPrivSeed(baseSeed) {
|
|
|
346
325
|
* @param index - Address index (0-63)
|
|
347
326
|
* @returns 32-byte child seed for the TreeKey at this address
|
|
348
327
|
*/
|
|
349
|
-
function deriveUnifiedChildSeed(baseSeed, index) {
|
|
328
|
+
export function deriveUnifiedChildSeed(baseSeed, index) {
|
|
350
329
|
const rootPrivSeed = deriveRootPrivSeed(baseSeed);
|
|
351
330
|
const modifierBytes = indexToMiniDataBytes(index);
|
|
352
331
|
const rootSeedSerialized = serializeMiniData(rootPrivSeed);
|
|
@@ -354,7 +333,7 @@ function deriveUnifiedChildSeed(baseSeed, index) {
|
|
|
354
333
|
const combined = new Uint8Array(rootSeedSerialized.length + modifierSerialized.length);
|
|
355
334
|
combined.set(rootSeedSerialized, 0);
|
|
356
335
|
combined.set(modifierSerialized, rootSeedSerialized.length);
|
|
357
|
-
return
|
|
336
|
+
return sha3_256(combined);
|
|
358
337
|
}
|
|
359
338
|
/**
|
|
360
339
|
* Precompute output coin IDs before computing the transaction digest.
|
|
@@ -372,7 +351,7 @@ function deriveUnifiedChildSeed(baseSeed, index) {
|
|
|
372
351
|
* @param inputs - Transaction inputs array, each must have a coinId (Uint8Array)
|
|
373
352
|
* @param outputs - Transaction outputs array, each will have its coinId mutated in-place
|
|
374
353
|
*/
|
|
375
|
-
function precomputeTransactionCoinID(inputs, outputs) {
|
|
354
|
+
export function precomputeTransactionCoinID(inputs, outputs) {
|
|
376
355
|
if (inputs.length === 0)
|
|
377
356
|
return;
|
|
378
357
|
const baseCoinId = inputs[0].coinId;
|
|
@@ -381,11 +360,11 @@ function precomputeTransactionCoinID(inputs, outputs) {
|
|
|
381
360
|
`(placeholder?). Real coinId from CoinProof required for signing.`);
|
|
382
361
|
}
|
|
383
362
|
for (let i = 0; i < outputs.length; i++) {
|
|
384
|
-
const baseCoinIdStream = (
|
|
385
|
-
const outputIndexStream = (
|
|
363
|
+
const baseCoinIdStream = streamableWriteMiniData(baseCoinId);
|
|
364
|
+
const outputIndexStream = streamableWriteMiniNumber(BigInt(i));
|
|
386
365
|
const combined = new Uint8Array(baseCoinIdStream.length + outputIndexStream.length);
|
|
387
366
|
combined.set(baseCoinIdStream, 0);
|
|
388
367
|
combined.set(outputIndexStream, baseCoinIdStream.length);
|
|
389
|
-
outputs[i].coinId =
|
|
368
|
+
outputs[i].coinId = sha3_256(combined);
|
|
390
369
|
}
|
|
391
370
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @module LeaseMonitor
|
|
4
3
|
* Monitors lease expiry and triggers renewal/cleanup actions
|
|
@@ -8,20 +7,22 @@
|
|
|
8
7
|
* - Event-based notifications for expiring leases
|
|
9
8
|
* - Adaptive monitoring interval based on shortest TTL
|
|
10
9
|
*/
|
|
11
|
-
|
|
12
|
-
exports.LeaseMonitor = void 0;
|
|
13
|
-
const index_js_1 = require("../adapters/index.js");
|
|
10
|
+
import { DefaultTimerAdapter, NoopLogger } from '../adapters/index.js';
|
|
14
11
|
const DEFAULT_CONFIG = {
|
|
15
12
|
defaultIntervalMs: 5000,
|
|
16
13
|
expiryThresholdMs: 5000,
|
|
17
14
|
minIntervalMs: 1000,
|
|
18
15
|
maxIntervalMs: 30000,
|
|
19
16
|
};
|
|
20
|
-
class LeaseMonitor {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
17
|
+
export class LeaseMonitor {
|
|
18
|
+
leaseStore;
|
|
19
|
+
timer;
|
|
20
|
+
logger;
|
|
21
|
+
config;
|
|
22
|
+
timerHandle = null;
|
|
23
|
+
isRunning = false;
|
|
24
|
+
expiryCallbacks = new Set();
|
|
25
|
+
constructor(leaseStore, timer = new DefaultTimerAdapter(), logger = new NoopLogger(), config = {}) {
|
|
25
26
|
this.leaseStore = leaseStore;
|
|
26
27
|
this.timer = timer;
|
|
27
28
|
this.logger = logger;
|
|
@@ -108,4 +109,3 @@ class LeaseMonitor {
|
|
|
108
109
|
});
|
|
109
110
|
}
|
|
110
111
|
}
|
|
111
|
-
exports.LeaseMonitor = LeaseMonitor;
|
package/dist/lease/LeaseStore.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @module LeaseStore
|
|
4
3
|
* WOTS lease lifecycle management with platform-agnostic storage
|
|
@@ -10,14 +9,15 @@
|
|
|
10
9
|
* - Mutators update memory cache AND persist to storage
|
|
11
10
|
* - Caller MUST call initialize() before using sync getters
|
|
12
11
|
*/
|
|
13
|
-
|
|
14
|
-
exports.LeaseStore = void 0;
|
|
15
|
-
const index_js_1 = require("../adapters/index.js");
|
|
12
|
+
import { NoopLogger } from '../adapters/index.js';
|
|
16
13
|
const DEFAULT_STORAGE_KEY = 'totem_wots_leases';
|
|
17
|
-
class LeaseStore {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
export class LeaseStore {
|
|
15
|
+
leases = new Map();
|
|
16
|
+
_initialized = false;
|
|
17
|
+
storageKey;
|
|
18
|
+
storage;
|
|
19
|
+
logger;
|
|
20
|
+
constructor(storage, logger = new NoopLogger(), config = {}) {
|
|
21
21
|
this.storage = storage;
|
|
22
22
|
this.logger = logger;
|
|
23
23
|
this.storageKey = config.storageKey ?? DEFAULT_STORAGE_KEY;
|
|
@@ -145,4 +145,3 @@ class LeaseStore {
|
|
|
145
145
|
return (indices.addressIndex * 64 * 64) + (indices.l1 * 64) + indices.l2;
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
|
-
exports.LeaseStore = LeaseStore;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @module WatermarkStore
|
|
4
3
|
* WOTS index tracking with server synchronization
|
|
@@ -10,16 +9,17 @@
|
|
|
10
9
|
* - Mutators update memory cache AND persist to storage
|
|
11
10
|
* - Caller MUST call initialize() before using sync getters
|
|
12
11
|
*/
|
|
13
|
-
|
|
14
|
-
exports.WatermarkStore = void 0;
|
|
15
|
-
const index_js_1 = require("../adapters/index.js");
|
|
12
|
+
import { NoopLogger } from '../adapters/index.js';
|
|
16
13
|
const DEFAULT_STORAGE_KEY = 'totem_wots_watermark';
|
|
17
14
|
const MAX_INDEX_PER_LEVEL = 64;
|
|
18
15
|
const TOTAL_INDICES = 64 * 64 * 64;
|
|
19
|
-
class WatermarkStore {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
export class WatermarkStore {
|
|
17
|
+
state = null;
|
|
18
|
+
_initialized = false;
|
|
19
|
+
storageKey;
|
|
20
|
+
storage;
|
|
21
|
+
logger;
|
|
22
|
+
constructor(storage, logger = new NoopLogger(), config = {}) {
|
|
23
23
|
this.storage = storage;
|
|
24
24
|
this.logger = logger;
|
|
25
25
|
this.storageKey = config.storageKey ?? DEFAULT_STORAGE_KEY;
|
|
@@ -203,4 +203,3 @@ class WatermarkStore {
|
|
|
203
203
|
return (addressIndex * MAX_INDEX_PER_LEVEL * MAX_INDEX_PER_LEVEL) + (l1 * MAX_INDEX_PER_LEVEL) + l2;
|
|
204
204
|
}
|
|
205
205
|
}
|
|
206
|
-
exports.WatermarkStore = WatermarkStore;
|