@openzeppelin/miden-multisig-client 0.13.0 → 0.13.1

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 (49) hide show
  1. package/dist/account/builder.test.d.ts +2 -0
  2. package/dist/account/builder.test.d.ts.map +1 -0
  3. package/dist/account/builder.test.js +39 -0
  4. package/dist/account/builder.test.js.map +1 -0
  5. package/dist/multisig/proposal/execution.d.ts +2 -1
  6. package/dist/multisig/proposal/execution.d.ts.map +1 -1
  7. package/dist/multisig/proposal/execution.js +11 -0
  8. package/dist/multisig/proposal/execution.js.map +1 -1
  9. package/dist/multisig.d.ts +2 -1
  10. package/dist/multisig.d.ts.map +1 -1
  11. package/dist/multisig.js +20 -1
  12. package/dist/multisig.js.map +1 -1
  13. package/dist/proposal/exported.d.ts +12 -0
  14. package/dist/proposal/exported.d.ts.map +1 -0
  15. package/dist/proposal/exported.js +88 -0
  16. package/dist/proposal/exported.js.map +1 -0
  17. package/dist/proposal/metadata.d.ts +15 -0
  18. package/dist/proposal/metadata.d.ts.map +1 -0
  19. package/dist/proposal/metadata.js +212 -0
  20. package/dist/proposal/metadata.js.map +1 -0
  21. package/dist/signer.test.js +32 -26
  22. package/dist/signer.test.js.map +1 -1
  23. package/dist/transaction/p2id.interop.test.d.ts +2 -0
  24. package/dist/transaction/p2id.interop.test.d.ts.map +1 -0
  25. package/dist/transaction/p2id.interop.test.js +36 -0
  26. package/dist/transaction/p2id.interop.test.js.map +1 -0
  27. package/dist/transaction/p2id.test.d.ts +2 -0
  28. package/dist/transaction/p2id.test.d.ts.map +1 -0
  29. package/dist/transaction/p2id.test.js +138 -0
  30. package/dist/transaction/p2id.test.js.map +1 -0
  31. package/dist/transaction/rpoRandomCoin.d.ts +7 -0
  32. package/dist/transaction/rpoRandomCoin.d.ts.map +1 -0
  33. package/dist/transaction/rpoRandomCoin.js +17 -0
  34. package/dist/transaction/rpoRandomCoin.js.map +1 -0
  35. package/dist/transaction/rpoRandomCoin.test.d.ts +2 -0
  36. package/dist/transaction/rpoRandomCoin.test.d.ts.map +1 -0
  37. package/dist/transaction/rpoRandomCoin.test.js +52 -0
  38. package/dist/transaction/rpoRandomCoin.test.js.map +1 -0
  39. package/dist/utils/state-validation.d.ts +5 -0
  40. package/dist/utils/state-validation.d.ts.map +1 -0
  41. package/dist/utils/state-validation.js +30 -0
  42. package/dist/utils/state-validation.js.map +1 -0
  43. package/dist/utils/validation.d.ts +6 -0
  44. package/dist/utils/validation.d.ts.map +1 -0
  45. package/dist/utils/validation.js +52 -0
  46. package/dist/utils/validation.js.map +1 -0
  47. package/package.json +2 -2
  48. package/src/multisig/proposal/execution.ts +44 -0
  49. package/src/multisig.ts +24 -1
