@openzeppelin/miden-multisig-client 0.17.0-rc.2 → 0.17.0

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.
Files changed (278) hide show
  1. package/README.md +172 -47
  2. package/dist/account/builder.d.ts +2 -2
  3. package/dist/account/builder.d.ts.map +1 -1
  4. package/dist/account/builder.js +49 -24
  5. package/dist/account/builder.js.map +1 -1
  6. package/dist/connectivity.d.ts +2 -0
  7. package/dist/connectivity.d.ts.map +1 -1
  8. package/dist/connectivity.js +7 -4
  9. package/dist/connectivity.js.map +1 -1
  10. package/dist/index.d.ts +8 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +7 -1
  13. package/dist/index.js.map +1 -1
  14. package/dist/multisig/authArgErrors.d.ts +59 -0
  15. package/dist/multisig/authArgErrors.d.ts.map +1 -0
  16. package/dist/multisig/authArgErrors.js +115 -0
  17. package/dist/multisig/authArgErrors.js.map +1 -0
  18. package/dist/multisig/helpers.d.ts +5 -0
  19. package/dist/multisig/helpers.d.ts.map +1 -1
  20. package/dist/multisig/helpers.js +7 -2
  21. package/dist/multisig/helpers.js.map +1 -1
  22. package/dist/multisig.d.ts +140 -0
  23. package/dist/multisig.d.ts.map +1 -1
  24. package/dist/multisig.js +419 -12
  25. package/dist/multisig.js.map +1 -1
  26. package/dist/procedures.d.ts +1 -1
  27. package/dist/procedures.js +1 -1
  28. package/dist/recovery/proposalNoteImport.d.ts +173 -0
  29. package/dist/recovery/proposalNoteImport.d.ts.map +1 -0
  30. package/dist/recovery/proposalNoteImport.js +411 -0
  31. package/dist/recovery/proposalNoteImport.js.map +1 -0
  32. package/dist/recovery/publicNoteBackfill.d.ts +168 -0
  33. package/dist/recovery/publicNoteBackfill.d.ts.map +1 -0
  34. package/dist/recovery/publicNoteBackfill.js +368 -0
  35. package/dist/recovery/publicNoteBackfill.js.map +1 -0
  36. package/dist/recovery/recoverNotes.d.ts +147 -0
  37. package/dist/recovery/recoverNotes.d.ts.map +1 -0
  38. package/dist/recovery/recoverNotes.js +163 -0
  39. package/dist/recovery/recoverNotes.js.map +1 -0
  40. package/dist/recovery/transportDrain.d.ts +124 -0
  41. package/dist/recovery/transportDrain.d.ts.map +1 -0
  42. package/dist/recovery/transportDrain.js +262 -0
  43. package/dist/recovery/transportDrain.js.map +1 -0
  44. package/dist/transaction/consumeNotes.d.ts.map +1 -1
  45. package/dist/transaction/consumeNotes.js +4 -1
  46. package/dist/transaction/consumeNotes.js.map +1 -1
  47. package/dist/transaction/p2id.d.ts.map +1 -1
  48. package/dist/transaction/p2id.js +4 -1
  49. package/dist/transaction/p2id.js.map +1 -1
  50. package/dist/transaction/summary.d.ts +10 -4
  51. package/dist/transaction/summary.d.ts.map +1 -1
  52. package/dist/transaction/summary.js +13 -7
  53. package/dist/transaction/summary.js.map +1 -1
  54. package/dist/transaction/updateGuardian.js +4 -1
  55. package/dist/transaction/updateGuardian.js.map +1 -1
  56. package/dist/transaction/updateProcedureThreshold.js +4 -1
  57. package/dist/transaction/updateProcedureThreshold.js.map +1 -1
  58. package/dist/transaction/updateSigners.js +4 -1
  59. package/dist/transaction/updateSigners.js.map +1 -1
  60. package/dist/transaction.d.ts +1 -1
  61. package/dist/transaction.d.ts.map +1 -1
  62. package/dist/transaction.js +1 -1
  63. package/dist/transaction.js.map +1 -1
  64. package/package.json +14 -10
  65. package/src/account/builder.ts +87 -35
  66. package/src/connectivity.ts +9 -4
  67. package/src/index.ts +34 -1
  68. package/src/multisig/authArgErrors.ts +138 -0
  69. package/src/multisig/helpers.ts +7 -2
  70. package/src/multisig.ts +513 -20
  71. package/src/procedures.ts +1 -1
  72. package/src/recovery/proposalNoteImport.ts +548 -0
  73. package/src/recovery/publicNoteBackfill.ts +502 -0
  74. package/src/recovery/recoverNotes.ts +288 -0
  75. package/src/recovery/transportDrain.ts +330 -0
  76. package/src/transaction/consumeNotes.ts +4 -1
  77. package/src/transaction/p2id.ts +4 -1
  78. package/src/transaction/summary.ts +13 -7
  79. package/src/transaction/updateGuardian.ts +4 -1
  80. package/src/transaction/updateProcedureThreshold.ts +4 -1
  81. package/src/transaction/updateSigners.ts +4 -1
  82. package/src/transaction.ts +1 -1
  83. package/dist/account/builder.test.d.ts +0 -2
  84. package/dist/account/builder.test.d.ts.map +0 -1
  85. package/dist/account/builder.test.js +0 -166
  86. package/dist/account/builder.test.js.map +0 -1
  87. package/dist/account/masm/account-components/auth.d.ts +0 -2
  88. package/dist/account/masm/account-components/auth.d.ts.map +0 -1
  89. package/dist/account/masm/account-components/auth.js +0 -46
  90. package/dist/account/masm/account-components/auth.js.map +0 -1
  91. package/dist/account/masm/index.d.ts +0 -2
  92. package/dist/account/masm/index.d.ts.map +0 -1
  93. package/dist/account/masm/index.js +0 -4
  94. package/dist/account/masm/index.js.map +0 -1
  95. package/dist/account/masm.d.ts +0 -2
  96. package/dist/account/masm.d.ts.map +0 -1
  97. package/dist/account/masm.js +0 -4
  98. package/dist/account/masm.js.map +0 -1
  99. package/dist/account/storage.test.d.ts +0 -2
  100. package/dist/account/storage.test.d.ts.map +0 -1
  101. package/dist/account/storage.test.js +0 -73
  102. package/dist/account/storage.test.js.map +0 -1
  103. package/dist/client.test.d.ts +0 -2
  104. package/dist/client.test.d.ts.map +0 -1
  105. package/dist/client.test.js +0 -380
  106. package/dist/client.test.js.map +0 -1
  107. package/dist/connectivity.test.d.ts +0 -2
  108. package/dist/connectivity.test.d.ts.map +0 -1
  109. package/dist/connectivity.test.js +0 -61
  110. package/dist/connectivity.test.js.map +0 -1
  111. package/dist/inspector.test.d.ts +0 -2
  112. package/dist/inspector.test.d.ts.map +0 -1
  113. package/dist/inspector.test.js +0 -425
  114. package/dist/inspector.test.js.map +0 -1
  115. package/dist/lookupAuth.test.d.ts +0 -2
  116. package/dist/lookupAuth.test.d.ts.map +0 -1
  117. package/dist/lookupAuth.test.js +0 -138
  118. package/dist/lookupAuth.test.js.map +0 -1
  119. package/dist/multisig/consumeNotesErrors.test.d.ts +0 -2
  120. package/dist/multisig/consumeNotesErrors.test.d.ts.map +0 -1
  121. package/dist/multisig/consumeNotesErrors.test.js +0 -28
  122. package/dist/multisig/consumeNotesErrors.test.js.map +0 -1
  123. package/dist/multisig/helpers.test.d.ts +0 -2
  124. package/dist/multisig/helpers.test.d.ts.map +0 -1
  125. package/dist/multisig/helpers.test.js +0 -94
  126. package/dist/multisig/helpers.test.js.map +0 -1
  127. package/dist/multisig.test.d.ts +0 -2
  128. package/dist/multisig.test.d.ts.map +0 -1
  129. package/dist/multisig.test.js +0 -4112
  130. package/dist/multisig.test.js.map +0 -1
  131. package/dist/proposal/factory.test.d.ts +0 -2
  132. package/dist/proposal/factory.test.d.ts.map +0 -1
  133. package/dist/proposal/factory.test.js +0 -32
  134. package/dist/proposal/factory.test.js.map +0 -1
  135. package/dist/proposal/metadata.test.d.ts +0 -2
  136. package/dist/proposal/metadata.test.d.ts.map +0 -1
  137. package/dist/proposal/metadata.test.js +0 -193
  138. package/dist/proposal/metadata.test.js.map +0 -1
  139. package/dist/prover/config.test.d.ts +0 -2
  140. package/dist/prover/config.test.d.ts.map +0 -1
  141. package/dist/prover/config.test.js +0 -54
  142. package/dist/prover/config.test.js.map +0 -1
  143. package/dist/prover/errors.test.d.ts +0 -2
  144. package/dist/prover/errors.test.d.ts.map +0 -1
  145. package/dist/prover/errors.test.js +0 -29
  146. package/dist/prover/errors.test.js.map +0 -1
  147. package/dist/prover/retry.test.d.ts +0 -2
  148. package/dist/prover/retry.test.d.ts.map +0 -1
  149. package/dist/prover/retry.test.js +0 -20
  150. package/dist/prover/retry.test.js.map +0 -1
  151. package/dist/prover/workflow.test.d.ts +0 -2
  152. package/dist/prover/workflow.test.d.ts.map +0 -1
  153. package/dist/prover/workflow.test.js +0 -105
  154. package/dist/prover/workflow.test.js.map +0 -1
  155. package/dist/raw-client.test.d.ts +0 -2
  156. package/dist/raw-client.test.d.ts.map +0 -1
  157. package/dist/raw-client.test.js +0 -111
  158. package/dist/raw-client.test.js.map +0 -1
  159. package/dist/rpc/config.test.d.ts +0 -2
  160. package/dist/rpc/config.test.d.ts.map +0 -1
  161. package/dist/rpc/config.test.js +0 -24
  162. package/dist/rpc/config.test.js.map +0 -1
  163. package/dist/rpc/errors.test.d.ts +0 -2
  164. package/dist/rpc/errors.test.d.ts.map +0 -1
  165. package/dist/rpc/errors.test.js +0 -34
  166. package/dist/rpc/errors.test.js.map +0 -1
  167. package/dist/rpc/retry.test.d.ts +0 -2
  168. package/dist/rpc/retry.test.d.ts.map +0 -1
  169. package/dist/rpc/retry.test.js +0 -98
  170. package/dist/rpc/retry.test.js.map +0 -1
  171. package/dist/signers/ecdsa.test.d.ts +0 -2
  172. package/dist/signers/ecdsa.test.d.ts.map +0 -1
  173. package/dist/signers/ecdsa.test.js +0 -88
  174. package/dist/signers/ecdsa.test.js.map +0 -1
  175. package/dist/signers/falcon.test.d.ts +0 -2
  176. package/dist/signers/falcon.test.d.ts.map +0 -1
  177. package/dist/signers/falcon.test.js +0 -161
  178. package/dist/signers/falcon.test.js.map +0 -1
  179. package/dist/signers/miden-wallet.ecdsa-recovery.test.d.ts +0 -2
  180. package/dist/signers/miden-wallet.ecdsa-recovery.test.d.ts.map +0 -1
  181. package/dist/signers/miden-wallet.ecdsa-recovery.test.js +0 -148
  182. package/dist/signers/miden-wallet.ecdsa-recovery.test.js.map +0 -1
  183. package/dist/signers/miden-wallet.test.d.ts +0 -2
  184. package/dist/signers/miden-wallet.test.d.ts.map +0 -1
  185. package/dist/signers/miden-wallet.test.js +0 -164
  186. package/dist/signers/miden-wallet.test.js.map +0 -1
  187. package/dist/signers/para.test.d.ts +0 -2
  188. package/dist/signers/para.test.d.ts.map +0 -1
  189. package/dist/signers/para.test.js +0 -146
  190. package/dist/signers/para.test.js.map +0 -1
  191. package/dist/transaction/index.d.ts +0 -8
  192. package/dist/transaction/index.d.ts.map +0 -1
  193. package/dist/transaction/index.js +0 -7
  194. package/dist/transaction/index.js.map +0 -1
  195. package/dist/transaction/p2id.test.d.ts +0 -2
  196. package/dist/transaction/p2id.test.d.ts.map +0 -1
  197. package/dist/transaction/p2id.test.js +0 -246
  198. package/dist/transaction/p2id.test.js.map +0 -1
  199. package/dist/transaction/rpoRandomCoin.test.d.ts +0 -2
  200. package/dist/transaction/rpoRandomCoin.test.d.ts.map +0 -1
  201. package/dist/transaction/rpoRandomCoin.test.js +0 -52
  202. package/dist/transaction/rpoRandomCoin.test.js.map +0 -1
  203. package/dist/transaction/summary.test.d.ts +0 -2
  204. package/dist/transaction/summary.test.d.ts.map +0 -1
  205. package/dist/transaction/summary.test.js +0 -26
  206. package/dist/transaction/summary.test.js.map +0 -1
  207. package/dist/transaction.test.d.ts +0 -2
  208. package/dist/transaction.test.d.ts.map +0 -1
  209. package/dist/transaction.test.js +0 -122
  210. package/dist/transaction.test.js.map +0 -1
  211. package/dist/types/proposal.test.d.ts +0 -2
  212. package/dist/types/proposal.test.d.ts.map +0 -1
  213. package/dist/types/proposal.test.js +0 -56
  214. package/dist/types/proposal.test.js.map +0 -1
  215. package/dist/utils/digest.test.d.ts +0 -2
  216. package/dist/utils/digest.test.d.ts.map +0 -1
  217. package/dist/utils/digest.test.js +0 -48
  218. package/dist/utils/digest.test.js.map +0 -1
  219. package/dist/utils/ecdsa.test.d.ts +0 -2
  220. package/dist/utils/ecdsa.test.d.ts.map +0 -1
  221. package/dist/utils/ecdsa.test.js +0 -131
  222. package/dist/utils/ecdsa.test.js.map +0 -1
  223. package/dist/utils/encoding.test.d.ts +0 -2
  224. package/dist/utils/encoding.test.d.ts.map +0 -1
  225. package/dist/utils/encoding.test.js +0 -185
  226. package/dist/utils/encoding.test.js.map +0 -1
  227. package/dist/utils/key.test.d.ts +0 -2
  228. package/dist/utils/key.test.d.ts.map +0 -1
  229. package/dist/utils/key.test.js +0 -82
  230. package/dist/utils/key.test.js.map +0 -1
  231. package/dist/utils/signature.test.d.ts +0 -2
  232. package/dist/utils/signature.test.d.ts.map +0 -1
  233. package/dist/utils/signature.test.js +0 -164
  234. package/dist/utils/signature.test.js.map +0 -1
  235. package/dist/utils/word.test.d.ts +0 -2
  236. package/dist/utils/word.test.d.ts.map +0 -1
  237. package/dist/utils/word.test.js +0 -54
  238. package/dist/utils/word.test.js.map +0 -1
  239. package/masm/account_components/auth/guarded_multisig.masm +0 -42
  240. package/src/account/builder.test.ts +0 -238
  241. package/src/account/masm/account-components/auth.ts +0 -46
  242. package/src/account/masm/index.ts +0 -4
  243. package/src/account/masm.ts +0 -4
  244. package/src/account/storage.test.ts +0 -90
  245. package/src/client.test.ts +0 -473
  246. package/src/connectivity.test.ts +0 -67
  247. package/src/inspector.test.ts +0 -542
  248. package/src/lookupAuth.test.ts +0 -185
  249. package/src/multisig/consumeNotesErrors.test.ts +0 -43
  250. package/src/multisig/helpers.test.ts +0 -114
  251. package/src/multisig.test.ts +0 -5008
  252. package/src/proposal/factory.test.ts +0 -40
  253. package/src/proposal/metadata.test.ts +0 -235
  254. package/src/prover/config.test.ts +0 -90
  255. package/src/prover/errors.test.ts +0 -61
  256. package/src/prover/retry.test.ts +0 -38
  257. package/src/prover/workflow.test.ts +0 -145
  258. package/src/raw-client.test.ts +0 -171
  259. package/src/rpc/config.test.ts +0 -45
  260. package/src/rpc/errors.test.ts +0 -69
  261. package/src/rpc/retry.test.ts +0 -144
  262. package/src/signers/ecdsa.test.ts +0 -111
  263. package/src/signers/falcon.test.ts +0 -197
  264. package/src/signers/miden-wallet.ecdsa-recovery.test.ts +0 -201
  265. package/src/signers/miden-wallet.test.ts +0 -206
  266. package/src/signers/para.test.ts +0 -186
  267. package/src/transaction/index.ts +0 -13
  268. package/src/transaction/p2id.test.ts +0 -371
  269. package/src/transaction/rpoRandomCoin.test.ts +0 -64
  270. package/src/transaction/summary.test.ts +0 -32
  271. package/src/transaction.test.ts +0 -142
  272. package/src/types/proposal.test.ts +0 -68
  273. package/src/utils/digest.test.ts +0 -55
  274. package/src/utils/ecdsa.test.ts +0 -164
  275. package/src/utils/encoding.test.ts +0 -233
  276. package/src/utils/key.test.ts +0 -91
  277. package/src/utils/signature.test.ts +0 -210
  278. package/src/utils/word.test.ts +0 -64
