@openzeppelin/miden-multisig-client 0.12.6
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/README.md +189 -0
- package/dist/account/builder.d.ts +23 -0
- package/dist/account/builder.d.ts.map +1 -0
- package/dist/account/builder.js +85 -0
- package/dist/account/builder.js.map +1 -0
- package/dist/account/index.d.ts +6 -0
- package/dist/account/index.d.ts.map +1 -0
- package/dist/account/index.js +6 -0
- package/dist/account/index.js.map +1 -0
- package/dist/account/masm.d.ts +3 -0
- package/dist/account/masm.d.ts.map +1 -0
- package/dist/account/masm.js +605 -0
- package/dist/account/masm.js.map +1 -0
- package/dist/account/storage.d.ts +10 -0
- package/dist/account/storage.d.ts.map +1 -0
- package/dist/account/storage.js +56 -0
- package/dist/account/storage.js.map +1 -0
- package/dist/account.d.ts +104 -0
- package/dist/account.d.ts.map +1 -0
- package/dist/account.js +136 -0
- package/dist/account.js.map +1 -0
- package/dist/builder.d.ts +54 -0
- package/dist/builder.d.ts.map +1 -0
- package/dist/builder.js +78 -0
- package/dist/builder.js.map +1 -0
- package/dist/client.d.ts +73 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +104 -0
- package/dist/client.js.map +1 -0
- package/dist/client.test.d.ts +2 -0
- package/dist/client.test.d.ts.map +1 -0
- package/dist/client.test.js +150 -0
- package/dist/client.test.js.map +1 -0
- package/dist/http.d.ts +64 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +162 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +53 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +52 -0
- package/dist/index.js.map +1 -0
- package/dist/inspector.d.ts +49 -0
- package/dist/inspector.d.ts.map +1 -0
- package/dist/inspector.js +120 -0
- package/dist/inspector.js.map +1 -0
- package/dist/inspector.test.d.ts +2 -0
- package/dist/inspector.test.d.ts.map +1 -0
- package/dist/inspector.test.js +205 -0
- package/dist/inspector.test.js.map +1 -0
- package/dist/keystore.d.ts +65 -0
- package/dist/keystore.d.ts.map +1 -0
- package/dist/keystore.js +121 -0
- package/dist/keystore.js.map +1 -0
- package/dist/miden.d.ts +9 -0
- package/dist/miden.d.ts.map +1 -0
- package/dist/miden.js +26 -0
- package/dist/miden.js.map +1 -0
- package/dist/multisig/helpers.d.ts +4 -0
- package/dist/multisig/helpers.d.ts.map +1 -0
- package/dist/multisig/helpers.js +21 -0
- package/dist/multisig/helpers.js.map +1 -0
- package/dist/multisig/helpers.test.d.ts +2 -0
- package/dist/multisig/helpers.test.d.ts.map +1 -0
- package/dist/multisig/helpers.test.js +94 -0
- package/dist/multisig/helpers.test.js.map +1 -0
- package/dist/multisig/metadata.d.ts +18 -0
- package/dist/multisig/metadata.d.ts.map +1 -0
- package/dist/multisig/metadata.js +100 -0
- package/dist/multisig/metadata.js.map +1 -0
- package/dist/multisig/metadata.test.d.ts +2 -0
- package/dist/multisig/metadata.test.d.ts.map +1 -0
- package/dist/multisig/metadata.test.js +323 -0
- package/dist/multisig/metadata.test.js.map +1 -0
- package/dist/multisig.d.ts +199 -0
- package/dist/multisig.d.ts.map +1 -0
- package/dist/multisig.js +821 -0
- package/dist/multisig.js.map +1 -0
- package/dist/multisig.test.d.ts +2 -0
- package/dist/multisig.test.d.ts.map +1 -0
- package/dist/multisig.test.js +1121 -0
- package/dist/multisig.test.js.map +1 -0
- package/dist/procedures.d.ts +57 -0
- package/dist/procedures.d.ts.map +1 -0
- package/dist/procedures.js +62 -0
- package/dist/procedures.js.map +1 -0
- package/dist/signer.d.ts +36 -0
- package/dist/signer.d.ts.map +1 -0
- package/dist/signer.js +68 -0
- package/dist/signer.js.map +1 -0
- package/dist/signer.test.d.ts +2 -0
- package/dist/signer.test.d.ts.map +1 -0
- package/dist/signer.test.js +117 -0
- package/dist/signer.test.js.map +1 -0
- package/dist/transaction/consumeNotes.d.ts +7 -0
- package/dist/transaction/consumeNotes.d.ts.map +1 -0
- package/dist/transaction/consumeNotes.js +28 -0
- package/dist/transaction/consumeNotes.js.map +1 -0
- package/dist/transaction/index.d.ts +7 -0
- package/dist/transaction/index.d.ts.map +1 -0
- package/dist/transaction/index.js +6 -0
- package/dist/transaction/index.js.map +1 -0
- package/dist/transaction/options.d.ts +6 -0
- package/dist/transaction/options.d.ts.map +1 -0
- package/dist/transaction/options.js +2 -0
- package/dist/transaction/options.js.map +1 -0
- package/dist/transaction/p2id.d.ts +7 -0
- package/dist/transaction/p2id.d.ts.map +1 -0
- package/dist/transaction/p2id.js +43 -0
- package/dist/transaction/p2id.js.map +1 -0
- package/dist/transaction/summary.d.ts +3 -0
- package/dist/transaction/summary.d.ts.map +1 -0
- package/dist/transaction/summary.js +6 -0
- package/dist/transaction/summary.js.map +1 -0
- package/dist/transaction/updatePsm.d.ts +7 -0
- package/dist/transaction/updatePsm.d.ts.map +1 -0
- package/dist/transaction/updatePsm.js +43 -0
- package/dist/transaction/updatePsm.js.map +1 -0
- package/dist/transaction/updateSigners.d.ts +8 -0
- package/dist/transaction/updateSigners.d.ts.map +1 -0
- package/dist/transaction/updateSigners.js +60 -0
- package/dist/transaction/updateSigners.js.map +1 -0
- package/dist/transaction.d.ts +6 -0
- package/dist/transaction.d.ts.map +1 -0
- package/dist/transaction.js +8 -0
- package/dist/transaction.js.map +1 -0
- package/dist/transaction.test.d.ts +2 -0
- package/dist/transaction.test.d.ts.map +1 -0
- package/dist/transaction.test.js +117 -0
- package/dist/transaction.test.js.map +1 -0
- package/dist/transport/http.d.ts +64 -0
- package/dist/transport/http.d.ts.map +1 -0
- package/dist/transport/http.js +162 -0
- package/dist/transport/http.js.map +1 -0
- package/dist/transport/index.d.ts +5 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +5 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/types/proposal.d.ts +74 -0
- package/dist/types/proposal.d.ts.map +1 -0
- package/dist/types/proposal.js +2 -0
- package/dist/types/proposal.js.map +1 -0
- package/dist/types.d.ts +60 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/encoding.d.ts +7 -0
- package/dist/utils/encoding.d.ts.map +1 -0
- package/dist/utils/encoding.js +54 -0
- package/dist/utils/encoding.js.map +1 -0
- package/dist/utils/encoding.test.d.ts +2 -0
- package/dist/utils/encoding.test.d.ts.map +1 -0
- package/dist/utils/encoding.test.js +185 -0
- package/dist/utils/encoding.test.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/random.d.ts +3 -0
- package/dist/utils/random.d.ts.map +1 -0
- package/dist/utils/random.js +14 -0
- package/dist/utils/random.js.map +1 -0
- package/dist/utils/signature.d.ts +12 -0
- package/dist/utils/signature.d.ts.map +1 -0
- package/dist/utils/signature.js +28 -0
- package/dist/utils/signature.js.map +1 -0
- package/dist/utils/signature.test.d.ts +2 -0
- package/dist/utils/signature.test.d.ts.map +1 -0
- package/dist/utils/signature.test.js +149 -0
- package/dist/utils/signature.test.js.map +1 -0
- package/dist/utils/word.d.ts +4 -0
- package/dist/utils/word.d.ts.map +1 -0
- package/dist/utils/word.js +8 -0
- package/dist/utils/word.js.map +1 -0
- package/dist/utils/word.test.d.ts +2 -0
- package/dist/utils/word.test.d.ts.map +1 -0
- package/dist/utils/word.test.js +54 -0
- package/dist/utils/word.test.js.map +1 -0
- package/masm/multisig.masm +423 -0
- package/masm/psm.masm +178 -0
- package/package.json +42 -0
- package/src/account/builder.ts +112 -0
- package/src/account/index.ts +15 -0
- package/src/account/masm.ts +606 -0
- package/src/account/storage.ts +70 -0
- package/src/client.test.ts +177 -0
- package/src/client.ts +129 -0
- package/src/index.ts +118 -0
- package/src/inspector.test.ts +237 -0
- package/src/inspector.ts +142 -0
- package/src/multisig/helpers.test.ts +114 -0
- package/src/multisig/helpers.ts +23 -0
- package/src/multisig.test.ts +1294 -0
- package/src/multisig.ts +1097 -0
- package/src/procedures.ts +72 -0
- package/src/signer.test.ts +135 -0
- package/src/signer.ts +75 -0
- package/src/transaction/consumeNotes.ts +41 -0
- package/src/transaction/index.ts +7 -0
- package/src/transaction/options.ts +7 -0
- package/src/transaction/p2id.ts +105 -0
- package/src/transaction/summary.ts +12 -0
- package/src/transaction/updatePsm.ts +69 -0
- package/src/transaction/updateSigners.ts +96 -0
- package/src/transaction.test.ts +136 -0
- package/src/transaction.ts +16 -0
- package/src/types/proposal.ts +80 -0
- package/src/types.ts +81 -0
- package/src/utils/encoding.test.ts +233 -0
- package/src/utils/encoding.ts +60 -0
- package/src/utils/index.ts +5 -0
- package/src/utils/random.ts +15 -0
- package/src/utils/signature.test.ts +187 -0
- package/src/utils/signature.ts +36 -0
- package/src/utils/word.test.ts +64 -0
- package/src/utils/word.ts +11 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Account Inspector - Inspects account storage to detect multisig configuration.
|
|
3
|
+
*/
|
|
4
|
+
import { Account, Word } from '@demox-labs/miden-sdk';
|
|
5
|
+
import { base64ToUint8Array } from './utils/encoding.js';
|
|
6
|
+
import { wordElementToBigInt, wordToHex } from './utils/word.js';
|
|
7
|
+
import { getProcedureRoot, getProcedureNames } from './procedures.js';
|
|
8
|
+
/**
|
|
9
|
+
* Inspects an account to detect its multisig configuration.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* // From base64-encoded state
|
|
14
|
+
* const config = AccountInspector.fromBase64(stateDataBase64);
|
|
15
|
+
* console.log(`${config.threshold}-of-${config.numSigners} multisig`);
|
|
16
|
+
*
|
|
17
|
+
* // From Miden SDK Account
|
|
18
|
+
* const config = AccountInspector.fromAccount(account);
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export class AccountInspector {
|
|
22
|
+
constructor() { }
|
|
23
|
+
/**
|
|
24
|
+
* Inspect a base64-encoded serialized account.
|
|
25
|
+
*
|
|
26
|
+
* @param base64Data - Base64-encoded Account bytes
|
|
27
|
+
* @returns Detected multisig configuration
|
|
28
|
+
*/
|
|
29
|
+
static fromBase64(base64Data) {
|
|
30
|
+
const bytes = base64ToUint8Array(base64Data);
|
|
31
|
+
const account = Account.deserialize(bytes);
|
|
32
|
+
return AccountInspector.fromAccount(account);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Inspect a Miden SDK Account object.
|
|
36
|
+
*
|
|
37
|
+
* @param account - The Account object from Miden SDK
|
|
38
|
+
* @returns Detected multisig configuration
|
|
39
|
+
*/
|
|
40
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
41
|
+
static fromAccount(account) {
|
|
42
|
+
const storage = account.storage();
|
|
43
|
+
const slot0 = storage.getItem(0);
|
|
44
|
+
const threshold = Number(wordElementToBigInt(slot0, 0));
|
|
45
|
+
const numSigners = Number(wordElementToBigInt(slot0, 1));
|
|
46
|
+
const signerCommitments = [];
|
|
47
|
+
for (let i = 0; i < numSigners; i++) {
|
|
48
|
+
try {
|
|
49
|
+
const key = new Word(new BigUint64Array([BigInt(i), 0n, 0n, 0n]));
|
|
50
|
+
const commitment = storage.getMapItem(1, key);
|
|
51
|
+
if (commitment) {
|
|
52
|
+
signerCommitments.push(wordToHex(commitment));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
console.warn(error);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
let psmEnabled = false;
|
|
60
|
+
let psmCommitment = null;
|
|
61
|
+
try {
|
|
62
|
+
const psmSlot0 = storage.getItem(4);
|
|
63
|
+
const selector = Number(wordElementToBigInt(psmSlot0, 0));
|
|
64
|
+
psmEnabled = selector === 1;
|
|
65
|
+
if (psmEnabled) {
|
|
66
|
+
const zeroKey = new Word(new BigUint64Array([0n, 0n, 0n, 0n]));
|
|
67
|
+
const psmKey = storage.getMapItem(5, zeroKey);
|
|
68
|
+
if (psmKey) {
|
|
69
|
+
psmCommitment = wordToHex(psmKey);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
console.warn(error);
|
|
75
|
+
}
|
|
76
|
+
const vaultBalances = [];
|
|
77
|
+
try {
|
|
78
|
+
const vault = account.vault();
|
|
79
|
+
const fungibleAssets = vault.fungibleAssets();
|
|
80
|
+
for (const asset of fungibleAssets) {
|
|
81
|
+
vaultBalances.push({
|
|
82
|
+
faucetId: asset.faucetId().toString(),
|
|
83
|
+
amount: BigInt(asset.amount()),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
console.warn(error);
|
|
89
|
+
}
|
|
90
|
+
// Read procedure threshold overrides from storage slot 3
|
|
91
|
+
// Storage layout: slot 3 is a map of PROC_ROOT => [threshold, 0, 0, 0]
|
|
92
|
+
const procedureThresholds = new Map();
|
|
93
|
+
for (const procName of getProcedureNames()) {
|
|
94
|
+
try {
|
|
95
|
+
const rootHex = getProcedureRoot(procName);
|
|
96
|
+
const rootWord = Word.fromHex(rootHex);
|
|
97
|
+
const value = storage.getMapItem(3, rootWord);
|
|
98
|
+
if (value) {
|
|
99
|
+
const procThreshold = Number(wordElementToBigInt(value, 0));
|
|
100
|
+
if (procThreshold > 0) {
|
|
101
|
+
procedureThresholds.set(procName, procThreshold);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
// Procedure threshold not set - use default
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
threshold,
|
|
111
|
+
numSigners,
|
|
112
|
+
signerCommitments,
|
|
113
|
+
psmEnabled,
|
|
114
|
+
psmCommitment,
|
|
115
|
+
vaultBalances,
|
|
116
|
+
procedureThresholds,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=inspector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspector.js","sourceRoot":"","sources":["../src/inspector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspector.test.d.ts","sourceRoot":"","sources":["../src/inspector.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
import { AccountInspector } from './inspector.js';
|
|
3
|
+
// Mock the Miden SDK
|
|
4
|
+
vi.mock('@demox-labs/miden-sdk', () => {
|
|
5
|
+
const createMockWord = (values) => ({
|
|
6
|
+
toU64s: () => values,
|
|
7
|
+
toHex: () => '0x' + values.map(v => v.toString(16).padStart(16, '0')).join(''),
|
|
8
|
+
});
|
|
9
|
+
const createMockStorage = (slots, maps) => ({
|
|
10
|
+
getItem: (index) => slots.get(index) ?? createMockWord([0n, 0n, 0n, 0n]),
|
|
11
|
+
getMapItem: (slotIndex, key) => {
|
|
12
|
+
const map = maps.get(slotIndex);
|
|
13
|
+
if (!map)
|
|
14
|
+
throw new Error('Map not found');
|
|
15
|
+
const keyStr = key.toU64s?.()[0]?.toString() ?? '0';
|
|
16
|
+
const value = map.get(keyStr);
|
|
17
|
+
if (!value)
|
|
18
|
+
throw new Error('Key not found');
|
|
19
|
+
return value;
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
const createMockVault = (assets) => ({
|
|
23
|
+
fungibleAssets: () => assets.map(a => ({
|
|
24
|
+
faucetId: () => ({ toString: () => a.faucetId }),
|
|
25
|
+
amount: () => a.amount,
|
|
26
|
+
})),
|
|
27
|
+
});
|
|
28
|
+
return {
|
|
29
|
+
Account: {
|
|
30
|
+
deserialize: vi.fn((bytes) => {
|
|
31
|
+
// Return different mocked accounts based on test scenario
|
|
32
|
+
// Default: 2-of-3 multisig with PSM enabled
|
|
33
|
+
const slot0 = createMockWord([2n, 3n, 0n, 0n]); // threshold=2, numSigners=3
|
|
34
|
+
const slot4 = createMockWord([1n, 0n, 0n, 0n]); // PSM enabled
|
|
35
|
+
const signerMap = new Map();
|
|
36
|
+
signerMap.set('0', createMockWord([BigInt('0x1111111111111111'), BigInt('0x2222222222222222'), BigInt('0x3333333333333333'), BigInt('0x4444444444444444')]));
|
|
37
|
+
signerMap.set('1', createMockWord([BigInt('0x5555555555555555'), BigInt('0x6666666666666666'), BigInt('0x7777777777777777'), BigInt('0x8888888888888888')]));
|
|
38
|
+
signerMap.set('2', createMockWord([BigInt('0xaaaaaaaaaaaaaaaa'), BigInt('0xbbbbbbbbbbbbbbbb'), BigInt('0xcccccccccccccccc'), BigInt('0xdddddddddddddddd')]));
|
|
39
|
+
const psmMap = new Map();
|
|
40
|
+
psmMap.set('0', createMockWord([BigInt('0xeeeeeeeeeeeeeeee'), BigInt('0xffffffffffffffff'), BigInt('0x0000000000000001'), BigInt('0x0000000000000002')]));
|
|
41
|
+
const slots = new Map();
|
|
42
|
+
slots.set(0, slot0);
|
|
43
|
+
slots.set(4, slot4);
|
|
44
|
+
const maps = new Map();
|
|
45
|
+
maps.set(1, signerMap);
|
|
46
|
+
maps.set(5, psmMap);
|
|
47
|
+
return {
|
|
48
|
+
storage: () => createMockStorage(slots, maps),
|
|
49
|
+
vault: () => createMockVault([
|
|
50
|
+
{ faucetId: '0xfaucet1', amount: 1000n },
|
|
51
|
+
{ faucetId: '0xfaucet2', amount: 500n },
|
|
52
|
+
]),
|
|
53
|
+
};
|
|
54
|
+
}),
|
|
55
|
+
},
|
|
56
|
+
Word: vi.fn().mockImplementation((arr) => ({
|
|
57
|
+
toU64s: () => Array.from(arr),
|
|
58
|
+
toHex: () => '0x' + Array.from(arr).map(v => v.toString(16).padStart(16, '0')).join(''),
|
|
59
|
+
})),
|
|
60
|
+
};
|
|
61
|
+
});
|
|
62
|
+
describe('AccountInspector', () => {
|
|
63
|
+
beforeEach(() => {
|
|
64
|
+
vi.clearAllMocks();
|
|
65
|
+
});
|
|
66
|
+
describe('fromBase64', () => {
|
|
67
|
+
it('deserializes account from base64 and extracts config', () => {
|
|
68
|
+
const base64 = btoa(String.fromCharCode(...new Uint8Array([1, 2, 3])));
|
|
69
|
+
const config = AccountInspector.fromBase64(base64);
|
|
70
|
+
expect(config.threshold).toBe(2);
|
|
71
|
+
expect(config.numSigners).toBe(3);
|
|
72
|
+
});
|
|
73
|
+
it('extracts PSM status', () => {
|
|
74
|
+
const base64 = btoa(String.fromCharCode(...new Uint8Array([1, 2, 3])));
|
|
75
|
+
const config = AccountInspector.fromBase64(base64);
|
|
76
|
+
expect(config.psmEnabled).toBe(true);
|
|
77
|
+
expect(config.psmCommitment).toMatch(/^0x[a-f0-9]+$/);
|
|
78
|
+
});
|
|
79
|
+
it('extracts signer commitments', () => {
|
|
80
|
+
const base64 = btoa(String.fromCharCode(...new Uint8Array([1, 2, 3])));
|
|
81
|
+
const config = AccountInspector.fromBase64(base64);
|
|
82
|
+
expect(config.signerCommitments).toHaveLength(3);
|
|
83
|
+
config.signerCommitments.forEach(commitment => {
|
|
84
|
+
expect(commitment).toMatch(/^0x[a-f0-9]+$/);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
it('extracts vault balances', () => {
|
|
88
|
+
const base64 = btoa(String.fromCharCode(...new Uint8Array([1, 2, 3])));
|
|
89
|
+
const config = AccountInspector.fromBase64(base64);
|
|
90
|
+
expect(config.vaultBalances).toHaveLength(2);
|
|
91
|
+
expect(config.vaultBalances[0]).toEqual({ faucetId: '0xfaucet1', amount: 1000n });
|
|
92
|
+
expect(config.vaultBalances[1]).toEqual({ faucetId: '0xfaucet2', amount: 500n });
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
describe('fromAccount', () => {
|
|
96
|
+
it('extracts threshold from slot 0', async () => {
|
|
97
|
+
const { Account } = await import('@demox-labs/miden-sdk');
|
|
98
|
+
const account = Account.deserialize(new Uint8Array([1, 2, 3]));
|
|
99
|
+
const config = AccountInspector.fromAccount(account);
|
|
100
|
+
expect(config.threshold).toBe(2);
|
|
101
|
+
});
|
|
102
|
+
it('extracts numSigners from slot 0', async () => {
|
|
103
|
+
const { Account } = await import('@demox-labs/miden-sdk');
|
|
104
|
+
const account = Account.deserialize(new Uint8Array([1, 2, 3]));
|
|
105
|
+
const config = AccountInspector.fromAccount(account);
|
|
106
|
+
expect(config.numSigners).toBe(3);
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
describe('AccountInspector edge cases', () => {
|
|
111
|
+
beforeEach(() => {
|
|
112
|
+
vi.clearAllMocks();
|
|
113
|
+
});
|
|
114
|
+
it('handles account with PSM disabled', async () => {
|
|
115
|
+
const { Account } = await import('@demox-labs/miden-sdk');
|
|
116
|
+
// Override mock for this test
|
|
117
|
+
vi.mocked(Account.deserialize).mockReturnValueOnce({
|
|
118
|
+
storage: () => ({
|
|
119
|
+
getItem: (index) => {
|
|
120
|
+
if (index === 0)
|
|
121
|
+
return { toU64s: () => [1n, 1n, 0n, 0n] };
|
|
122
|
+
if (index === 4)
|
|
123
|
+
return { toU64s: () => [0n, 0n, 0n, 0n] }; // PSM disabled
|
|
124
|
+
return { toU64s: () => [0n, 0n, 0n, 0n] };
|
|
125
|
+
},
|
|
126
|
+
getMapItem: (slotIndex, key) => {
|
|
127
|
+
if (slotIndex === 1 && key.toU64s?.()[0] === 0n) {
|
|
128
|
+
return {
|
|
129
|
+
toHex: () => '0x' + 'a'.repeat(64),
|
|
130
|
+
toU64s: () => [1n, 2n, 3n, 4n],
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
throw new Error('Not found');
|
|
134
|
+
},
|
|
135
|
+
}),
|
|
136
|
+
vault: () => ({
|
|
137
|
+
fungibleAssets: () => [],
|
|
138
|
+
}),
|
|
139
|
+
});
|
|
140
|
+
const account = Account.deserialize(new Uint8Array([1, 2, 3]));
|
|
141
|
+
const config = AccountInspector.fromAccount(account);
|
|
142
|
+
expect(config.psmEnabled).toBe(false);
|
|
143
|
+
expect(config.psmCommitment).toBeNull();
|
|
144
|
+
});
|
|
145
|
+
it('handles account with empty vault', async () => {
|
|
146
|
+
const { Account } = await import('@demox-labs/miden-sdk');
|
|
147
|
+
vi.mocked(Account.deserialize).mockReturnValueOnce({
|
|
148
|
+
storage: () => ({
|
|
149
|
+
getItem: () => ({ toU64s: () => [1n, 1n, 0n, 0n] }),
|
|
150
|
+
getMapItem: () => {
|
|
151
|
+
throw new Error('Not found');
|
|
152
|
+
},
|
|
153
|
+
}),
|
|
154
|
+
vault: () => ({
|
|
155
|
+
fungibleAssets: () => [],
|
|
156
|
+
}),
|
|
157
|
+
});
|
|
158
|
+
const account = Account.deserialize(new Uint8Array([1, 2, 3]));
|
|
159
|
+
const config = AccountInspector.fromAccount(account);
|
|
160
|
+
expect(config.vaultBalances).toEqual([]);
|
|
161
|
+
});
|
|
162
|
+
it('handles missing signer map entries gracefully', async () => {
|
|
163
|
+
const { Account } = await import('@demox-labs/miden-sdk');
|
|
164
|
+
vi.mocked(Account.deserialize).mockReturnValueOnce({
|
|
165
|
+
storage: () => ({
|
|
166
|
+
getItem: (index) => {
|
|
167
|
+
if (index === 0)
|
|
168
|
+
return { toU64s: () => [2n, 5n, 0n, 0n] }; // threshold=2, numSigners=5
|
|
169
|
+
if (index === 4)
|
|
170
|
+
return { toU64s: () => [0n, 0n, 0n, 0n] };
|
|
171
|
+
return { toU64s: () => [0n, 0n, 0n, 0n] };
|
|
172
|
+
},
|
|
173
|
+
getMapItem: () => {
|
|
174
|
+
throw new Error('Map entry not found');
|
|
175
|
+
},
|
|
176
|
+
}),
|
|
177
|
+
vault: () => ({
|
|
178
|
+
fungibleAssets: () => [],
|
|
179
|
+
}),
|
|
180
|
+
});
|
|
181
|
+
const account = Account.deserialize(new Uint8Array([1, 2, 3]));
|
|
182
|
+
const config = AccountInspector.fromAccount(account);
|
|
183
|
+
// Should gracefully handle missing entries
|
|
184
|
+
expect(config.numSigners).toBe(5);
|
|
185
|
+
expect(config.signerCommitments).toEqual([]); // All entries missing
|
|
186
|
+
});
|
|
187
|
+
it('handles vault access error gracefully', async () => {
|
|
188
|
+
const { Account } = await import('@demox-labs/miden-sdk');
|
|
189
|
+
vi.mocked(Account.deserialize).mockReturnValueOnce({
|
|
190
|
+
storage: () => ({
|
|
191
|
+
getItem: () => ({ toU64s: () => [1n, 1n, 0n, 0n] }),
|
|
192
|
+
getMapItem: () => {
|
|
193
|
+
throw new Error('Not found');
|
|
194
|
+
},
|
|
195
|
+
}),
|
|
196
|
+
vault: () => {
|
|
197
|
+
throw new Error('Vault access failed');
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
const account = Account.deserialize(new Uint8Array([1, 2, 3]));
|
|
201
|
+
const config = AccountInspector.fromAccount(account);
|
|
202
|
+
expect(config.vaultBalances).toEqual([]);
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
//# sourceMappingURL=inspector.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspector.test.js","sourceRoot":"","sources":["../src/inspector.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web keystore for managing Falcon keys in the browser.
|
|
3
|
+
*
|
|
4
|
+
* Keys are stored in localStorage and can be used for signing transactions.
|
|
5
|
+
* This module mirrors the KeyManager trait from the Rust miden-multisig-client.
|
|
6
|
+
*/
|
|
7
|
+
import { SecretKey } from '@miden-sdk/miden-sdk';
|
|
8
|
+
/**
|
|
9
|
+
* A stored key entry in the keystore.
|
|
10
|
+
*/
|
|
11
|
+
export interface KeyEntry {
|
|
12
|
+
/** Unique identifier for the key */
|
|
13
|
+
id: string;
|
|
14
|
+
/** Human-readable name for the key */
|
|
15
|
+
name: string;
|
|
16
|
+
/** Public key commitment as hex string (64 chars) */
|
|
17
|
+
commitment: string;
|
|
18
|
+
/** Serialized secret key as base64 */
|
|
19
|
+
secretKeyBase64: string;
|
|
20
|
+
/** Creation timestamp */
|
|
21
|
+
createdAt: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Loads all keys from localStorage.
|
|
25
|
+
*/
|
|
26
|
+
export declare function loadKeys(): KeyEntry[];
|
|
27
|
+
/**
|
|
28
|
+
* Generates a new Falcon key pair and stores it in the keystore.
|
|
29
|
+
*
|
|
30
|
+
* @param name - Human-readable name for the key
|
|
31
|
+
* @returns The created key entry
|
|
32
|
+
*/
|
|
33
|
+
export declare function generateKey(name: string): KeyEntry;
|
|
34
|
+
/**
|
|
35
|
+
* Loads a secret key from a key entry.
|
|
36
|
+
*
|
|
37
|
+
* @param entry - The key entry to load
|
|
38
|
+
* @returns The deserialized secret key
|
|
39
|
+
*/
|
|
40
|
+
export declare function loadSecretKey(entry: KeyEntry): SecretKey;
|
|
41
|
+
/**
|
|
42
|
+
* Deletes a key from the keystore.
|
|
43
|
+
*
|
|
44
|
+
* @param keyId - The ID of the key to delete
|
|
45
|
+
*/
|
|
46
|
+
export declare function deleteKey(keyId: string): void;
|
|
47
|
+
/**
|
|
48
|
+
* Gets a key by ID.
|
|
49
|
+
*
|
|
50
|
+
* @param keyId - The ID of the key to get
|
|
51
|
+
* @returns The key entry or undefined if not found
|
|
52
|
+
*/
|
|
53
|
+
export declare function getKey(keyId: string): KeyEntry | undefined;
|
|
54
|
+
/**
|
|
55
|
+
* Renames a key.
|
|
56
|
+
*
|
|
57
|
+
* @param keyId - The ID of the key to rename
|
|
58
|
+
* @param newName - The new name for the key
|
|
59
|
+
*/
|
|
60
|
+
export declare function renameKey(keyId: string, newName: string): void;
|
|
61
|
+
/**
|
|
62
|
+
* Clears all keys from the keystore.
|
|
63
|
+
*/
|
|
64
|
+
export declare function clearKeystore(): void;
|
|
65
|
+
//# sourceMappingURL=keystore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keystore.d.ts","sourceRoot":"","sources":["../src/keystore.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAQlD;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,oCAAoC;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAaD;;GAEG;AACH,wBAAgB,QAAQ,IAAI,QAAQ,EAAE,CAQrC;AASD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAgClD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,CAGxD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAI7C;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAG1D;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAO9D;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAEpC"}
|
package/dist/keystore.js
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web keystore for managing Falcon keys in the browser.
|
|
3
|
+
*
|
|
4
|
+
* Keys are stored in localStorage and can be used for signing transactions.
|
|
5
|
+
* This module mirrors the KeyManager trait from the Rust miden-multisig-client.
|
|
6
|
+
*/
|
|
7
|
+
import { SecretKey } from '@demox-labs/miden-sdk';
|
|
8
|
+
const KEYSTORE_STORAGE_KEY = 'miden_keystore';
|
|
9
|
+
// =============================================================================
|
|
10
|
+
// Keystore Functions
|
|
11
|
+
// =============================================================================
|
|
12
|
+
/**
|
|
13
|
+
* Generates a unique ID for a new key.
|
|
14
|
+
*/
|
|
15
|
+
function generateKeyId() {
|
|
16
|
+
return crypto.randomUUID();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Loads all keys from localStorage.
|
|
20
|
+
*/
|
|
21
|
+
export function loadKeys() {
|
|
22
|
+
try {
|
|
23
|
+
const stored = localStorage.getItem(KEYSTORE_STORAGE_KEY);
|
|
24
|
+
if (!stored)
|
|
25
|
+
return [];
|
|
26
|
+
return JSON.parse(stored);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Saves keys to localStorage.
|
|
34
|
+
*/
|
|
35
|
+
function saveKeys(keys) {
|
|
36
|
+
localStorage.setItem(KEYSTORE_STORAGE_KEY, JSON.stringify(keys));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Generates a new Falcon key pair and stores it in the keystore.
|
|
40
|
+
*
|
|
41
|
+
* @param name - Human-readable name for the key
|
|
42
|
+
* @returns The created key entry
|
|
43
|
+
*/
|
|
44
|
+
export function generateKey(name) {
|
|
45
|
+
// Generate a random seed for the key
|
|
46
|
+
const seed = new Uint8Array(32);
|
|
47
|
+
crypto.getRandomValues(seed);
|
|
48
|
+
// Generate the Falcon secret key
|
|
49
|
+
const secretKey = SecretKey.rpoFalconWithRNG(seed);
|
|
50
|
+
// Get the public key and its commitment
|
|
51
|
+
const publicKey = secretKey.publicKey();
|
|
52
|
+
const commitment = publicKey.toCommitment();
|
|
53
|
+
const commitmentHex = commitment.toHex();
|
|
54
|
+
// Serialize the secret key for storage
|
|
55
|
+
const secretKeyBytes = secretKey.serialize();
|
|
56
|
+
const secretKeyBase64 = btoa(String.fromCharCode(...secretKeyBytes));
|
|
57
|
+
// Create the key entry
|
|
58
|
+
const entry = {
|
|
59
|
+
id: generateKeyId(),
|
|
60
|
+
name,
|
|
61
|
+
commitment: commitmentHex,
|
|
62
|
+
secretKeyBase64,
|
|
63
|
+
createdAt: Date.now(),
|
|
64
|
+
};
|
|
65
|
+
// Save to keystore
|
|
66
|
+
const keys = loadKeys();
|
|
67
|
+
keys.push(entry);
|
|
68
|
+
saveKeys(keys);
|
|
69
|
+
return entry;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Loads a secret key from a key entry.
|
|
73
|
+
*
|
|
74
|
+
* @param entry - The key entry to load
|
|
75
|
+
* @returns The deserialized secret key
|
|
76
|
+
*/
|
|
77
|
+
export function loadSecretKey(entry) {
|
|
78
|
+
const bytes = Uint8Array.from(atob(entry.secretKeyBase64), (c) => c.charCodeAt(0));
|
|
79
|
+
return SecretKey.deserialize(bytes);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Deletes a key from the keystore.
|
|
83
|
+
*
|
|
84
|
+
* @param keyId - The ID of the key to delete
|
|
85
|
+
*/
|
|
86
|
+
export function deleteKey(keyId) {
|
|
87
|
+
const keys = loadKeys();
|
|
88
|
+
const filtered = keys.filter((k) => k.id !== keyId);
|
|
89
|
+
saveKeys(filtered);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Gets a key by ID.
|
|
93
|
+
*
|
|
94
|
+
* @param keyId - The ID of the key to get
|
|
95
|
+
* @returns The key entry or undefined if not found
|
|
96
|
+
*/
|
|
97
|
+
export function getKey(keyId) {
|
|
98
|
+
const keys = loadKeys();
|
|
99
|
+
return keys.find((k) => k.id === keyId);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Renames a key.
|
|
103
|
+
*
|
|
104
|
+
* @param keyId - The ID of the key to rename
|
|
105
|
+
* @param newName - The new name for the key
|
|
106
|
+
*/
|
|
107
|
+
export function renameKey(keyId, newName) {
|
|
108
|
+
const keys = loadKeys();
|
|
109
|
+
const key = keys.find((k) => k.id === keyId);
|
|
110
|
+
if (key) {
|
|
111
|
+
key.name = newName;
|
|
112
|
+
saveKeys(keys);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Clears all keys from the keystore.
|
|
117
|
+
*/
|
|
118
|
+
export function clearKeystore() {
|
|
119
|
+
localStorage.removeItem(KEYSTORE_STORAGE_KEY);
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=keystore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keystore.js","sourceRoot":"","sources":["../src/keystore.ts"],"names":[],"mappings":"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"}
|
package/dist/miden.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"miden.d.ts","sourceRoot":"","sources":["../src/miden.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAkBpD"}
|
package/dist/miden.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Miden SDK utilities.
|
|
3
|
+
*/
|
|
4
|
+
// =============================================================================
|
|
5
|
+
// IndexedDB Utilities
|
|
6
|
+
// =============================================================================
|
|
7
|
+
/**
|
|
8
|
+
* Clear all IndexedDB databases.
|
|
9
|
+
* Useful for resetting the Miden client state in browser environments.
|
|
10
|
+
*/
|
|
11
|
+
export async function clearIndexedDB() {
|
|
12
|
+
if (typeof indexedDB === 'undefined') {
|
|
13
|
+
return; // Not in browser environment
|
|
14
|
+
}
|
|
15
|
+
const databases = await indexedDB.databases();
|
|
16
|
+
const deletePromises = databases
|
|
17
|
+
.filter((db) => db.name)
|
|
18
|
+
.map((db) => new Promise((resolve, reject) => {
|
|
19
|
+
const request = indexedDB.deleteDatabase(db.name);
|
|
20
|
+
request.onsuccess = () => resolve();
|
|
21
|
+
request.onerror = () => reject(request.error);
|
|
22
|
+
request.onblocked = () => resolve();
|
|
23
|
+
}));
|
|
24
|
+
await Promise.all(deletePromises);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=miden.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"miden.js","sourceRoot":"","sources":["../src/miden.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE,CAAC;QACrC,OAAO,CAAC,6BAA6B;IACvC,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,SAAS,EAAE,CAAC;IAC9C,MAAM,cAAc,GAAG,SAAS;SAC7B,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;SACvB,GAAG,CACF,CAAC,EAAE,EAAE,EAAE,CACL,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACpC,MAAM,OAAO,GAAG,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,IAAK,CAAC,CAAC;QACnD,OAAO,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QACpC,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACtC,CAAC,CAAC,CACL,CAAC;IACJ,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/multisig/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA4B,MAAM,uBAAuB,CAAC;AAG1E,wBAAgB,8BAA8B,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAK9E;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAWvD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { TransactionSummary } from '@demox-labs/miden-sdk';
|
|
2
|
+
import { base64ToUint8Array } from '../utils/encoding.js';
|
|
3
|
+
export function computeCommitmentFromTxSummary(txSummaryBase64) {
|
|
4
|
+
const bytes = base64ToUint8Array(txSummaryBase64);
|
|
5
|
+
const summary = TransactionSummary.deserialize(bytes);
|
|
6
|
+
const commitment = summary.toCommitment();
|
|
7
|
+
return commitment.toHex();
|
|
8
|
+
}
|
|
9
|
+
export function accountIdToHex(account) {
|
|
10
|
+
const accountId = account.id();
|
|
11
|
+
const str = accountId.toString();
|
|
12
|
+
if (str.startsWith('0x') || str.startsWith('0X')) {
|
|
13
|
+
return str;
|
|
14
|
+
}
|
|
15
|
+
const prefix = accountId.prefix().asInt();
|
|
16
|
+
const suffix = accountId.suffix().asInt();
|
|
17
|
+
const prefixHex = prefix.toString(16).padStart(16, '0');
|
|
18
|
+
const suffixHex = suffix.toString(16).padStart(16, '0');
|
|
19
|
+
return `0x${prefixHex}${suffixHex.slice(0, 14)}`;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/multisig/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,kBAAkB,EAAQ,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,UAAU,8BAA8B,CAAC,eAAuB;IACpE,MAAM,KAAK,GAAG,kBAAkB,CAAC,eAAe,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAC1C,OAAO,UAAU,CAAC,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;IACjC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACxD,OAAO,KAAK,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.test.d.ts","sourceRoot":"","sources":["../../src/multisig/helpers.test.ts"],"names":[],"mappings":""}
|