@@ -0,0 +1,212 @@
1
+ import { normalizeHexWord } from '../utils/encoding.js';
2
+ export class ProposalMetadataCodec {
3
+ static fromPsm(psm, context) {
4
+ if (!psm?.proposalType) {
5
+ throw new Error(`${context}: missing proposalType`);
6
+ }
7
+ const base = {
8
+ description: typeof psm.description === 'string' ? psm.description : '',
9
+ saltHex: this.optionalWordHex(psm.salt, 'salt', context),
10
+ };
11
+ switch (psm.proposalType) {
12
+ case 'add_signer':
13
+ case 'remove_signer':
14
+ case 'change_threshold':
15
+ return this.validate({
16
+ ...base,
17
+ proposalType: psm.proposalType,
18
+ targetThreshold: this.positiveInteger(psm.targetThreshold, 'targetThreshold', context),
19
+ targetSignerCommitments: this.wordHexList(psm.signerCommitments, 'targetSignerCommitments', context, false),
20
+ }, context);
21
+ case 'switch_psm':
22
+ return this.validate({
23
+ ...base,
24
+ proposalType: 'switch_psm',
25
+ newPsmPubkey: this.wordHex(psm.newPsmPubkey, 'newPsmPubkey', context),
26
+ newPsmEndpoint: this.requiredString(psm.newPsmEndpoint, 'newPsmEndpoint', context),
27
+ targetThreshold: psm.targetThreshold === undefined
28
+ ? undefined
29
+ : this.positiveInteger(psm.targetThreshold, 'targetThreshold', context),
30
+ targetSignerCommitments: psm.signerCommitments === undefined
31
+ ? undefined
32
+ : this.wordHexList(psm.signerCommitments, 'targetSignerCommitments', context, false),
33
+ }, context);
34
+ case 'consume_notes':
35
+ return this.validate({
36
+ ...base,
37
+ proposalType: 'consume_notes',
38
+ noteIds: this.wordHexList(psm.noteIds, 'noteIds', context, false),
39
+ }, context);
40
+ case 'p2id':
41
+ return this.validate({
42
+ ...base,
43
+ proposalType: 'p2id',
44
+ recipientId: this.requiredString(psm.recipientId, 'recipientId', context),
45
+ faucetId: this.requiredString(psm.faucetId, 'faucetId', context),
46
+ amount: this.positiveAmount(psm.amount, 'amount', context),
47
+ }, context);
48
+ default:
49
+ throw new Error(`${context}: unsupported proposal type ${String(psm.proposalType)}`);
50
+ }
51
+ }
52
+ static toPsm(metadata) {
53
+ const validated = this.validate(metadata, 'Invalid proposal metadata');
54
+ const base = {
55
+ proposalType: validated.proposalType,
56
+ description: validated.description,
57
+ salt: validated.saltHex,
58
+ };
59
+ switch (validated.proposalType) {
60
+ case 'add_signer':
61
+ case 'remove_signer':
62
+ case 'change_threshold':
63
+ return {
64
+ ...base,
65
+ targetThreshold: validated.targetThreshold,
66
+ signerCommitments: validated.targetSignerCommitments,
67
+ };
68
+ case 'switch_psm':
69
+ return {
70
+ ...base,
71
+ targetThreshold: validated.targetThreshold,
72
+ signerCommitments: validated.targetSignerCommitments,
73
+ newPsmPubkey: validated.newPsmPubkey,
74
+ newPsmEndpoint: validated.newPsmEndpoint,
75
+ };
76
+ case 'consume_notes':
77
+ return {
78
+ ...base,
79
+ noteIds: validated.noteIds,
80
+ };
81
+ case 'p2id':
82
+ return {
83
+ ...base,
84
+ recipientId: validated.recipientId,
85
+ faucetId: validated.faucetId,
86
+ amount: validated.amount,
87
+ };
88
+ case 'unknown':
89
+ return base;
90
+ }
91
+ }
92
+ static validate(metadata, context) {
93
+ const description = this.description(metadata.description, context);
94
+ const saltHex = this.optionalWordHex(metadata.saltHex, 'saltHex', context);
95
+ switch (metadata.proposalType) {
96
+ case 'add_signer':
97
+ case 'remove_signer':
98
+ case 'change_threshold':
99
+ return {
100
+ proposalType: metadata.proposalType,
101
+ description,
102
+ saltHex,
103
+ targetThreshold: this.positiveInteger(metadata.targetThreshold, 'targetThreshold', context),
104
+ targetSignerCommitments: this.wordHexList(metadata.targetSignerCommitments, 'targetSignerCommitments', context, false),
105
+ };
106
+ case 'switch_psm':
107
+ return {
108
+ proposalType: 'switch_psm',
109
+ description,
110
+ saltHex,
111
+ newPsmPubkey: this.wordHex(metadata.newPsmPubkey, 'newPsmPubkey', context),
112
+ newPsmEndpoint: this.requiredString(metadata.newPsmEndpoint, 'newPsmEndpoint', context),
113
+ targetThreshold: metadata.targetThreshold === undefined
114
+ ? undefined
115
+ : this.positiveInteger(metadata.targetThreshold, 'targetThreshold', context),
116
+ targetSignerCommitments: metadata.targetSignerCommitments === undefined
117
+ ? undefined
118
+ : this.wordHexList(metadata.targetSignerCommitments, 'targetSignerCommitments', context, false),
119
+ };
120
+ case 'consume_notes':
121
+ return {
122
+ proposalType: 'consume_notes',
123
+ description,
124
+ saltHex,
125
+ noteIds: this.wordHexList(metadata.noteIds, 'noteIds', context, false),
126
+ };
127
+ case 'p2id':
128
+ return {
129
+ proposalType: 'p2id',
130
+ description,
131
+ saltHex,
132
+ recipientId: this.requiredString(metadata.recipientId, 'recipientId', context),
133
+ faucetId: this.requiredString(metadata.faucetId, 'faucetId', context),
134
+ amount: this.positiveAmount(metadata.amount, 'amount', context),
135
+ };
136
+ case 'unknown':
137
+ return {
138
+ proposalType: 'unknown',
139
+ description,
140
+ saltHex,
141
+ };
142
+ }
143
+ }
144
+ static description(value, context) {
145
+ if (typeof value !== 'string') {
146
+ throw new Error(`${context}: description must be a string`);
147
+ }
148
+ return value;
149
+ }
150
+ static requiredString(value, field, context) {
151
+ if (typeof value !== 'string' || value.trim().length === 0) {
152
+ throw new Error(`${context}: missing ${field}`);
153
+ }
154
+ return value;
155
+ }
156
+ static positiveInteger(value, field, context) {
157
+ if (!Number.isSafeInteger(value) || value < 1) {
158
+ throw new Error(`${context}: ${field} must be a positive integer`);
159
+ }
160
+ return value;
161
+ }
162
+ static positiveAmount(value, field, context) {
163
+ if (typeof value !== 'string' || value.length === 0) {
164
+ throw new Error(`${context}: missing ${field}`);
165
+ }
166
+ try {
167
+ if (BigInt(value) < 1n) {
168
+ throw new Error(`${context}: ${field} must be greater than 0`);
169
+ }
170
+ }
171
+ catch {
172
+ throw new Error(`${context}: ${field} must be a valid integer string`);
173
+ }
174
+ return value;
175
+ }
176
+ static optionalWordHex(value, field, context) {
177
+ if (value === undefined) {
178
+ return undefined;
179
+ }
180
+ return this.wordHex(value, field, context);
181
+ }
182
+ static wordHex(value, field, context) {
183
+ if (typeof value !== 'string') {
184
+ throw new Error(`${context}: ${field} must be a 32-byte hex string`);
185
+ }
186
+ const hex = value.startsWith('0x') || value.startsWith('0X') ? value.slice(2) : value;
187
+ if (hex.length !== 64 || !/^[0-9a-fA-F]+$/.test(hex)) {
188
+ throw new Error(`${context}: ${field} must be a 32-byte hex string`);
189
+ }
190
+ return normalizeHexWord(value);
191
+ }
192
+ static wordHexList(value, field, context, allowEmpty) {
193
+ if (!Array.isArray(value)) {
194
+ throw new Error(`${context}: ${field} must be an array`);
195
+ }
196
+ if (!allowEmpty && value.length === 0) {
197
+ throw new Error(`${context}: ${field} must not be empty`);
198
+ }
199
+ const seen = new Set();
200
+ const items = [];
201
+ for (const item of value) {
202
+ const normalized = this.wordHex(item, field, context);
203
+ if (seen.has(normalized)) {
204
+ throw new Error(`${context}: duplicate ${field} entry ${normalized}`);
205
+ }
206
+ seen.add(normalized);
207
+ items.push(normalized);
208
+ }
209
+ return items;
210
+ }
211
+ }
212
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/proposal/metadata.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { describe, it, expect, vi, beforeEach } from 'vitest';
2
2
  import { FalconSigner } from './signer.js';
