@totemsdk/core 1.2.6 → 1.2.8
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 +9 -1
- 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 +310 -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/index.d.ts +9 -3
- package/dist/index.js +25 -2
- package/dist/minimaWireSerializer.js +2 -2
- package/dist/mmr.js +1 -1
- package/dist/transaction.js +10 -10
- package/dist/treekey.js +14 -0
- package/dist/wasm-sync.d.ts +2 -2
- package/dist/wasm-sync.js +3 -1
- package/dist/wots.d.ts +1 -1
- package/package.json +84 -45
- package/dist/wasm-bridge.d.ts +0 -54
- package/dist/wasm-bridge.js +0 -303
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Legacy JS implementations — backward compatibility.
|
|
4
|
+
*
|
|
5
|
+
* These are the original TypeScript implementations preserved for
|
|
6
|
+
* environments where WASM is not available. The main entry point
|
|
7
|
+
* (`@totemsdk/core`) now delegates to WASM by default.
|
|
8
|
+
*
|
|
9
|
+
* Import legacy implementations directly:
|
|
10
|
+
* import { wotsSign } from '@totemsdk/core/legacy';
|
|
11
|
+
*/
|
|
12
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
15
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
16
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
17
|
+
}
|
|
18
|
+
Object.defineProperty(o, k2, desc);
|
|
19
|
+
}) : (function(o, m, k, k2) {
|
|
20
|
+
if (k2 === undefined) k2 = k;
|
|
21
|
+
o[k2] = m[k];
|
|
22
|
+
}));
|
|
23
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
24
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
25
|
+
};
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.legacyGenerateWordList = exports.legacyPhraseToSeed = exports.convertWordListToSeed = exports.convertStringToSeed = exports.legacyValidatePhrase = exports.legacyCleanSeedPhrase = exports.WORD_LIST = exports.serializeRealMMRProof = exports.serializeMMRProof = exports.deserializeMMRProof = exports.parseMMRProofFromHex = exports.legacyVerifyMMRProof = exports.calculateProofRoot = exports.createMMRDataParentNode = exports.createMMRDataLeafNode = exports.mmrRootFromSingleLeaf = exports.mmrLeafExact = exports.MMRTree = exports.createPerAddressTreeKeyAsync = exports.createPerAddressTreeKey = exports.legacyDeriveUnifiedAddressPublicKey = exports.legacyCreateUnifiedRootTreeKey = exports.createUnifiedChildTreeKeyAsync = exports.legacyCreateUnifiedChildTreeKey = exports.DEFAULT_LEVELS = exports.DEFAULT_KEYS_PER_LEVEL = exports.getRootPublicKey = exports.deserializeTreeSignature = exports.serializeTreeSignature = exports.legacyVerifyTreeSignature = exports.TreeKeyNode = exports.TreeKey = exports.legacyWotsPublicKeyFromSeed = exports.legacyWotsVerifyDigest = exports.legacyWotsVerify = exports.legacyWotsPkFromSig = exports.wotsSignLegacy = exports.legacyWotsSign = exports.legacyWotsKeypairFromSeed = exports.legacyDerivePKdigest = exports.baseWWithChecksum = exports.toWinternitzDigits = exports.prfChainSeed = exports.h = exports.assert32 = exports.u32be = exports.u16be = exports.fromHex = exports.hex = exports.F = void 0;
|
|
28
|
+
exports.legacyPrecomputeTransactionCoinIDTx = exports.serializeMMREntry = exports.serializeMMRData = exports.serializeMMREntryNumber = exports.createMMREntryNumber = exports.deriveUnifiedChildSeed = exports.legacyDeriveRootPrivSeed = exports.legacyDerivePerAddressSeed = exports.indexToMiniDataBytes = exports.javaHashAllObjects = exports.serializeMiniNumberONE = exports.serializeMiniNumberZERO = exports.hashObject = exports.deriveChildTreeSeedJava = exports.legacyDeriveChainSeedJava = exports.hashAllObjects = exports.serializeMiniData = exports.serializeMiniNumber = exports.writeHashToStream = exports.legacyWriteMiniString = exports.bigIntToByteArray = exports.legacyBytesToHex = exports.legacyHexToBytes = exports.concat = exports.writeMMREntryNumber = exports.writeMiniByte = exports.legacyWriteMiniData = exports.legacyWriteMiniNumber = exports.convertMinimaAddress = exports.makeMinimaAddress = exports.decodeMx = exports.encodeMx = exports.mxToHex = exports.hexToMx = exports.legacyParseMxAddress = exports.legacyMakeMxAddress = exports.decodeMxRadix32Frame = exports.encodeMxRadix32Frame = exports.legacyWotsAddressFromKeypair = exports.scriptFromWotsPk = exports.addressToRoot = exports.scriptToAddress = exports.buildMinimaCoin = exports.createDefaultTransaction = exports.legacyPrecomputeTransactionCoinID = exports.legacyComputeTransactionDigest = exports.legacySerializeTransaction = exports.serializeCoin = exports.parseDecimalToMiniNumber = exports.generateSeedPhrase = void 0;
|
|
29
|
+
exports.legacyValidateChallenge = exports.legacyCreateChallenge = exports.normalizeHex = exports.deriveAddressFromPublicKey = exports.verifyTreeSignatureDetailed = exports.verifySignatureDetailed = exports.verifySignature = exports.legacyConcatBytes = void 0;
|
|
30
|
+
// WOTS — unique exports
|
|
31
|
+
var wots_js_1 = require("./wots.js");
|
|
32
|
+
Object.defineProperty(exports, "F", { enumerable: true, get: function () { return wots_js_1.F; } });
|
|
33
|
+
Object.defineProperty(exports, "hex", { enumerable: true, get: function () { return wots_js_1.hex; } });
|
|
34
|
+
Object.defineProperty(exports, "fromHex", { enumerable: true, get: function () { return wots_js_1.fromHex; } });
|
|
35
|
+
Object.defineProperty(exports, "u16be", { enumerable: true, get: function () { return wots_js_1.u16be; } });
|
|
36
|
+
Object.defineProperty(exports, "u32be", { enumerable: true, get: function () { return wots_js_1.u32be; } });
|
|
37
|
+
Object.defineProperty(exports, "assert32", { enumerable: true, get: function () { return wots_js_1.assert32; } });
|
|
38
|
+
Object.defineProperty(exports, "h", { enumerable: true, get: function () { return wots_js_1.h; } });
|
|
39
|
+
Object.defineProperty(exports, "prfChainSeed", { enumerable: true, get: function () { return wots_js_1.prfChainSeed; } });
|
|
40
|
+
Object.defineProperty(exports, "toWinternitzDigits", { enumerable: true, get: function () { return wots_js_1.toWinternitzDigits; } });
|
|
41
|
+
Object.defineProperty(exports, "baseWWithChecksum", { enumerable: true, get: function () { return wots_js_1.baseWWithChecksum; } });
|
|
42
|
+
Object.defineProperty(exports, "legacyDerivePKdigest", { enumerable: true, get: function () { return wots_js_1.derivePKdigest; } });
|
|
43
|
+
Object.defineProperty(exports, "legacyWotsKeypairFromSeed", { enumerable: true, get: function () { return wots_js_1.wotsKeypairFromSeed; } });
|
|
44
|
+
Object.defineProperty(exports, "legacyWotsSign", { enumerable: true, get: function () { return wots_js_1.wotsSign; } });
|
|
45
|
+
Object.defineProperty(exports, "wotsSignLegacy", { enumerable: true, get: function () { return wots_js_1.wotsSignLegacy; } });
|
|
46
|
+
Object.defineProperty(exports, "legacyWotsPkFromSig", { enumerable: true, get: function () { return wots_js_1.wotsPkFromSig; } });
|
|
47
|
+
Object.defineProperty(exports, "legacyWotsVerify", { enumerable: true, get: function () { return wots_js_1.wotsVerify; } });
|
|
48
|
+
Object.defineProperty(exports, "legacyWotsVerifyDigest", { enumerable: true, get: function () { return wots_js_1.wotsVerifyDigest; } });
|
|
49
|
+
Object.defineProperty(exports, "legacyWotsPublicKeyFromSeed", { enumerable: true, get: function () { return wots_js_1.wotsPublicKeyFromSeed; } });
|
|
50
|
+
// TreeKey — unique exports
|
|
51
|
+
var treekey_js_1 = require("./treekey.js");
|
|
52
|
+
Object.defineProperty(exports, "TreeKey", { enumerable: true, get: function () { return treekey_js_1.TreeKey; } });
|
|
53
|
+
Object.defineProperty(exports, "TreeKeyNode", { enumerable: true, get: function () { return treekey_js_1.TreeKeyNode; } });
|
|
54
|
+
Object.defineProperty(exports, "legacyVerifyTreeSignature", { enumerable: true, get: function () { return treekey_js_1.verifyTreeSignature; } });
|
|
55
|
+
Object.defineProperty(exports, "serializeTreeSignature", { enumerable: true, get: function () { return treekey_js_1.serializeTreeSignature; } });
|
|
56
|
+
Object.defineProperty(exports, "deserializeTreeSignature", { enumerable: true, get: function () { return treekey_js_1.deserializeTreeSignature; } });
|
|
57
|
+
Object.defineProperty(exports, "getRootPublicKey", { enumerable: true, get: function () { return treekey_js_1.getRootPublicKey; } });
|
|
58
|
+
Object.defineProperty(exports, "DEFAULT_KEYS_PER_LEVEL", { enumerable: true, get: function () { return treekey_js_1.DEFAULT_KEYS_PER_LEVEL; } });
|
|
59
|
+
Object.defineProperty(exports, "DEFAULT_LEVELS", { enumerable: true, get: function () { return treekey_js_1.DEFAULT_LEVELS; } });
|
|
60
|
+
Object.defineProperty(exports, "legacyCreateUnifiedChildTreeKey", { enumerable: true, get: function () { return treekey_js_1.createUnifiedChildTreeKey; } });
|
|
61
|
+
Object.defineProperty(exports, "createUnifiedChildTreeKeyAsync", { enumerable: true, get: function () { return treekey_js_1.createUnifiedChildTreeKeyAsync; } });
|
|
62
|
+
Object.defineProperty(exports, "legacyCreateUnifiedRootTreeKey", { enumerable: true, get: function () { return treekey_js_1.createUnifiedRootTreeKey; } });
|
|
63
|
+
Object.defineProperty(exports, "legacyDeriveUnifiedAddressPublicKey", { enumerable: true, get: function () { return treekey_js_1.deriveUnifiedAddressPublicKey; } });
|
|
64
|
+
Object.defineProperty(exports, "createPerAddressTreeKey", { enumerable: true, get: function () { return treekey_js_1.createPerAddressTreeKey; } });
|
|
65
|
+
Object.defineProperty(exports, "createPerAddressTreeKeyAsync", { enumerable: true, get: function () { return treekey_js_1.createPerAddressTreeKeyAsync; } });
|
|
66
|
+
// MMR — unique exports
|
|
67
|
+
var mmr_js_1 = require("./mmr.js");
|
|
68
|
+
Object.defineProperty(exports, "MMRTree", { enumerable: true, get: function () { return mmr_js_1.MMRTree; } });
|
|
69
|
+
Object.defineProperty(exports, "mmrLeafExact", { enumerable: true, get: function () { return mmr_js_1.mmrLeafExact; } });
|
|
70
|
+
Object.defineProperty(exports, "mmrRootFromSingleLeaf", { enumerable: true, get: function () { return mmr_js_1.mmrRootFromSingleLeaf; } });
|
|
71
|
+
Object.defineProperty(exports, "createMMRDataLeafNode", { enumerable: true, get: function () { return mmr_js_1.createMMRDataLeafNode; } });
|
|
72
|
+
Object.defineProperty(exports, "createMMRDataParentNode", { enumerable: true, get: function () { return mmr_js_1.createMMRDataParentNode; } });
|
|
73
|
+
Object.defineProperty(exports, "calculateProofRoot", { enumerable: true, get: function () { return mmr_js_1.calculateProofRoot; } });
|
|
74
|
+
Object.defineProperty(exports, "legacyVerifyMMRProof", { enumerable: true, get: function () { return mmr_js_1.verifyMMRProof; } });
|
|
75
|
+
Object.defineProperty(exports, "parseMMRProofFromHex", { enumerable: true, get: function () { return mmr_js_1.parseMMRProofFromHex; } });
|
|
76
|
+
Object.defineProperty(exports, "deserializeMMRProof", { enumerable: true, get: function () { return mmr_js_1.deserializeMMRProof; } });
|
|
77
|
+
Object.defineProperty(exports, "serializeMMRProof", { enumerable: true, get: function () { return mmr_js_1.serializeMMRProof; } });
|
|
78
|
+
Object.defineProperty(exports, "serializeRealMMRProof", { enumerable: true, get: function () { return mmr_js_1.serializeRealMMRProof; } });
|
|
79
|
+
// BIP39
|
|
80
|
+
var bip39_js_1 = require("./bip39.js");
|
|
81
|
+
Object.defineProperty(exports, "WORD_LIST", { enumerable: true, get: function () { return bip39_js_1.WORD_LIST; } });
|
|
82
|
+
Object.defineProperty(exports, "legacyCleanSeedPhrase", { enumerable: true, get: function () { return bip39_js_1.cleanSeedPhrase; } });
|
|
83
|
+
Object.defineProperty(exports, "legacyValidatePhrase", { enumerable: true, get: function () { return bip39_js_1.validatePhrase; } });
|
|
84
|
+
Object.defineProperty(exports, "convertStringToSeed", { enumerable: true, get: function () { return bip39_js_1.convertStringToSeed; } });
|
|
85
|
+
Object.defineProperty(exports, "convertWordListToSeed", { enumerable: true, get: function () { return bip39_js_1.convertWordListToSeed; } });
|
|
86
|
+
Object.defineProperty(exports, "legacyPhraseToSeed", { enumerable: true, get: function () { return bip39_js_1.phraseToSeed; } });
|
|
87
|
+
Object.defineProperty(exports, "legacyGenerateWordList", { enumerable: true, get: function () { return bip39_js_1.generateWordList; } });
|
|
88
|
+
Object.defineProperty(exports, "generateSeedPhrase", { enumerable: true, get: function () { return bip39_js_1.generateSeedPhrase; } });
|
|
89
|
+
// Transaction
|
|
90
|
+
var transaction_js_1 = require("./transaction.js");
|
|
91
|
+
Object.defineProperty(exports, "parseDecimalToMiniNumber", { enumerable: true, get: function () { return transaction_js_1.parseDecimalToMiniNumber; } });
|
|
92
|
+
Object.defineProperty(exports, "serializeCoin", { enumerable: true, get: function () { return transaction_js_1.serializeCoin; } });
|
|
93
|
+
Object.defineProperty(exports, "legacySerializeTransaction", { enumerable: true, get: function () { return transaction_js_1.serializeTransaction; } });
|
|
94
|
+
Object.defineProperty(exports, "legacyComputeTransactionDigest", { enumerable: true, get: function () { return transaction_js_1.computeTransactionDigest; } });
|
|
95
|
+
Object.defineProperty(exports, "legacyPrecomputeTransactionCoinID", { enumerable: true, get: function () { return transaction_js_1.precomputeTransactionCoinID; } });
|
|
96
|
+
Object.defineProperty(exports, "createDefaultTransaction", { enumerable: true, get: function () { return transaction_js_1.createDefaultTransaction; } });
|
|
97
|
+
Object.defineProperty(exports, "buildMinimaCoin", { enumerable: true, get: function () { return transaction_js_1.buildMinimaCoin; } });
|
|
98
|
+
// Derive
|
|
99
|
+
var derive_js_1 = require("./derive.js");
|
|
100
|
+
Object.defineProperty(exports, "scriptToAddress", { enumerable: true, get: function () { return derive_js_1.scriptToAddress; } });
|
|
101
|
+
Object.defineProperty(exports, "addressToRoot", { enumerable: true, get: function () { return derive_js_1.addressToRoot; } });
|
|
102
|
+
// Script
|
|
103
|
+
var script_js_1 = require("./script.js");
|
|
104
|
+
Object.defineProperty(exports, "scriptFromWotsPk", { enumerable: true, get: function () { return script_js_1.scriptFromWotsPk; } });
|
|
105
|
+
Object.defineProperty(exports, "legacyWotsAddressFromKeypair", { enumerable: true, get: function () { return script_js_1.wotsAddressFromKeypair; } });
|
|
106
|
+
// Minima32
|
|
107
|
+
var minima32_js_1 = require("./minima32.js");
|
|
108
|
+
Object.defineProperty(exports, "encodeMxRadix32Frame", { enumerable: true, get: function () { return minima32_js_1.encodeMxRadix32Frame; } });
|
|
109
|
+
Object.defineProperty(exports, "decodeMxRadix32Frame", { enumerable: true, get: function () { return minima32_js_1.decodeMxRadix32Frame; } });
|
|
110
|
+
Object.defineProperty(exports, "legacyMakeMxAddress", { enumerable: true, get: function () { return minima32_js_1.makeMxAddress; } });
|
|
111
|
+
Object.defineProperty(exports, "legacyParseMxAddress", { enumerable: true, get: function () { return minima32_js_1.parseMxAddress; } });
|
|
112
|
+
Object.defineProperty(exports, "hexToMx", { enumerable: true, get: function () { return minima32_js_1.hexToMx; } });
|
|
113
|
+
Object.defineProperty(exports, "mxToHex", { enumerable: true, get: function () { return minima32_js_1.mxToHex; } });
|
|
114
|
+
Object.defineProperty(exports, "encodeMx", { enumerable: true, get: function () { return minima32_js_1.encodeMx; } });
|
|
115
|
+
Object.defineProperty(exports, "decodeMx", { enumerable: true, get: function () { return minima32_js_1.decodeMx; } });
|
|
116
|
+
Object.defineProperty(exports, "makeMinimaAddress", { enumerable: true, get: function () { return minima32_js_1.makeMinimaAddress; } });
|
|
117
|
+
Object.defineProperty(exports, "convertMinimaAddress", { enumerable: true, get: function () { return minima32_js_1.convertMinimaAddress; } });
|
|
118
|
+
// Streamable
|
|
119
|
+
var Streamable_js_1 = require("./Streamable.js");
|
|
120
|
+
Object.defineProperty(exports, "legacyWriteMiniNumber", { enumerable: true, get: function () { return Streamable_js_1.writeMiniNumber; } });
|
|
121
|
+
Object.defineProperty(exports, "legacyWriteMiniData", { enumerable: true, get: function () { return Streamable_js_1.writeMiniData; } });
|
|
122
|
+
Object.defineProperty(exports, "writeMiniByte", { enumerable: true, get: function () { return Streamable_js_1.writeMiniByte; } });
|
|
123
|
+
Object.defineProperty(exports, "writeMMREntryNumber", { enumerable: true, get: function () { return Streamable_js_1.writeMMREntryNumber; } });
|
|
124
|
+
Object.defineProperty(exports, "concat", { enumerable: true, get: function () { return Streamable_js_1.concat; } });
|
|
125
|
+
Object.defineProperty(exports, "legacyHexToBytes", { enumerable: true, get: function () { return Streamable_js_1.hexToBytes; } });
|
|
126
|
+
Object.defineProperty(exports, "legacyBytesToHex", { enumerable: true, get: function () { return Streamable_js_1.bytesToHex; } });
|
|
127
|
+
Object.defineProperty(exports, "bigIntToByteArray", { enumerable: true, get: function () { return Streamable_js_1.bigIntToByteArray; } });
|
|
128
|
+
Object.defineProperty(exports, "legacyWriteMiniString", { enumerable: true, get: function () { return Streamable_js_1.writeMiniString; } });
|
|
129
|
+
Object.defineProperty(exports, "writeHashToStream", { enumerable: true, get: function () { return Streamable_js_1.writeHashToStream; } });
|
|
130
|
+
// JavaStreamables
|
|
131
|
+
var javaStreamables_js_1 = require("./javaStreamables.js");
|
|
132
|
+
Object.defineProperty(exports, "serializeMiniNumber", { enumerable: true, get: function () { return javaStreamables_js_1.serializeMiniNumber; } });
|
|
133
|
+
Object.defineProperty(exports, "serializeMiniData", { enumerable: true, get: function () { return javaStreamables_js_1.serializeMiniData; } });
|
|
134
|
+
Object.defineProperty(exports, "hashAllObjects", { enumerable: true, get: function () { return javaStreamables_js_1.hashAllObjects; } });
|
|
135
|
+
Object.defineProperty(exports, "legacyDeriveChainSeedJava", { enumerable: true, get: function () { return javaStreamables_js_1.deriveChainSeedJava; } });
|
|
136
|
+
Object.defineProperty(exports, "deriveChildTreeSeedJava", { enumerable: true, get: function () { return javaStreamables_js_1.deriveChildTreeSeedJava; } });
|
|
137
|
+
Object.defineProperty(exports, "hashObject", { enumerable: true, get: function () { return javaStreamables_js_1.hashObject; } });
|
|
138
|
+
Object.defineProperty(exports, "serializeMiniNumberZERO", { enumerable: true, get: function () { return javaStreamables_js_1.serializeMiniNumberZERO; } });
|
|
139
|
+
Object.defineProperty(exports, "serializeMiniNumberONE", { enumerable: true, get: function () { return javaStreamables_js_1.serializeMiniNumberONE; } });
|
|
140
|
+
Object.defineProperty(exports, "javaHashAllObjects", { enumerable: true, get: function () { return javaStreamables_js_1.javaHashAllObjects; } });
|
|
141
|
+
Object.defineProperty(exports, "indexToMiniDataBytes", { enumerable: true, get: function () { return javaStreamables_js_1.indexToMiniDataBytes; } });
|
|
142
|
+
Object.defineProperty(exports, "legacyDerivePerAddressSeed", { enumerable: true, get: function () { return javaStreamables_js_1.derivePerAddressSeed; } });
|
|
143
|
+
Object.defineProperty(exports, "legacyDeriveRootPrivSeed", { enumerable: true, get: function () { return javaStreamables_js_1.deriveRootPrivSeed; } });
|
|
144
|
+
Object.defineProperty(exports, "deriveUnifiedChildSeed", { enumerable: true, get: function () { return javaStreamables_js_1.deriveUnifiedChildSeed; } });
|
|
145
|
+
Object.defineProperty(exports, "createMMREntryNumber", { enumerable: true, get: function () { return javaStreamables_js_1.createMMREntryNumber; } });
|
|
146
|
+
Object.defineProperty(exports, "serializeMMREntryNumber", { enumerable: true, get: function () { return javaStreamables_js_1.serializeMMREntryNumber; } });
|
|
147
|
+
Object.defineProperty(exports, "serializeMMRData", { enumerable: true, get: function () { return javaStreamables_js_1.serializeMMRData; } });
|
|
148
|
+
Object.defineProperty(exports, "serializeMMREntry", { enumerable: true, get: function () { return javaStreamables_js_1.serializeMMREntry; } });
|
|
149
|
+
Object.defineProperty(exports, "legacyPrecomputeTransactionCoinIDTx", { enumerable: true, get: function () { return javaStreamables_js_1.precomputeTransactionCoinID; } });
|
|
150
|
+
// Utils
|
|
151
|
+
var utils_js_1 = require("./utils.js");
|
|
152
|
+
Object.defineProperty(exports, "legacyConcatBytes", { enumerable: true, get: function () { return utils_js_1.concatBytes; } });
|
|
153
|
+
// Params
|
|
154
|
+
__exportStar(require("./params.js"), exports);
|
|
155
|
+
// Verify
|
|
156
|
+
var verify_js_1 = require("./verify.js");
|
|
157
|
+
Object.defineProperty(exports, "verifySignature", { enumerable: true, get: function () { return verify_js_1.verifySignature; } });
|
|
158
|
+
Object.defineProperty(exports, "verifySignatureDetailed", { enumerable: true, get: function () { return verify_js_1.verifySignatureDetailed; } });
|
|
159
|
+
Object.defineProperty(exports, "verifyTreeSignatureDetailed", { enumerable: true, get: function () { return verify_js_1.verifyTreeSignatureDetailed; } });
|
|
160
|
+
Object.defineProperty(exports, "deriveAddressFromPublicKey", { enumerable: true, get: function () { return verify_js_1.deriveAddressFromPublicKey; } });
|
|
161
|
+
Object.defineProperty(exports, "normalizeHex", { enumerable: true, get: function () { return verify_js_1.normalizeHex; } });
|
|
162
|
+
Object.defineProperty(exports, "legacyCreateChallenge", { enumerable: true, get: function () { return verify_js_1.createChallenge; } });
|
|
163
|
+
Object.defineProperty(exports, "legacyValidateChallenge", { enumerable: true, get: function () { return verify_js_1.validateChallenge; } });
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare function encodeMxRadix32Frame(frame: Uint8Array): string;
|
|
2
|
+
export declare function decodeMxRadix32Frame(mx: string): Uint8Array;
|
|
3
|
+
/** Encode raw 32 bytes to Mx address with frame and checksum */
|
|
4
|
+
export declare function makeMxAddress(root32: Uint8Array): string;
|
|
5
|
+
/** Decode Mx address to raw 32 bytes, validating frame and checksum */
|
|
6
|
+
export declare function parseMxAddress(mx: string): Uint8Array;
|
|
7
|
+
/** Make an Mx address from a hex string (legacy API compatibility) */
|
|
8
|
+
export declare function hexToMx(hex: string): string;
|
|
9
|
+
/** Convert an Mx address back to uppercase hex (legacy API compatibility) */
|
|
10
|
+
export declare function mxToHex(mx: string): string;
|
|
11
|
+
/** @deprecated Use makeMxAddress */
|
|
12
|
+
export declare const encodeMx: typeof makeMxAddress;
|
|
13
|
+
/** @deprecated Use parseMxAddress */
|
|
14
|
+
export declare const decodeMx: typeof parseMxAddress;
|
|
15
|
+
/** @deprecated Use hexToMx */
|
|
16
|
+
export declare const makeMinimaAddress: typeof hexToMx;
|
|
17
|
+
/** @deprecated Use mxToHex */
|
|
18
|
+
export declare const convertMinimaAddress: typeof mxToHex;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Minima "Mx" Base32 — matches org.minima.utils.BaseConverter.encode32/decode32
|
|
3
|
+
// Source behavior: BigInteger radix-32, then i→w, l→y, o→z, uppercased, prefixed with "Mx".
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.convertMinimaAddress = exports.makeMinimaAddress = exports.decodeMx = exports.encodeMx = void 0;
|
|
6
|
+
exports.encodeMxRadix32Frame = encodeMxRadix32Frame;
|
|
7
|
+
exports.decodeMxRadix32Frame = decodeMxRadix32Frame;
|
|
8
|
+
exports.makeMxAddress = makeMxAddress;
|
|
9
|
+
exports.parseMxAddress = parseMxAddress;
|
|
10
|
+
exports.hexToMx = hexToMx;
|
|
11
|
+
exports.mxToHex = mxToHex;
|
|
12
|
+
function bytesToBigInt(bytes) {
|
|
13
|
+
let x = 0n;
|
|
14
|
+
for (const b of bytes)
|
|
15
|
+
x = (x << 8n) | BigInt(b);
|
|
16
|
+
return x;
|
|
17
|
+
}
|
|
18
|
+
function bigIntToBytes(x) {
|
|
19
|
+
if (x === 0n)
|
|
20
|
+
return new Uint8Array([0]); // not normally hit for framed addresses
|
|
21
|
+
let hex = x.toString(16);
|
|
22
|
+
if (hex.length % 2)
|
|
23
|
+
hex = '0' + hex;
|
|
24
|
+
const out = new Uint8Array(hex.length / 2);
|
|
25
|
+
for (let i = 0; i < out.length; i++) {
|
|
26
|
+
out[i] = parseInt(hex.slice(2 * i, 2 * i + 2), 16);
|
|
27
|
+
}
|
|
28
|
+
return out;
|
|
29
|
+
}
|
|
30
|
+
function encodeMxRadix32Frame(frame) {
|
|
31
|
+
let s = bytesToBigInt(frame).toString(32).toLowerCase();
|
|
32
|
+
// JAR swaps (avoid ambiguous letters) then uppercase and add prefix
|
|
33
|
+
s = s.replace(/i/g, 'w').replace(/l/g, 'y').replace(/o/g, 'z');
|
|
34
|
+
return 'Mx' + s.toUpperCase();
|
|
35
|
+
}
|
|
36
|
+
function decodeMxRadix32Frame(mx) {
|
|
37
|
+
let s = mx.trim().toLowerCase();
|
|
38
|
+
if (s.startsWith('mx'))
|
|
39
|
+
s = s.slice(2);
|
|
40
|
+
s = s.replace(/w/g, 'i').replace(/y/g, 'l').replace(/z/g, 'o'); // reverse swaps
|
|
41
|
+
// parse base-32 by hand (radix 32)
|
|
42
|
+
let x = 0n;
|
|
43
|
+
for (const ch of s) {
|
|
44
|
+
const v = parseInt(ch, 32);
|
|
45
|
+
if (Number.isNaN(v))
|
|
46
|
+
throw new Error(`Invalid base32 character: ${ch}`);
|
|
47
|
+
x = x * 32n + BigInt(v);
|
|
48
|
+
}
|
|
49
|
+
return bigIntToBytes(x);
|
|
50
|
+
}
|
|
51
|
+
const wasm_sync_js_1 = require("./wasm-sync.js");
|
|
52
|
+
/** Encode raw 32 bytes to Mx address with frame and checksum */
|
|
53
|
+
function makeMxAddress(root32) {
|
|
54
|
+
if (root32.length !== 32) {
|
|
55
|
+
throw new Error(`Expected 32 bytes, got ${root32.length}`);
|
|
56
|
+
}
|
|
57
|
+
// Build frame: [sentinel(1), length(2), data(32), checksum(4)]
|
|
58
|
+
const frame = new Uint8Array(1 + 2 + 32 + 4);
|
|
59
|
+
frame[0] = 0x01; // Sentinel byte
|
|
60
|
+
frame[1] = 0; // Length high byte
|
|
61
|
+
frame[2] = 32; // Length low byte
|
|
62
|
+
frame.set(root32, 3);
|
|
63
|
+
// Calculate checksum of the raw 32 bytes
|
|
64
|
+
const chk = (0, wasm_sync_js_1.sha3_256)(root32);
|
|
65
|
+
frame.set(chk.slice(0, 4), 35);
|
|
66
|
+
return encodeMxRadix32Frame(frame);
|
|
67
|
+
}
|
|
68
|
+
/** Decode Mx address to raw 32 bytes, validating frame and checksum */
|
|
69
|
+
function parseMxAddress(mx) {
|
|
70
|
+
const frame = decodeMxRadix32Frame(mx);
|
|
71
|
+
// Validate frame structure
|
|
72
|
+
if (frame[0] !== 0x01) {
|
|
73
|
+
throw new Error(`Invalid sentinel byte: ${frame[0]}`);
|
|
74
|
+
}
|
|
75
|
+
const len = (frame[1] << 8) | frame[2];
|
|
76
|
+
if (len !== 32) {
|
|
77
|
+
throw new Error(`Invalid length: ${len}, expected 32`);
|
|
78
|
+
}
|
|
79
|
+
const root32 = frame.slice(3, 35);
|
|
80
|
+
const checksum = frame.slice(35, 39);
|
|
81
|
+
// Validate checksum
|
|
82
|
+
const expectedChk = (0, wasm_sync_js_1.sha3_256)(root32);
|
|
83
|
+
const expected = expectedChk.slice(0, 4);
|
|
84
|
+
for (let i = 0; i < 4; i++) {
|
|
85
|
+
if (checksum[i] !== expected[i]) {
|
|
86
|
+
throw new Error('Invalid checksum');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return root32;
|
|
90
|
+
}
|
|
91
|
+
// Aliases for backward compatibility
|
|
92
|
+
function hexToBytes(hex) {
|
|
93
|
+
let h = hex.startsWith("0x") ? hex.slice(2) : hex;
|
|
94
|
+
if (h.length % 2)
|
|
95
|
+
h = "0" + h;
|
|
96
|
+
const out = new Uint8Array(h.length / 2);
|
|
97
|
+
for (let i = 0; i < out.length; i++)
|
|
98
|
+
out[i] = parseInt(h.slice(i * 2, i * 2 + 2), 16);
|
|
99
|
+
return out;
|
|
100
|
+
}
|
|
101
|
+
function bytesToHex(bytes) {
|
|
102
|
+
return Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('').toUpperCase();
|
|
103
|
+
}
|
|
104
|
+
/** Make an Mx address from a hex string (legacy API compatibility) */
|
|
105
|
+
function hexToMx(hex) {
|
|
106
|
+
const bytes = hexToBytes(hex);
|
|
107
|
+
return makeMxAddress(bytes);
|
|
108
|
+
}
|
|
109
|
+
/** Convert an Mx address back to uppercase hex (legacy API compatibility) */
|
|
110
|
+
function mxToHex(mx) {
|
|
111
|
+
const bytes = parseMxAddress(mx);
|
|
112
|
+
return bytesToHex(bytes);
|
|
113
|
+
}
|
|
114
|
+
/** @deprecated Use makeMxAddress */
|
|
115
|
+
exports.encodeMx = makeMxAddress;
|
|
116
|
+
/** @deprecated Use parseMxAddress */
|
|
117
|
+
exports.decodeMx = parseMxAddress;
|
|
118
|
+
/** @deprecated Use hexToMx */
|
|
119
|
+
exports.makeMinimaAddress = hexToMx;
|
|
120
|
+
/** @deprecated Use mxToHex */
|
|
121
|
+
exports.convertMinimaAddress = mxToHex;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minima Wire Format Serializer
|
|
3
|
+
*
|
|
4
|
+
* High-level serialization for hex-string bundles (used in service.ts).
|
|
5
|
+
* Primitive serialization functions are imported from Streamable.ts.
|
|
6
|
+
*
|
|
7
|
+
* @deprecated (2026-01) - Most functions deprecated. Use Streamable.ts directly for
|
|
8
|
+
* byte-level serialization. This file remains for HierarchicalWitnessBundle hex APIs.
|
|
9
|
+
*/
|
|
10
|
+
import { hexToBytes, bytesToHex, writeMiniNumber, writeMiniData, type Bytes } from './Streamable.js';
|
|
11
|
+
export { writeMiniNumber as serializeMiniNumber, writeMiniData as serializeMiniData };
|
|
12
|
+
export { hexToBytes as fromHex, bytesToHex as toHex };
|
|
13
|
+
export type { Bytes };
|
|
14
|
+
/**
|
|
15
|
+
* SignatureProof with hex strings (for bundle transport)
|
|
16
|
+
*/
|
|
17
|
+
export interface SignatureProofHex {
|
|
18
|
+
leafPubkey: string;
|
|
19
|
+
signature: string;
|
|
20
|
+
mmrProof: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* HierarchicalWitnessBundle - used by service.ts for transaction signing
|
|
24
|
+
* All fields are hex strings for JSON transport
|
|
25
|
+
*/
|
|
26
|
+
export interface HierarchicalWitnessBundle {
|
|
27
|
+
addressIndex: number;
|
|
28
|
+
l1: number;
|
|
29
|
+
l2: number;
|
|
30
|
+
rootPublicKey: string;
|
|
31
|
+
proofs: SignatureProofHex[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Serialize hierarchical witness bundle to Minima wire format
|
|
35
|
+
*
|
|
36
|
+
* This converts the HierarchicalWitnessBundle (with hex strings) to
|
|
37
|
+
* the proper Witness signature format matching Witness.java → Signature.java hierarchy.
|
|
38
|
+
*
|
|
39
|
+
* CRITICAL FIX (2026-01): Must use double-nesting to match Java format:
|
|
40
|
+
* - Witness.writeDataStream writes: [signatureCount][Signature[0].writeDataStream()]...
|
|
41
|
+
* - Signature.writeDataStream writes: [proofCount][SignatureProof[0]]...
|
|
42
|
+
*
|
|
43
|
+
* So the final format is:
|
|
44
|
+
* [1] = signatureCount (we have 1 Signature object in Witness)
|
|
45
|
+
* [N] = proofCount inside that Signature (2 for address-based TreeKey)
|
|
46
|
+
* [SignatureProof[0]]
|
|
47
|
+
* [SignatureProof[1]]
|
|
48
|
+
*
|
|
49
|
+
* IMPORTANT: Uses pre-serialized MMR proof bytes directly to avoid
|
|
50
|
+
* double-serialization (deserialize then re-serialize).
|
|
51
|
+
*/
|
|
52
|
+
export declare function serializeHierarchicalWitness(bundle: HierarchicalWitnessBundle): Bytes;
|
|
53
|
+
/**
|
|
54
|
+
* @deprecated (2026-01) This function's output is NOT used in the main Totem transaction flow.
|
|
55
|
+
* MinimaTransactionBuilder.serializeWitness in the extension handles actual witness serialization.
|
|
56
|
+
* Kept for API compatibility and potential future direct SDK usage.
|
|
57
|
+
*
|
|
58
|
+
* Serialize hierarchical witness bundle to hex string for transport
|
|
59
|
+
*/
|
|
60
|
+
export declare function serializeHierarchicalWitnessToHex(bundle: HierarchicalWitnessBundle): string;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Minima Wire Format Serializer
|
|
4
|
+
*
|
|
5
|
+
* High-level serialization for hex-string bundles (used in service.ts).
|
|
6
|
+
* Primitive serialization functions are imported from Streamable.ts.
|
|
7
|
+
*
|
|
8
|
+
* @deprecated (2026-01) - Most functions deprecated. Use Streamable.ts directly for
|
|
9
|
+
* byte-level serialization. This file remains for HierarchicalWitnessBundle hex APIs.
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.toHex = exports.fromHex = exports.serializeMiniData = exports.serializeMiniNumber = void 0;
|
|
13
|
+
exports.serializeHierarchicalWitness = serializeHierarchicalWitness;
|
|
14
|
+
exports.serializeHierarchicalWitnessToHex = serializeHierarchicalWitnessToHex;
|
|
15
|
+
const Streamable_js_1 = require("./Streamable.js");
|
|
16
|
+
Object.defineProperty(exports, "fromHex", { enumerable: true, get: function () { return Streamable_js_1.hexToBytes; } });
|
|
17
|
+
Object.defineProperty(exports, "toHex", { enumerable: true, get: function () { return Streamable_js_1.bytesToHex; } });
|
|
18
|
+
Object.defineProperty(exports, "serializeMiniNumber", { enumerable: true, get: function () { return Streamable_js_1.writeMiniNumber; } });
|
|
19
|
+
Object.defineProperty(exports, "serializeMiniData", { enumerable: true, get: function () { return Streamable_js_1.writeMiniData; } });
|
|
20
|
+
/**
|
|
21
|
+
* Serialize a SignatureProof from pre-serialized byte arrays
|
|
22
|
+
*
|
|
23
|
+
* This avoids double-serialization by passing MMR proof bytes through directly.
|
|
24
|
+
* Format matches SignatureProof.writeDataStream():
|
|
25
|
+
* 1. MiniData (publicKey) - 4-byte length + bytes
|
|
26
|
+
* 2. MiniData (signature) - 4-byte length + bytes
|
|
27
|
+
* 3. MMRProof bytes (pre-serialized)
|
|
28
|
+
*/
|
|
29
|
+
function serializeSignatureProofFromBytes(publicKey, signature, mmrProofBytes) {
|
|
30
|
+
return (0, Streamable_js_1.concat)((0, Streamable_js_1.writeMiniData)(publicKey), (0, Streamable_js_1.writeMiniData)(signature), mmrProofBytes // Already serialized - pass through directly
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Serialize hierarchical witness bundle to Minima wire format
|
|
35
|
+
*
|
|
36
|
+
* This converts the HierarchicalWitnessBundle (with hex strings) to
|
|
37
|
+
* the proper Witness signature format matching Witness.java → Signature.java hierarchy.
|
|
38
|
+
*
|
|
39
|
+
* CRITICAL FIX (2026-01): Must use double-nesting to match Java format:
|
|
40
|
+
* - Witness.writeDataStream writes: [signatureCount][Signature[0].writeDataStream()]...
|
|
41
|
+
* - Signature.writeDataStream writes: [proofCount][SignatureProof[0]]...
|
|
42
|
+
*
|
|
43
|
+
* So the final format is:
|
|
44
|
+
* [1] = signatureCount (we have 1 Signature object in Witness)
|
|
45
|
+
* [N] = proofCount inside that Signature (2 for address-based TreeKey)
|
|
46
|
+
* [SignatureProof[0]]
|
|
47
|
+
* [SignatureProof[1]]
|
|
48
|
+
*
|
|
49
|
+
* IMPORTANT: Uses pre-serialized MMR proof bytes directly to avoid
|
|
50
|
+
* double-serialization (deserialize then re-serialize).
|
|
51
|
+
*/
|
|
52
|
+
function serializeHierarchicalWitness(bundle) {
|
|
53
|
+
const parts = [];
|
|
54
|
+
// Witness.signatureCount (MiniNumber) - 1 Signature object containing N proofs
|
|
55
|
+
parts.push((0, Streamable_js_1.writeMiniNumber)(1n, 0));
|
|
56
|
+
// Signature.proofCount (MiniNumber) - N SignatureProofs inside the Signature
|
|
57
|
+
parts.push((0, Streamable_js_1.writeMiniNumber)(BigInt(bundle.proofs.length), 0));
|
|
58
|
+
for (const proofHex of bundle.proofs) {
|
|
59
|
+
const publicKey = (0, Streamable_js_1.hexToBytes)(proofHex.leafPubkey);
|
|
60
|
+
const signature = (0, Streamable_js_1.hexToBytes)(proofHex.signature);
|
|
61
|
+
const mmrProofBytes = (0, Streamable_js_1.hexToBytes)(proofHex.mmrProof); // Already serialized
|
|
62
|
+
// Serialize SignatureProof with pre-serialized MMR bytes
|
|
63
|
+
parts.push(serializeSignatureProofFromBytes(publicKey, signature, mmrProofBytes));
|
|
64
|
+
}
|
|
65
|
+
return (0, Streamable_js_1.concat)(...parts);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* @deprecated (2026-01) This function's output is NOT used in the main Totem transaction flow.
|
|
69
|
+
* MinimaTransactionBuilder.serializeWitness in the extension handles actual witness serialization.
|
|
70
|
+
* Kept for API compatibility and potential future direct SDK usage.
|
|
71
|
+
*
|
|
72
|
+
* Serialize hierarchical witness bundle to hex string for transport
|
|
73
|
+
*/
|
|
74
|
+
function serializeHierarchicalWitnessToHex(bundle) {
|
|
75
|
+
const bytes = serializeHierarchicalWitness(bundle);
|
|
76
|
+
return (0, Streamable_js_1.bytesToHex)(bytes);
|
|
77
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
export declare function serializeMMRProof(proof: {
|
|
2
|
+
chunks: Array<{
|
|
3
|
+
isLeft: boolean;
|
|
4
|
+
mmrData: {
|
|
5
|
+
data: Bytes;
|
|
6
|
+
value: bigint;
|
|
7
|
+
};
|
|
8
|
+
}>;
|
|
9
|
+
}, blockTime?: bigint): Bytes;
|
|
10
|
+
export declare const serializeRealMMRProof: typeof serializeMMRProof;
|
|
11
|
+
export type Bytes = Uint8Array;
|
|
12
|
+
/**
|
|
13
|
+
* Byte-exact one-leaf MMR leaf used by Minima Address.java path:
|
|
14
|
+
* sha3( MiniNumber.ZERO || MiniString(script) || MiniNumber.ZERO )
|
|
15
|
+
*/
|
|
16
|
+
export declare function mmrLeafExact(script: string): Bytes;
|
|
17
|
+
/** In a single-leaf MMR the root equals the leaf commitment. */
|
|
18
|
+
export declare function mmrRootFromSingleLeaf(script: string): Bytes;
|
|
19
|
+
/**
|
|
20
|
+
* MMRData structure matching Minima's MMRData.java
|
|
21
|
+
* Contains hash and value (for sum tree functionality)
|
|
22
|
+
*/
|
|
23
|
+
export interface MMRData {
|
|
24
|
+
data: Bytes;
|
|
25
|
+
value: bigint;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* MMREntry structure matching Minima's MMREntry.java
|
|
29
|
+
* Represents a node in the MMR at a specific row and position
|
|
30
|
+
*/
|
|
31
|
+
export interface MMREntry {
|
|
32
|
+
row: number;
|
|
33
|
+
entryNumber: bigint;
|
|
34
|
+
mmrData: MMRData;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* MMRProofChunk - one step in the proof path
|
|
38
|
+
* Matches Minima's MMRProof structure
|
|
39
|
+
*/
|
|
40
|
+
export interface MMRProofChunk {
|
|
41
|
+
isLeft: boolean;
|
|
42
|
+
mmrData: MMRData;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* MMRProof structure matching Minima's MMRProof.java
|
|
46
|
+
* Contains proof chunks to verify leaf membership in the tree
|
|
47
|
+
*/
|
|
48
|
+
export interface MMRProof {
|
|
49
|
+
chunks: MMRProofChunk[];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Create MMRData leaf node matching Minima's MMRData.CreateMMRDataLeafNode
|
|
53
|
+
*
|
|
54
|
+
* From MMRData.java:
|
|
55
|
+
* MiniData hash = Crypto.getInstance().hashAllObjects(MiniNumber.ZERO, zData, zSumValue);
|
|
56
|
+
*
|
|
57
|
+
* CRITICAL: Crypto.hashAllObjects uses writeDataStream for Streamables:
|
|
58
|
+
* - MiniNumber: scale + len + data (see serializeMiniNumber)
|
|
59
|
+
* - MiniData: 4-byte length + data (see serializeMiniData)
|
|
60
|
+
*
|
|
61
|
+
* For TreeKeyNode, zData is the Winternitz public key (MiniData) and zSumValue is ZERO
|
|
62
|
+
*
|
|
63
|
+
* Serialization order:
|
|
64
|
+
* 1. MiniNumber.ZERO: [0x00, 0x01, 0x00]
|
|
65
|
+
* 2. MiniData (pubkey): [4-byte length] + [bytes] (writeDataStream, NOT writeHashToStream)
|
|
66
|
+
* 3. MiniNumber.ZERO: [0x00, 0x01, 0x00]
|
|
67
|
+
*/
|
|
68
|
+
export declare function createMMRDataLeafNode(pubkey: Bytes, sumValue?: bigint): MMRData;
|
|
69
|
+
/**
|
|
70
|
+
* Create MMRData parent node matching Minima's MMRData.CreateMMRDataParentNode
|
|
71
|
+
*
|
|
72
|
+
* From MMRData.java:
|
|
73
|
+
* MiniNumber sumvalue = zLeft.getValue().add(zRight.getValue());
|
|
74
|
+
* MiniData combinedhash = Crypto.getInstance().hashAllObjects(
|
|
75
|
+
* MiniNumber.ONE, zLeft.getData(), zRight.getData(), sumvalue);
|
|
76
|
+
*
|
|
77
|
+
* CRITICAL: The getData() returns MiniData (the hash), which is serialized
|
|
78
|
+
* with writeDataStream (4-byte length) in hashAllObjects.
|
|
79
|
+
*
|
|
80
|
+
* Serialization order:
|
|
81
|
+
* 1. MiniNumber.ONE: [0x00, 0x01, 0x01]
|
|
82
|
+
* 2. MiniData (left.data): [4-byte length] + [bytes]
|
|
83
|
+
* 3. MiniData (right.data): [4-byte length] + [bytes]
|
|
84
|
+
* 4. MiniNumber (sumvalue): serialized MiniNumber
|
|
85
|
+
*/
|
|
86
|
+
export declare function createMMRDataParentNode(left: MMRData, right: MMRData): MMRData;
|
|
87
|
+
/**
|
|
88
|
+
* Simple MMR Tree for TreeKeyNode
|
|
89
|
+
* Builds a perfect binary tree from N entries (N must be power of 2 for simplicity)
|
|
90
|
+
*
|
|
91
|
+
* This matches TreeKeyNode.java which always uses 64 leaves (2^6)
|
|
92
|
+
*/
|
|
93
|
+
export declare class MMRTree {
|
|
94
|
+
private entries;
|
|
95
|
+
private leafCount;
|
|
96
|
+
private maxRow;
|
|
97
|
+
private getKey;
|
|
98
|
+
private setEntry;
|
|
99
|
+
private getEntry;
|
|
100
|
+
/**
|
|
101
|
+
* Add a leaf entry to the MMR
|
|
102
|
+
* Matches MMR.java addEntry() but simplified for power-of-2 trees
|
|
103
|
+
*/
|
|
104
|
+
addLeaf(data: MMRData): MMREntry;
|
|
105
|
+
/**
|
|
106
|
+
* Build tree from array of Winternitz public keys
|
|
107
|
+
* Used by TreeKeyNode to compute wallet public key
|
|
108
|
+
*/
|
|
109
|
+
static fromPublicKeys(pubkeys: Bytes[]): MMRTree;
|
|
110
|
+
/**
|
|
111
|
+
* Get the root of the tree
|
|
112
|
+
* For a perfect binary tree with N leaves, root is at row log2(N), entry 0
|
|
113
|
+
*/
|
|
114
|
+
getRoot(): MMRData | null;
|
|
115
|
+
/**
|
|
116
|
+
* Get proof for a leaf at given index
|
|
117
|
+
* Matches MMR.java getProofToPeak()
|
|
118
|
+
*/
|
|
119
|
+
getProof(leafIndex: number): MMRProof;
|
|
120
|
+
/**
|
|
121
|
+
* Get the leaf MMRData at a specific index
|
|
122
|
+
*/
|
|
123
|
+
getLeaf(index: number): MMRData | null;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Calculate root from leaf data and proof
|
|
127
|
+
* Matches SignatureProof.getRootPublicKey() in Java
|
|
128
|
+
*
|
|
129
|
+
* From SignatureProof.java:
|
|
130
|
+
* MMRData pubentry = MMRData.CreateMMRDataLeafNode(mPublicKey, MiniNumber.ZERO);
|
|
131
|
+
* return mProof.calculateProof(pubentry).getData();
|
|
132
|
+
*/
|
|
133
|
+
export declare function calculateProofRoot(leafData: MMRData, proof: MMRProof): Bytes;
|
|
134
|
+
/**
|
|
135
|
+
* Verify a proof: check that leaf + proof computes to expected root
|
|
136
|
+
*/
|
|
137
|
+
export declare function verifyMMRProof(leafPubkey: Bytes, proof: MMRProof, expectedRoot: Bytes): boolean;
|
|
138
|
+
/**
|
|
139
|
+
* Deserialize MMRProof from bytes matching Minima's MMRProof.readDataStream()
|
|
140
|
+
*
|
|
141
|
+
* Format:
|
|
142
|
+
* 1. blockTime (MiniNumber)
|
|
143
|
+
* 2. chain length (MiniNumber)
|
|
144
|
+
* 3. Each chunk: isLeft (1 byte) + MMRData (hash with 4-byte length prefix + value MiniNumber)
|
|
145
|
+
*
|
|
146
|
+
* CRITICAL: Java MMRData.readDataStream uses mData.readHashFromStream() which reads
|
|
147
|
+
* a 4-byte big-endian length prefix followed by the hash bytes.
|
|
148
|
+
*
|
|
149
|
+
* @returns { proof: MMRProof, blockTime: bigint }
|
|
150
|
+
*/
|
|
151
|
+
export declare function parseMMRProofFromHex(data: Bytes): {
|
|
152
|
+
proof: MMRProof;
|
|
153
|
+
blockTime: bigint;
|
|
154
|
+
bytesRead: number;
|
|
155
|
+
};
|
|
156
|
+
/** @deprecated Use parseMMRProofFromHex */
|
|
157
|
+
export declare const deserializeMMRProof: typeof parseMMRProofFromHex;
|