@@ -1,425 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { AccountInspector, assertCompleteDetectedConfig } from './inspector.js';
3
- // Mock the Miden SDK
4
- vi.mock('@miden-sdk/miden-sdk', () => {
5
- const createMockWord = (values) => ({
6
- toU64s: () => values,
7
- toHex: () => '0x' + values.map(v => v.toString(16).padStart(16, '0')).join(''),
8
- });
9
- // Faithful to the real SDK's read semantics (verified against the wasm
10
- // glue and miden-protocol): getItem returns undefined for an absent slot;
11
- // getMapItem returns undefined only when the slot is absent or not a map,
12
- // and the EMPTY word for a missing key in an existing map
13
- // (StorageMap::get is unwrap_or_default). Neither throws for "not found".
14
- const createMockStorage = (slots, maps) => ({
15
- getItem: (slotName) => slots.get(slotName),
16
- getMapItem: (slotName, key) => {
17
- const map = maps.get(slotName);
18
- if (!map)
19
- return undefined;
20
- const keyStr = key.toU64s?.()[0]?.toString() ?? '0';
21
- return map.get(keyStr) ?? createMockWord([0n, 0n, 0n, 0n]);
22
- },
23
- });
24
- const createMockVault = (assets) => ({
25
- fungibleAssets: () => assets.map(a => ({
26
- faucetId: () => ({ toString: () => a.faucetId }),
27
- amount: () => a.amount,
28
- })),
29
- });
30
- return {
31
- Account: {
32
- deserialize: vi.fn((bytes) => {
33
- // Return different mocked accounts based on test scenario
34
- // Default: 2-of-3 multisig with GUARDIAN enabled
35
- const slot0 = createMockWord([2n, 3n, 0n, 0n]); // threshold=2, numSigners=3
36
- const signerMap = new Map();
37
- signerMap.set('0', createMockWord([BigInt('0x1111111111111111'), BigInt('0x2222222222222222'), BigInt('0x3333333333333333'), BigInt('0x4444444444444444')]));
38
- signerMap.set('1', createMockWord([BigInt('0x5555555555555555'), BigInt('0x6666666666666666'), BigInt('0x7777777777777777'), BigInt('0x8888888888888888')]));
39
- signerMap.set('2', createMockWord([BigInt('0xaaaaaaaaaaaaaaaa'), BigInt('0xbbbbbbbbbbbbbbbb'), BigInt('0xcccccccccccccccc'), BigInt('0xdddddddddddddddd')]));
40
- const guardianMap = new Map();
41
- guardianMap.set('0', createMockWord([BigInt('0xeeeeeeeeeeeeeeee'), BigInt('0xffffffffffffffff'), BigInt('0x0000000000000001'), BigInt('0x0000000000000002')]));
42
- const slots = new Map();
43
- slots.set('miden::standards::auth::multisig::threshold_config', slot0);
44
- const maps = new Map();
45
- maps.set('miden::standards::auth::multisig::approver_public_keys', signerMap);
46
- maps.set('miden::standards::auth::guardian::pub_key', guardianMap);
47
- return {
48
- storage: () => createMockStorage(slots, maps),
49
- // The contract-version guard checks for the pinned auth procedure.
50
- code: () => ({ hasProcedure: () => true }),
51
- vault: () => createMockVault([
52
- { faucetId: '0xfaucet1', amount: 1000n },
53
- { faucetId: '0xfaucet2', amount: 500n },
54
- ]),
55
- };
56
- }),
57
- },
58
- Word: Object.assign(vi.fn().mockImplementation((arr) => ({
59
- toU64s: () => Array.from(arr),
60
- toHex: () => '0x' + Array.from(arr).map(v => v.toString(16).padStart(16, '0')).join(''),
61
- })), {
62
- fromHex: vi.fn((hex) => ({
63
- toU64s: () => [0n, 0n, 0n, 0n],
64
- toHex: () => hex,
65
- })),
66
- }),
67
- };
68
- });
69
- describe('AccountInspector', () => {
70
- beforeEach(() => {
71
- vi.clearAllMocks();
72
- });
73
- describe('fromBase64', () => {
74
- it('deserializes account from base64 and extracts config', () => {
75
- const base64 = btoa(String.fromCharCode(...new Uint8Array([1, 2, 3])));
76
- const config = AccountInspector.fromBase64(base64);
77
- expect(config.threshold).toBe(2);
78
- expect(config.numSigners).toBe(3);
79
- });
80
- it('extracts the GUARDIAN commitment', () => {
81
- const base64 = btoa(String.fromCharCode(...new Uint8Array([1, 2, 3])));
82
- const config = AccountInspector.fromBase64(base64);
83
- expect(config.guardianCommitment).toMatch(/^0x[a-f0-9]+$/);
84
- });
85
- it('extracts signer commitments', () => {
86
- const base64 = btoa(String.fromCharCode(...new Uint8Array([1, 2, 3])));
87
- const config = AccountInspector.fromBase64(base64);
88
- expect(config.signerCommitments).toHaveLength(3);
89
- config.signerCommitments.forEach(commitment => {
90
- expect(commitment).toMatch(/^0x[a-f0-9]+$/);
91
- });
92
- });
93
- it('extracts vault balances', () => {
94
- const base64 = btoa(String.fromCharCode(...new Uint8Array([1, 2, 3])));
95
- const config = AccountInspector.fromBase64(base64);
96
- expect(config.vaultBalances).toHaveLength(2);
97
- expect(config.vaultBalances[0]).toEqual({ faucetId: '0xfaucet1', amount: 1000n });
98
- expect(config.vaultBalances[1]).toEqual({ faucetId: '0xfaucet2', amount: 500n });
99
- });
100
- });
101
- describe('fromAccount', () => {
102
- it('extracts threshold from slot 0', async () => {
103
- const { Account } = await import('@miden-sdk/miden-sdk');
104
- const account = Account.deserialize(new Uint8Array([1, 2, 3]));
105
- const config = AccountInspector.fromAccount(account);
106
- expect(config.threshold).toBe(2);
107
- });
108
- it('extracts numSigners from slot 0', async () => {
109
- const { Account } = await import('@miden-sdk/miden-sdk');
110
- const account = Account.deserialize(new Uint8Array([1, 2, 3]));
111
- const config = AccountInspector.fromAccount(account);
112
- expect(config.numSigners).toBe(3);
113
- });
114
- it('rejects accounts built from a different contract version', async () => {
115
- const { Account } = await import('@miden-sdk/miden-sdk');
116
- const account = Account.deserialize(new Uint8Array([1, 2, 3]));
117
- // Same account shape, but its code lacks the pinned auth procedure —
118
- // root-keyed reads against it would silently miss its stored overrides.
119
- const foreign = {
120
- ...account,
121
- code: () => ({ hasProcedure: () => false }),
122
- };
123
- expect(() => AccountInspector.fromAccount(foreign)).toThrow(/unsupported contract version/);
124
- });
125
- });
126
- });
127
- describe('AccountInspector edge cases', () => {
128
- beforeEach(() => {
129
- vi.clearAllMocks();
130
- });
131
- it('returns a null GUARDIAN commitment when the guardian pub_key slot is absent', async () => {
132
- const { Account } = await import('@miden-sdk/miden-sdk');
133
- // Override mock for this test: no guardian pub_key entry present.
134
- vi.mocked(Account.deserialize).mockReturnValueOnce({
135
- code: () => ({ hasProcedure: () => true }),
136
- storage: () => ({
137
- getItem: (slotName) => {
138
- if (slotName === 'miden::standards::auth::multisig::threshold_config')
139
- return { toU64s: () => [1n, 1n, 0n, 0n] };
140
- return { toU64s: () => [0n, 0n, 0n, 0n] };
141
- },
142
- getMapItem: (slotName, key) => {
143
- if (slotName === 'miden::standards::auth::multisig::approver_public_keys' && key.toU64s?.()[0] === 0n) {
144
- return {
145
- toHex: () => '0x' + 'a'.repeat(64),
146
- toU64s: () => [1n, 2n, 3n, 4n],
147
- };
148
- }
149
- throw new Error('Not found');
150
- },
151
- }),
152
- vault: () => ({
153
- fungibleAssets: () => [],
154
- }),
155
- });
156
- const account = Account.deserialize(new Uint8Array([1, 2, 3]));
157
- const config = AccountInspector.fromAccount(account);
158
- expect(config.guardianCommitment).toBeNull();
159
- });
160
- it('handles account with empty vault', async () => {
161
- const { Account } = await import('@miden-sdk/miden-sdk');
162
- vi.mocked(Account.deserialize).mockReturnValueOnce({
163
- code: () => ({ hasProcedure: () => true }),
164
- storage: () => ({
165
- getItem: () => ({ toU64s: () => [1n, 1n, 0n, 0n] }),
166
- getMapItem: () => {
167
- throw new Error('Not found');
168
- },
169
- }),
170
- vault: () => ({
171
- fungibleAssets: () => [],
172
- }),
173
- });
174
- const account = Account.deserialize(new Uint8Array([1, 2, 3]));
175
- const config = AccountInspector.fromAccount(account);
176
- expect(config.vaultBalances).toEqual([]);
177
- });
178
- it('handles missing signer map entries gracefully', async () => {
179
- const { Account } = await import('@miden-sdk/miden-sdk');
180
- vi.mocked(Account.deserialize).mockReturnValueOnce({
181
- code: () => ({ hasProcedure: () => true }),
182
- storage: () => ({
183
- getItem: (slotName) => {
184
- if (slotName === 'miden::standards::auth::multisig::threshold_config')
185
- return { toU64s: () => [2n, 5n, 0n, 0n] }; // threshold=2, numSigners=5
186
- return { toU64s: () => [0n, 0n, 0n, 0n] };
187
- },
188
- getMapItem: () => {
189
- throw new Error('Map entry not found');
190
- },
191
- }),
192
- vault: () => ({
193
- fungibleAssets: () => [],
194
- }),
195
- });
196
- const account = Account.deserialize(new Uint8Array([1, 2, 3]));
197
- const config = AccountInspector.fromAccount(account);
198
- // Should gracefully handle missing entries
199
- expect(config.numSigners).toBe(5);
200
- expect(config.signerCommitments).toEqual([]); // All entries missing
201
- });
202
- it('handles vault access error gracefully', async () => {
203
- const { Account } = await import('@miden-sdk/miden-sdk');
204
- vi.mocked(Account.deserialize).mockReturnValueOnce({
205
- code: () => ({ hasProcedure: () => true }),
206
- storage: () => ({
207
- getItem: () => ({ toU64s: () => [1n, 1n, 0n, 0n] }),
208
- getMapItem: () => {
209
- throw new Error('Not found');
210
- },
211
- }),
212
- vault: () => {
213
- throw new Error('Vault access failed');
214
- },
215
- });
216
- const account = Account.deserialize(new Uint8Array([1, 2, 3]));
217
- const config = AccountInspector.fromAccount(account);
218
- expect(config.vaultBalances).toEqual([]);
219
- });
220
- });
221
- describe('AccountInspector.getSignerPublicKeyCommitments', () => {
222
- beforeEach(() => {
223
- vi.clearAllMocks();
224
- });
225
- it('returns all signer commitments ordered by signer index', async () => {
226
- const { Account } = await import('@miden-sdk/miden-sdk');
227
- const account = Account.deserialize(new Uint8Array([1, 2, 3]));
228
- const commitments = AccountInspector.getSignerPublicKeyCommitments(account);
229
- expect(commitments).toEqual([
230
- '0x1111111111111111222222222222222233333333333333334444444444444444',
231
- '0x5555555555555555666666666666666677777777777777778888888888888888',
232
- '0xaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbccccccccccccccccdddddddddddddddd',
233
- ]);
234
- });
235
- it('rejects accounts built from a different contract version', async () => {
236
- const { Account } = await import('@miden-sdk/miden-sdk');
237
- const account = Account.deserialize(new Uint8Array([1, 2, 3]));
238
- const foreign = {
239
- ...account,
240
- code: () => ({ hasProcedure: () => false }),
241
- };
242
- expect(() => AccountInspector.getSignerPublicKeyCommitments(foreign)).toThrow(/unsupported contract version/);
243
- });
244
- it('throws when a signer map entry is the empty word instead of truncating', async () => {
245
- const { Account } = await import('@miden-sdk/miden-sdk');
246
- // Real SDK semantics: entries 0 and 1 exist, entries 2..4 come back as
247
- // the empty word (StorageMap::get is unwrap_or_default) — NOT undefined
248
- // and NOT a throw.
249
- const entries = new Map([
250
- ['0', { toU64s: () => [1n, 2n, 3n, 4n], toHex: () => '0x' + 'a'.repeat(64) }],
251
- ['1', { toU64s: () => [5n, 6n, 7n, 8n], toHex: () => '0x' + 'b'.repeat(64) }],
252
- ]);
253
- vi.mocked(Account.deserialize).mockReturnValueOnce({
254
- code: () => ({ hasProcedure: () => true }),
255
- storage: () => ({
256
- getItem: (slotName) => {
257
- if (slotName === 'miden::standards::auth::multisig::threshold_config')
258
- return { toU64s: () => [2n, 5n, 0n, 0n] };
259
- return undefined;
260
- },
261
- getMapItem: (slotName, key) => {
262
- if (slotName !== 'miden::standards::auth::multisig::approver_public_keys')
263
- return undefined;
264
- const keyStr = key.toU64s?.()[0]?.toString() ?? '0';
265
- return entries.get(keyStr) ?? { toU64s: () => [0n, 0n, 0n, 0n] };
266
- },
267
- }),
268
- });
269
- const account = Account.deserialize(new Uint8Array([1, 2, 3]));
270
- expect(() => AccountInspector.getSignerPublicKeyCommitments(account)).toThrow(/missing signer public key at index 2/);
271
- });
272
- it('throws when the signer map slot itself is absent', async () => {
273
- const { Account } = await import('@miden-sdk/miden-sdk');
274
- vi.mocked(Account.deserialize).mockReturnValueOnce({
275
- code: () => ({ hasProcedure: () => true }),
276
- storage: () => ({
277
- getItem: (slotName) => {
278
- if (slotName === 'miden::standards::auth::multisig::threshold_config')
279
- return { toU64s: () => [2n, 3n, 0n, 0n] };
280
- return undefined;
281
- },
282
- getMapItem: () => undefined,
283
- }),
284
- });
285
- const account = Account.deserialize(new Uint8Array([1, 2, 3]));
286
- expect(() => AccountInspector.getSignerPublicKeyCommitments(account)).toThrow(/missing signer public key at index 0/);
287
- });
288
- it('throws when the threshold config slot is absent', async () => {
289
- const { Account } = await import('@miden-sdk/miden-sdk');
290
- vi.mocked(Account.deserialize).mockReturnValueOnce({
291
- code: () => ({ hasProcedure: () => true }),
292
- storage: () => ({
293
- getItem: () => undefined,
294
- getMapItem: () => undefined,
295
- }),
296
- });
297
- const account = Account.deserialize(new Uint8Array([1, 2, 3]));
298
- expect(() => AccountInspector.getSignerPublicKeyCommitments(account)).toThrow(/not a guarded-multisig account/);
299
- });
300
- it('throws when the threshold config reports zero signers', async () => {
301
- const { Account } = await import('@miden-sdk/miden-sdk');
302
- vi.mocked(Account.deserialize).mockReturnValueOnce({
303
- code: () => ({ hasProcedure: () => true }),
304
- storage: () => ({
305
- getItem: () => ({ toU64s: () => [0n, 0n, 0n, 0n] }),
306
- getMapItem: () => undefined,
307
- }),
308
- });
309
- const account = Account.deserialize(new Uint8Array([1, 2, 3]));
310
- expect(() => AccountInspector.getSignerPublicKeyCommitments(account)).toThrow(/zero signers/);
311
- });
312
- // 2n ** 53n is the smallest count whose Number() conversion is no longer a
313
- // safe integer (i++ would stop advancing without the ceiling guard).
314
- it.each([4294967295n, 2n ** 53n])('throws on an absurd signer count (%s) instead of looping', async (count) => {
315
- const { Account } = await import('@miden-sdk/miden-sdk');
316
- vi.mocked(Account.deserialize).mockReturnValueOnce({
317
- code: () => ({ hasProcedure: () => true }),
318
- storage: () => ({
319
- getItem: () => ({ toU64s: () => [2n, count, 0n, 0n] }),
320
- getMapItem: () => ({ toU64s: () => [1n, 2n, 3n, 4n], toHex: () => '0x' + 'a'.repeat(64) }),
321
- }),
322
- });
323
- const account = Account.deserialize(new Uint8Array([1, 2, 3]));
324
- expect(() => AccountInspector.getSignerPublicKeyCommitments(account)).toThrow(/sanity limit/);
325
- });
326
- it('surfaces a descriptive error for an account from a different SDK copy', async () => {
327
- const { Account } = await import('@miden-sdk/miden-sdk');
328
- // wasm-bindgen's _assertClass rejects Word instances from another
329
- // bundled SDK copy with this exact message.
330
- vi.mocked(Account.deserialize).mockReturnValueOnce({
331
- code: () => ({ hasProcedure: () => true }),
332
- storage: () => ({
333
- getItem: (slotName) => {
334
- if (slotName === 'miden::standards::auth::multisig::threshold_config')
335
- return { toU64s: () => [1n, 1n, 0n, 0n] };
336
- return undefined;
337
- },
338
- getMapItem: () => {
339
- throw new Error('expected instance of Word');
340
- },
341
- }),
342
- });
343
- const account = Account.deserialize(new Uint8Array([1, 2, 3]));
344
- expect(() => AccountInspector.getSignerPublicKeyCommitments(account)).toThrow(/different copy of @miden-sdk\/miden-sdk/);
345
- });
346
- });
347
- describe('AccountInspector.getGuardianPublicKeyCommitment', () => {
348
- beforeEach(() => {
349
- vi.clearAllMocks();
350
- });
351
- it('returns the guardian commitment', async () => {
352
- const { Account } = await import('@miden-sdk/miden-sdk');
353
- const account = Account.deserialize(new Uint8Array([1, 2, 3]));
354
- const commitment = AccountInspector.getGuardianPublicKeyCommitment(account);
355
- expect(commitment).toBe('0xeeeeeeeeeeeeeeeeffffffffffffffff00000000000000010000000000000002');
356
- });
357
- it('rejects accounts built from a different contract version', async () => {
358
- const { Account } = await import('@miden-sdk/miden-sdk');
359
- const account = Account.deserialize(new Uint8Array([1, 2, 3]));
360
- const foreign = {
361
- ...account,
362
- code: () => ({ hasProcedure: () => false }),
363
- };
364
- expect(() => AccountInspector.getGuardianPublicKeyCommitment(foreign)).toThrow(/unsupported contract version/);
365
- });
366
- it('throws when the guardian key entry is the empty word', async () => {
367
- const { Account } = await import('@miden-sdk/miden-sdk');
368
- vi.mocked(Account.deserialize).mockReturnValueOnce({
369
- code: () => ({ hasProcedure: () => true }),
370
- storage: () => ({
371
- getItem: () => ({ toU64s: () => [1n, 1n, 0n, 0n] }),
372
- getMapItem: () => ({ toU64s: () => [0n, 0n, 0n, 0n] }),
373
- }),
374
- });
375
- const account = Account.deserialize(new Uint8Array([1, 2, 3]));
376
- expect(() => AccountInspector.getGuardianPublicKeyCommitment(account)).toThrow(/inconsistent account state/);
377
- });
378
- it('propagates genuine storage read failures', async () => {
379
- const { Account } = await import('@miden-sdk/miden-sdk');
380
- vi.mocked(Account.deserialize).mockReturnValueOnce({
381
- code: () => ({ hasProcedure: () => true }),
382
- storage: () => ({
383
- getItem: () => ({ toU64s: () => [1n, 1n, 0n, 0n] }),
384
- getMapItem: () => {
385
- throw new Error('storage backend exploded');
386
- },
387
- }),
388
- });
389
- const account = Account.deserialize(new Uint8Array([1, 2, 3]));
390
- expect(() => AccountInspector.getGuardianPublicKeyCommitment(account)).toThrow('storage backend exploded');
391
- });
392
- });
393
- describe('assertCompleteDetectedConfig', () => {
394
- const complete = {
395
- threshold: 2,
396
- numSigners: 2,
397
- signerCommitments: ['0x' + 'a'.repeat(64), '0x' + 'b'.repeat(64)],
398
- guardianCommitment: '0x' + 'c'.repeat(64),
399
- vaultBalances: [],
400
- procedureThresholds: new Map(),
401
- };
402
- it('accepts a complete config', () => {
403
- expect(() => assertCompleteDetectedConfig(complete)).not.toThrow();
404
- });
405
- it('rejects a signer set shorter than the reported count', () => {
406
- expect(() => assertCompleteDetectedConfig({
407
- ...complete,
408
- numSigners: 3,
409
- })).toThrow(/incomplete signer set: storage reports 3 signers, read 2/);
410
- });
411
- it('rejects a zero signer count', () => {
412
- expect(() => assertCompleteDetectedConfig({
413
- ...complete,
414
- numSigners: 0,
415
- signerCommitments: [],
416
- })).toThrow(/incomplete signer set/);
417
- });
418
- it('rejects a missing guardian commitment', () => {
419
- expect(() => assertCompleteDetectedConfig({
420
- ...complete,
421
- guardianCommitment: null,
422
- })).toThrow(/missing guardian commitment/);
423
- });
424
- });
425
- //# sourceMappingURL=inspector.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inspector.test.js","sourceRoot":"","sources":["../src/inspector.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=lookupAuth.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lookupAuth.test.d.ts","sourceRoot":"","sources":["../src/lookupAuth.test.ts"],"names":[],"mappings":""}
@@ -1,138 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- const hashCalls = [];
3
- vi.mock('@miden-sdk/miden-sdk', () => {
4
- const Felt = vi.fn().mockImplementation((value) => ({
5
- __felt: true,
6
- value,
7
- }));
8
- const FeltArray = vi.fn().mockImplementation((felts) => felts);
9
- const makeWord = (felts, hex = '0xMOCKED') => ({
10
- __word: true,
11
- felts,
12
- toFelts: () => felts,
13
- toHex: () => hex,
14
- });
15
- const Word = {
16
- fromHex: vi.fn().mockImplementation((hex) => {
17
- // Deterministic four-felt decomposition: split hex into 4 8-byte pieces.
18
- // The values are not real Word semantics, but they let us assert the
19
- // implementation passes them through in order.
20
- const stripped = hex.startsWith('0x') ? hex.slice(2) : hex;
21
- const padded = stripped.padStart(64, '0');
22
- const felts = [];
23
- for (let i = 0; i < 4; i += 1) {
24
- const piece = padded.slice(i * 16, (i + 1) * 16);
25
- felts.push({ __felt: true, value: BigInt('0x' + piece) });
26
- }
27
- return makeWord(felts, hex);
28
- }),
29
- };
30
- const Rpo256 = {
31
- hashElements: vi.fn().mockImplementation((felts) => {
32
- hashCalls.push({ input: [...felts] });
33
- // Synthesize a fake digest: 4 felts derived from the input length and
34
- // first felt's value, so each call's output is distinguishable.
35
- const seed = felts.length === 0 ? 0n : felts[0].value;
36
- return makeWord([
37
- { __felt: true, value: seed ^ BigInt(felts.length) },
38
- { __felt: true, value: seed + 1n },
39
- { __felt: true, value: seed + 2n },
40
- { __felt: true, value: seed + 3n },
41
- ], '0xfakehash');
42
- }),
43
- };
44
- return { Felt, FeltArray, Rpo256, Word };
45
- });
46
- const DOMAIN_TAG_BYTES = new TextEncoder().encode('guardian.lookup.v1');
47
- function bytesToExpectedFelts(bytes) {
48
- const out = [];
49
- for (let offset = 0; offset < bytes.length; offset += 8) {
50
- let value = 0n;
51
- for (let i = 0; i < 8; i += 1) {
52
- const byte = offset + i < bytes.length ? bytes[offset + i] : 0;
53
- value |= BigInt(byte) << BigInt(8 * i);
54
- }
55
- out.push(value);
56
- }
57
- return out;
58
- }
59
- let lookupAuthDigest;
60
- let _resetLookupDomainTagCacheForTesting;
61
- beforeEach(async () => {
62
- hashCalls.length = 0;
63
- // Re-import to pick up a fresh cached domain tag per test, in addition to
64
- // the explicit reset, so test ordering does not change behavior.
65
- const mod = await import('./lookupAuth.js');
66
- lookupAuthDigest = mod.lookupAuthDigest;
67
- _resetLookupDomainTagCacheForTesting = mod._resetLookupDomainTagCacheForTesting;
68
- _resetLookupDomainTagCacheForTesting();
69
- });
70
- describe('lookupAuthDigest', () => {
71
- it('hashes the domain-tag bytes via the same 8-byte LE chunking as Rust', () => {
72
- const keyCommitmentHex = '0x' + 'aa'.repeat(32);
73
- lookupAuthDigest(1_700_000_000_000, keyCommitmentHex);
74
- // First Rpo256.hashElements call must be the domain-tag computation
75
- // (3 felts for "guardian.lookup.v1" — 18 bytes → ceil(18/8) = 3 chunks).
76
- expect(hashCalls.length).toBeGreaterThanOrEqual(2);
77
- const tagCall = hashCalls[0];
78
- const expected = bytesToExpectedFelts(DOMAIN_TAG_BYTES);
79
- expect(tagCall.input).toHaveLength(expected.length);
80
- expect(tagCall.input.length).toBe(3);
81
- for (let i = 0; i < expected.length; i += 1) {
82
- expect(tagCall.input[i].value).toBe(expected[i]);
83
- }
84
- });
85
- it('caches the domain-tag computation across calls', () => {
86
- const keyCommitmentHex = '0x' + 'bb'.repeat(32);
87
- lookupAuthDigest(1_700_000_000_000, keyCommitmentHex);
88
- const callsAfterFirst = hashCalls.length;
89
- lookupAuthDigest(1_700_000_000_001, keyCommitmentHex);
90
- const callsAfterSecond = hashCalls.length;
91
- // Second invocation should perform exactly one Rpo256.hashElements call
92
- // (the message hash); the domain-tag hash is cached.
93
- expect(callsAfterSecond - callsAfterFirst).toBe(1);
94
- });
95
- it('passes 9 felts in [tag, timestamp, key_commitment] order to the message hash', () => {
96
- const keyCommitmentHex = '0x' + '01'.repeat(32);
97
- const timestamp = 1700000000000n;
98
- lookupAuthDigest(timestamp, keyCommitmentHex);
99
- const messageCall = hashCalls[hashCalls.length - 1];
100
- expect(messageCall.input).toHaveLength(9);
101
- // Felt 4 is the timestamp, reinterpreted as u64 (no change for positive).
102
- expect(messageCall.input[4].value).toBe(timestamp);
103
- // Felts 5..8 are the key-commitment felts, derived deterministically by
104
- // the mocked Word.fromHex from the hex representation.
105
- const expectedKcWord = '01'.repeat(32);
106
- for (let i = 0; i < 4; i += 1) {
107
- const piece = expectedKcWord.slice(i * 16, (i + 1) * 16);
108
- expect(messageCall.input[5 + i].value).toBe(BigInt('0x' + piece));
109
- }
110
- });
111
- it('reinterprets a negative timestamp via two-complement u64 cast', () => {
112
- const keyCommitmentHex = '0x' + 'cc'.repeat(32);
113
- lookupAuthDigest(-1, keyCommitmentHex);
114
- const messageCall = hashCalls[hashCalls.length - 1];
115
- // -1 casts to u64 0xFFFFFFFFFFFFFFFF, then reduces mod the Goldilocks prime
116
- // (matching Rust `felt_from_u64_reduced`): 0xFFFFFFFFFFFFFFFF - (2^64 - 2^32 + 1) = 0xFFFFFFFE.
117
- expect(messageCall.input[4].value).toBe(0xfffffffen);
118
- });
119
- it('produces distinct digest inputs for distinct commitments', () => {
120
- lookupAuthDigest(1_700_000_000_000, '0x' + '01'.repeat(32));
121
- lookupAuthDigest(1_700_000_000_000, '0x' + '02'.repeat(32));
122
- // Call 0 is the cached domain-tag hash. Calls 1 and 2 are the two message
123
- // hashes; the second call hits the domain-tag cache so it does not produce
124
- // an extra hash call.
125
- const messageCallA = hashCalls[1];
126
- const messageCallB = hashCalls[2];
127
- expect(messageCallA.input[5].value).not.toBe(messageCallB.input[5].value);
128
- });
129
- it('produces distinct digest inputs for distinct timestamps', () => {
130
- const keyCommitmentHex = '0x' + '01'.repeat(32);
131
- lookupAuthDigest(1_700_000_000_000, keyCommitmentHex);
132
- lookupAuthDigest(1_700_000_000_001, keyCommitmentHex);
133
- const messageCallA = hashCalls[1];
134
- const messageCallB = hashCalls[2];
135
- expect(messageCallA.input[4].value).not.toBe(messageCallB.input[4].value);
136
- });
137
- });
138
- //# sourceMappingURL=lookupAuth.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lookupAuth.test.js","sourceRoot":"","sources":["../src/lookupAuth.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=consumeNotesErrors.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"consumeNotesErrors.test.d.ts","sourceRoot":"","sources":["../../src/multisig/consumeNotesErrors.test.ts"],"names":[],"mappings":""}