3
+ import { RequestAuthPayload } from '@openzeppelin/psm-client';
3
4
  // Mock the Miden SDK
4
5
  vi.mock('@miden-sdk/miden-sdk', () => {
5
6
  const mockSignature = {
@@ -36,6 +37,7 @@ vi.mock('@miden-sdk/miden-sdk', () => {
36
37
  Rpo256: {
37
38
  hashElements: vi.fn().mockReturnValue({
38
39
  toHex: () => '0x' + 'b'.repeat(64),
40
+ toFelts: () => [1, 2, 3, 4],
39
41
  }),
40
42
  },
41
43
  };
@@ -61,55 +63,59 @@ describe('FalconSigner', () => {
61
63
  expect(mockSecretKey.publicKey).toHaveBeenCalled();
62
64
  });
63
65
  });
64
- describe('signAccountIdWithTimestamp', () => {
65
- it('handles account ID with 0x prefix', async () => {
66
- const signature = await signer.signAccountIdWithTimestamp('0x' + 'a'.repeat(30), 1700000000);
66
+ describe('signRequest', () => {
67
+ it('handles account ID with 0x prefix', () => {
68
+ const payload = RequestAuthPayload.fromRequest({ op: 'get_state' });
69
+ const signature = signer.signRequest('0x' + 'a'.repeat(30), 1700000000, payload);
67
70
  expect(signature).toMatch(/^0x[a-f0-9]+$/);
68
71
  });
69
- it('handles account ID without 0x prefix', async () => {
70
- const signature = await signer.signAccountIdWithTimestamp('a'.repeat(30), 1700000000);
72
+ it('handles account ID without 0x prefix', () => {
73
+ const payload = RequestAuthPayload.fromRequest({ op: 'get_state' });
74
+ const signature = signer.signRequest('a'.repeat(30), 1700000000, payload);
71
75
  expect(signature).toMatch(/^0x[a-f0-9]+$/);
72
76
  });
73
- it('calls sign method with hashed digest', async () => {
74
- await signer.signAccountIdWithTimestamp('0x' + 'a'.repeat(30), 1700000000);
77
+ it('calls sign method with hashed digest', () => {
78
+ const payload = RequestAuthPayload.fromRequest({ op: 'get_state' });
79
+ signer.signRequest('0x' + 'a'.repeat(30), 1700000000, payload);
75
80
  expect(mockSecretKey.sign).toHaveBeenCalled();
76
81
  });
77
- it('returns signature without first byte', async () => {
82
+ it('returns signature without first byte', () => {
78
83
  // Signature serialized is [0, 1, 2, ...9], slice(1) returns [1, 2, ...9]
79
- const signature = await signer.signAccountIdWithTimestamp('0x' + 'a'.repeat(30), 1700000000);
84
+ const payload = RequestAuthPayload.fromRequest({ op: 'get_state' });
85
+ const signature = signer.signRequest('0x' + 'a'.repeat(30), 1700000000, payload);
80
86
  expect(signature).toBe('0x010203040506070809');
81
87
  });
82
88
  it('includes timestamp in signed payload', async () => {
83
- const { Felt, FeltArray } = await import('@miden-sdk/miden-sdk');
84
- await signer.signAccountIdWithTimestamp('0x' + 'a'.repeat(30), 1700000000);
85
- // Verify FeltArray was called with timestamp in the third position
89
+ const { FeltArray } = await import('@miden-sdk/miden-sdk');
90
+ const payload = RequestAuthPayload.fromRequest({ op: 'get_state' });
91
+ signer.signRequest('0x' + 'a'.repeat(30), 1700000000, payload);
86
92
  expect(FeltArray).toHaveBeenCalledWith(expect.arrayContaining([
87
- expect.anything(), // prefix
88
- expect.anything(), // suffix
89
- expect.anything(), // timestamp
90
- expect.anything(), // zero padding
93
+ expect.anything(),
94
+ expect.anything(),
95
+ expect.anything(),
96
+ expect.anything(),
91
97
  ]));
92
98
  });
93
99
  });
94
100
  describe('signCommitment', () => {
95
- it('handles commitment with 0x prefix', async () => {
96
- const signature = await signer.signCommitment('0x' + 'c'.repeat(64));
101
+ it('handles commitment with 0x prefix', () => {
102
+ const signature = signer.signCommitment('0x' + 'c'.repeat(64));
97
103
  expect(signature).toMatch(/^0x[a-f0-9]+$/);
98
104
  });
99
- it('handles commitment without 0x prefix', async () => {
100
- const signature = await signer.signCommitment('c'.repeat(64));
105
+ it('handles commitment without 0x prefix', () => {
106
+ const signature = signer.signCommitment('c'.repeat(64));
101
107
  expect(signature).toMatch(/^0x[a-f0-9]+$/);
102
108
  });
103
- it('pads short commitment hex to 64 characters', async () => {
104
- const signature = await signer.signCommitment('abc');
109
+ it('pads short commitment hex to 64 characters', () => {
110
+ const signature = signer.signCommitment('abc');
105
111
  expect(signature).toMatch(/^0x[a-f0-9]+$/);
106
112
  });
107
- it('calls sign method with word from hex', async () => {
108
- await signer.signCommitment('0x' + 'c'.repeat(64));
113
+ it('calls sign method with word from hex', () => {
114
+ signer.signCommitment('0x' + 'c'.repeat(64));
109
115
  expect(mockSecretKey.sign).toHaveBeenCalled();
110
116
  });
111
- it('returns signature without first byte', async () => {
112
- const signature = await signer.signCommitment('0x' + 'c'.repeat(64));
117
+ it('returns signature without first byte', () => {
118
+ const signature = signer.signCommitment('0x' + 'c'.repeat(64));
113
119
  expect(signature).toBe('0x010203040506070809');
114
120
  });
115
121
  });
@@ -1 +1 @@
1
- {"version":3,"file":"signer.test.js","sourceRoot":"","sources":["../src/signer.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signer.test.js","sourceRoot":"","sources":["../src/signer.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,qBAAqB;AACrB,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACnC,MAAM,aAAa,GAAG;QACpB,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KAChE,CAAC;IAEF,MAAM,aAAa,GAAG;QACpB,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;YACnB,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;SACnC,CAAC;QACF,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;KACxF,CAAC;IAEF,MAAM,aAAa,GAAG;QACpB,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC;QACjD,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC;KAC7C,CAAC;IAEF,OAAO;QACL,aAAa,EAAE;YACb,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC;SACzD;QACD,IAAI,EAAE;YACJ,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC;gBAC/B,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG;gBAChB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aAC5B,CAAC,CAAC;SACJ;QACD,SAAS,EAAE;YACT,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC;gBAC/B,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1C,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3C,CAAC,CAAC;SACJ;QACD,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/D,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,GAAU,EAAE,EAAE,CAAC,GAAG,CAAC;QAC1D,MAAM,EAAE;YACN,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;gBACpC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aAC5B,CAAC;SACH;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,aAAkB,CAAC;IACvB,IAAI,MAAoB,CAAC;IAEzB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC/D,aAAa,GAAG,aAAa,CAAC,gBAAgB,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QACnE,MAAM,GAAG,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,yEAAyE;YACzE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;YACpE,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YACjF,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;YACpE,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YAC1E,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;YACpE,MAAM,CAAC,WAAW,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YAC/D,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,yEAAyE;YACzE,MAAM,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;YACpE,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YACjF,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;YACpE,MAAM,CAAC,WAAW,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YAC/D,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,eAAe,CAAC;gBAC5D,MAAM,CAAC,QAAQ,EAAE;gBACjB,MAAM,CAAC,QAAQ,EAAE;gBACjB,MAAM,CAAC,QAAQ,EAAE;gBACjB,MAAM,CAAC,QAAQ,EAAE;aAClB,CAAC,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/D,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACxD,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC/C,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,CAAC,cAAc,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/D,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=p2id.interop.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"p2id.interop.test.d.ts","sourceRoot":"","sources":["../../src/transaction/p2id.interop.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ import { beforeAll, describe, expect, it } from 'vitest';
2
+ import { readFile } from 'node:fs/promises';
3
+ describe('P2ID serial derivation interop', () => {
4
+ let sdk;
5
+ beforeAll(async () => {
6
+ const nativeFetch = globalThis.fetch.bind(globalThis);
7
+ globalThis.fetch = async (input, init) => {
8
+ const url = typeof input === 'string'
9
+ ? input
10
+ : input instanceof URL
11
+ ? input.href
12
+ : input.url;
13
+ if (url.startsWith('file://')) {
14
+ const bytes = await readFile(new URL(url));
15
+ return new Response(bytes, {
16
+ headers: { 'content-type': 'application/wasm' },
17
+ });
18
+ }
19
+ return nativeFetch(input, init);
20
+ };
21
+ sdk = await import('@miden-sdk/miden-sdk');
22
+ });
23
+ it('matches the Rust vector for seed-plus-four-zeros derivation', () => {
24
+ const { Word, Felt, FeltArray, Rpo256 } = sdk;
25
+ const salt = Word.fromHex('0x0000000000000001000000000000000200000000000000030000000000000004');
26
+ const serial = Rpo256.hashElements(new FeltArray([
27
+ ...salt.toFelts(),
28
+ new Felt(0n),
29
+ new Felt(0n),
30
+ new Felt(0n),
31
+ new Felt(0n),
32
+ ]));
33
+ expect(serial.toHex()).toBe('0x7e70954b9746a1d5843b290cc4c6bf2239237eaa422619fe476c33b4383e5d7b');
34
+ });
35
+ });
36
+ //# sourceMappingURL=p2id.interop.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"p2id.interop.test.js","sourceRoot":"","sources":["../../src/transaction/p2id.interop.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAI5C,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,IAAI,GAAa,CAAC;IAElB,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEtD,UAAU,CAAC,KAAK,GAAG,KAAK,EAAE,KAAwB,EAAE,IAAkB,EAAE,EAAE;YACxE,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ;gBACnC,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,KAAK,YAAY,GAAG;oBACpB,CAAC,CAAC,KAAK,CAAC,IAAI;oBACZ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;YAEhB,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9B,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3C,OAAO,IAAI,QAAQ,CAAC,KAAK,EAAE;oBACzB,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAChD,CAAC,CAAC;YACL,CAAC;YAED,OAAO,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC,CAAC;QAEF,GAAG,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;QAE9C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CACvB,oEAAoE,CACrE,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC;YAC/C,GAAG,IAAI,CAAC,OAAO,EAAE;YACjB,IAAI,IAAI,CAAC,EAAE,CAAC;YACZ,IAAI,IAAI,CAAC,EAAE,CAAC;YACZ,IAAI,IAAI,CAAC,EAAE,CAAC;YACZ,IAAI,IAAI,CAAC,EAAE,CAAC;SACb,CAAC,CAAC,CAAC;QAEJ,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CACzB,oEAAoE,CACrE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=p2id.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"p2id.test.d.ts","sourceRoot":"","sources":["../../src/transaction/p2id.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,138 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ const { mockHashElements, mockNormalizeHexWord, mockRandomWord, mockWordFromHex, saltFelts, } = vi.hoisted(() => {
3
+ const saltFelts = [
4
+ { id: 'felt-0' },
5
+ { id: 'felt-1' },
6
+ { id: 'felt-2' },
7
+ { id: 'felt-3' },
8
+ ];
9
+ return {
10
+ mockHashElements: vi.fn().mockReturnValue({ toString: () => 'serial' }),
11
+ mockNormalizeHexWord: vi.fn((hex) => hex),
12
+ mockRandomWord: vi.fn().mockReturnValue({
13
+ toHex: () => '0x' + 'aa'.repeat(32),
14
+ }),
15
+ mockWordFromHex: vi.fn((hex) => ({
16
+ toHex: () => hex,
17
+ toFelts: () => saltFelts,
18
+ })),
19
+ saltFelts,
20
+ };
21
+ });
22
+ vi.mock('@miden-sdk/miden-sdk', () => {
23
+ class Felt {
24
+ value;
25
+ constructor(value) {
26
+ this.value = value;
27
+ }
28
+ }
29
+ class FeltArray {
30
+ values;
31
+ constructor(values) {
32
+ this.values = values;
33
+ }
34
+ }
35
+ class NoteAssets {
36
+ constructor(_assets) { }
37
+ }
38
+ class NoteInputs {
39
+ constructor(_inputs) { }
40
+ }
41
+ class NoteMetadata {
42
+ constructor(_sender, _noteType, _noteTag) { }
43
+ }
44
+ class NoteRecipient {
45
+ constructor(_serialNum, _noteScript, _noteInputs) { }
46
+ }
47
+ class Note {
48
+ constructor(_assets, _metadata, _recipient) { }
49
+ }
50
+ class FungibleAsset {
51
+ constructor(_faucet, _amount) { }
52
+ }
53
+ class OutputNoteArray {
54
+ constructor(_notes) { }
55
+ }
56
+ class TransactionRequestBuilder {
57
+ withOwnOutputNotes(_notes) {
58
+ return this;
59
+ }
60
+ withAuthArg(_authArg) {
61
+ return this;
62
+ }
63
+ extendAdviceMap(_adviceMap) {
64
+ return this;
65
+ }
66
+ build() {
67
+ return { kind: 'request' };
68
+ }
69
+ }
70
+ return {
71
+ AccountId: {
72
+ fromHex: vi.fn((hex) => ({
73
+ hex,
74
+ prefix: () => 1,
75
+ suffix: () => 2,
76
+ })),
77
+ },
78
+ Felt,
79
+ FeltArray,
80
+ FungibleAsset,
81
+ MidenArrays: {
82
+ OutputNoteArray,
83
+ },
84
+ Note,
85
+ NoteAssets,
86
+ NoteInputs,
87
+ NoteMetadata,
88
+ NoteRecipient,
89
+ NoteScript: {
90
+ p2id: vi.fn(() => ({ kind: 'p2id-script' })),
91
+ },
92
+ NoteTag: {
93
+ withAccountTarget: vi.fn(() => ({ kind: 'tag' })),
94
+ },
95
+ NoteType: {
96
+ Public: 'public',
97
+ },
98
+ OutputNote: {
99
+ full: vi.fn((note) => ({ note })),
100
+ },
101
+ Rpo256: {
102
+ hashElements: mockHashElements,
103
+ },
104
+ TransactionRequestBuilder,
105
+ Word: {
106
+ fromHex: mockWordFromHex,
107
+ },
108
+ };
109
+ });
110
+ vi.mock('../utils/encoding.js', () => ({
111
+ normalizeHexWord: mockNormalizeHexWord,
112
+ }));
113
+ vi.mock('../utils/random.js', () => ({
114
+ randomWord: mockRandomWord,
115
+ }));
116
+ import { buildP2idTransactionRequest } from './p2id.js';
117
+ describe('buildP2idTransactionRequest', () => {
118
+ beforeEach(() => {
119
+ mockHashElements.mockClear();
120
+ mockNormalizeHexWord.mockClear();
121
+ mockRandomWord.mockClear();
122
+ mockWordFromHex.mockClear();
123
+ });
124
+ it('derives serial number from salt felts plus four zero felts', () => {
125
+ const salt = { toHex: () => '0x' + '11'.repeat(32) };
126
+ buildP2idTransactionRequest('0x7bfb0f38b0fafa103f86a805594170', '0x8a65fc5a39e4cd106d648e3eb4ab5f', '0x7bfb0f38b0fafa103f86a805594171', 10n, { salt });
127
+ expect(mockRandomWord).not.toHaveBeenCalled();
128
+ expect(mockHashElements).toHaveBeenCalledTimes(1);
129
+ const [feltArrayArg] = mockHashElements.mock.calls[0];
130
+ const values = feltArrayArg.values;
131
+ expect(values).toHaveLength(8);
132
+ expect(values.slice(0, 4)).toEqual(saltFelts);
133
+ for (const felt of values.slice(4)) {
134
+ expect(felt.value).toBe(0n);
135
+ }
136
+ });
137
+ });
138
+ //# sourceMappingURL=p2id.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"p2id.test.js","sourceRoot":"","sources":["../../src/transaction/p2id.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type Word } from '@miden-sdk/miden-sdk';
2
+ export declare class RpoRandomCoin {
3
+ private readonly seed;
4
+ constructor(seed: Word);
5
+ drawWord(): Word;
6
+ }
7
+ //# sourceMappingURL=rpoRandomCoin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpoRandomCoin.d.ts","sourceRoot":"","sources":["../../src/transaction/rpoRandomCoin.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,IAAI,EACV,MAAM,sBAAsB,CAAC;AAE9B,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAO;gBAEhB,IAAI,EAAE,IAAI;IAItB,QAAQ,IAAI,IAAI;CASjB"}
@@ -0,0 +1,17 @@
1
+ import { Felt, FeltArray, Rpo256, } from '@miden-sdk/miden-sdk';
2
+ export class RpoRandomCoin {
3
+ seed;
4
+ constructor(seed) {
5
+ this.seed = seed;
6
+ }
7
+ drawWord() {
8
+ return Rpo256.hashElements(new FeltArray([
9
+ ...this.seed.toFelts(),
10
+ new Felt(0n),
11
+ new Felt(0n),
12
+ new Felt(0n),
13
+ new Felt(0n),
14
+ ]));
15
+ }
16
+ }
17
+ //# sourceMappingURL=rpoRandomCoin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpoRandomCoin.js","sourceRoot":"","sources":["../../src/transaction/rpoRandomCoin.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,SAAS,EACT,MAAM,GAEP,MAAM,sBAAsB,CAAC;AAE9B,MAAM,OAAO,aAAa;IACP,IAAI,CAAO;IAE5B,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,QAAQ;QACN,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC;YACvC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACtB,IAAI,IAAI,CAAC,EAAE,CAAC;YACZ,IAAI,IAAI,CAAC,EAAE,CAAC;YACZ,IAAI,IAAI,CAAC,EAAE,CAAC;YACZ,IAAI,IAAI,CAAC,EAAE,CAAC;SACb,CAAC,CAAC,CAAC;IACN,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rpoRandomCoin.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpoRandomCoin.test.d.ts","sourceRoot":"","sources":["../../src/transaction/rpoRandomCoin.test.ts"],"names":[],"mappings":""}