@openzeppelin/miden-multisig-client 0.18.1 → 0.18.3

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 CHANGED
@@ -17,7 +17,7 @@ Miden multisig accounts store their authentication logic on-chain, but **their s
17
17
  ## Installation
18
18
 
19
19
  ```bash
20
- npm install @openzeppelin/miden-multisig-client@0.18.1 @miden-sdk/miden-sdk@0.17.3
20
+ npm install @openzeppelin/miden-multisig-client@0.18.3 @miden-sdk/miden-sdk@0.17.3
21
21
  ```
22
22
 
23
23
  Miden 0.17 requires a new client database: a store created under 0.16 does not
@@ -94,6 +94,59 @@ symptoms and recovery are in
94
94
  [TROUBLESHOOTING.md](https://github.com/OpenZeppelin/guardian/blob/main/docs/TROUBLESHOOTING.md#account-data-wasnt-found-or-incomplete-storage-map-in-a-browser).
95
95
  Node.js has no worker and is unaffected.
96
96
 
97
+ ### Cedar
98
+
99
+ `@miden-sdk/miden-sdk` 0.17.3 has no Cedar preset and no `'cedar'` shorthand,
100
+ so a Cedar client names its endpoints explicitly:
101
+
102
+ ```typescript
103
+ const midenClient = await MidenClient.create({
104
+ rpcUrl: 'https://rpc.cedar.miden.io',
105
+ proverUrl: 'https://tx-prover.cedar.miden.io',
106
+ noteTransportUrl: 'https://transport.cedar.miden.io',
107
+ autoSync: true,
108
+ useWorker: false,
109
+ });
110
+
111
+ const client = new MultisigClient(midenClient, {
112
+ guardianEndpoint: 'https://your-guardian-host',
113
+ midenRpcEndpoint: 'https://rpc.cedar.miden.io',
114
+ });
115
+ ```
116
+
117
+ Cedar addresses use the `mm` prefix, today the same as mainnet's. In Rust,
118
+ `MidenCedar::endpoint()` selects the Cedar prover and note transport automatically.
119
+
120
+ ### Mainnet
121
+
122
+ `@miden-sdk/miden-sdk` 0.17.3 has no `createMainnet()` preset and no
123
+ `'mainnet'` shorthand for `rpcUrl`, `proverUrl`, or `noteTransportUrl` either,
124
+ so a mainnet client names its endpoints the same way:
125
+
126
+ ```typescript
127
+ const midenClient = await MidenClient.create({
128
+ rpcUrl: 'https://rpc.mainnet.miden.io',
129
+ proverUrl: 'https://tx-prover.mainnet.miden.io',
130
+ noteTransportUrl: 'https://transport.mainnet.miden.io',
131
+ autoSync: true,
132
+ useWorker: false,
133
+ });
134
+
135
+ const client = new MultisigClient(midenClient, {
136
+ guardianEndpoint: 'https://your-guardian-host',
137
+ midenRpcEndpoint: 'https://rpc.mainnet.miden.io',
138
+ prover: {
139
+ retry: { maxAttempts: 4 },
140
+ },
141
+ });
142
+ ```
143
+
144
+ `createTestnet` and `createDevnet` set exactly these three endpoints plus
145
+ `autoSync`, so the explicit Cedar and mainnet forms are equivalent. Without
146
+ `noteTransportUrl`, private notes cannot be relayed between cosigners. Leave
147
+ `prover.url` unset so the SDK keeps the Cedar or mainnet prover injected into
148
+ the `MidenClient`; a `url` there overrides it.
149
+
97
150
  For an ECDSA cosigner using an EIP-1193 wallet (including Ledger), call
98
151
  `Eip712Signer.connect(provider)` once to select the Ethereum address and
99
152
  recover its secp256k1 public key from a dedicated key-discovery signature.
@@ -184,12 +237,20 @@ The full cross-SDK reference, including the Rust equivalents, is
184
237
 
185
238
  ### Get GUARDIAN Public Key
186
239
 
187
- Before creating a multisig, get the GUARDIAN server's public key commitment:
240
+ Before creating a multisig, get the GUARDIAN server's ACK commitment for the
241
+ account's signature scheme:
188
242
 
189
243
  ```typescript
190
- const guardianCommitment = await client.guardianClient.getPubkey();
244
+ const { commitment: guardianCommitment } = await client.guardianClient.getPubkey(signer.scheme);
191
245
  ```
192
246
 
247
+ `getPubkey` returns `{ commitment, pubkey }` for one signature scheme and
248
+ defaults to Falcon when no scheme is passed, including on a Guardian that only
249
+ admits ECDSA accounts (`GUARDIAN_ALLOWED_ACCOUNT_SCHEMES=ecdsa`): both ACK keys
250
+ stay loaded for existing accounts. Always pass the scheme of the account you
251
+ are creating, usually `signer.scheme`. A Falcon commitment in an ECDSA account
252
+ is refused at registration with an authorization error, not a scheme mismatch.
253
+
193
254
  ### Create a Multisig Account
194
255
 
195
256
  ```typescript
package/dist/client.d.ts CHANGED
@@ -69,8 +69,8 @@ export interface RecoveredAccount {
69
69
  * },
70
70
  * });
71
71
  *
72
- * // Get GUARDIAN pubkey for config
73
- * const guardianCommitment = await client.guardianClient.getPubkey();
72
+ * // Get GUARDIAN's ACK commitment for the account's signature scheme
73
+ * const { commitment: guardianCommitment } = await client.guardianClient.getPubkey(signer.scheme);
74
74
  *
75
75
  * // Create multisig
76
76
  * const config = { threshold: 2, signerCommitments: [...], guardianCommitment };
package/dist/client.js CHANGED
@@ -49,8 +49,8 @@ async function bindSignerAccountKey(signer, midenClient, accountId) {
49
49
  * },
50
50
  * });
51
51
  *
52
- * // Get GUARDIAN pubkey for config
53
- * const guardianCommitment = await client.guardianClient.getPubkey();
52
+ * // Get GUARDIAN's ACK commitment for the account's signature scheme
53
+ * const { commitment: guardianCommitment } = await client.guardianClient.getPubkey(signer.scheme);
54
54
  *
55
55
  * // Create multisig
56
56
  * const config = { threshold: 2, signerCommitments: [...], guardianCommitment };
package/dist/index.d.ts CHANGED
@@ -31,8 +31,8 @@
31
31
  * },
32
32
  * });
33
33
  *
34
- * // Get GUARDIAN pubkey for config
35
- * const guardianCommitment = await client.guardianClient.getPubkey();
34
+ * // Get GUARDIAN's ACK commitment for the account's signature scheme
35
+ * const { commitment: guardianCommitment } = await client.guardianClient.getPubkey(signer.scheme);
36
36
  *
37
37
  * // Create multisig account
38
38
  * const config = { threshold: 2, signerCommitments: [signer.commitment, ...], guardianCommitment };
package/dist/index.js CHANGED
@@ -31,8 +31,8 @@
31
31
  * },
32
32
  * });
33
33
  *
34
- * // Get GUARDIAN pubkey for config
35
- * const guardianCommitment = await client.guardianClient.getPubkey();
34
+ * // Get GUARDIAN's ACK commitment for the account's signature scheme
35
+ * const { commitment: guardianCommitment } = await client.guardianClient.getPubkey(signer.scheme);
36
36
  *
37
37
  * // Create multisig account
38
38
  * const config = { threshold: 2, signerCommitments: [signer.commitment, ...], guardianCommitment };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openzeppelin/miden-multisig-client",
3
- "version": "0.18.1",
3
+ "version": "0.18.3",
4
4
  "description": "TypeScript SDK for Miden multisig accounts with GUARDIAN integration",
5
5
  "repository": {
6
6
  "type": "git",
@@ -45,10 +45,10 @@
45
45
  "@miden-sdk/miden-sdk": "0.17.3",
46
46
  "@noble/curves": "^1.9.7",
47
47
  "@noble/hashes": "^2.0.1",
48
- "@openzeppelin/guardian-client": "^0.18.1"
48
+ "@openzeppelin/guardian-client": "^0.18.3"
49
49
  },
50
50
  "devDependencies": {
51
- "@openzeppelin/guardian-operator-client": "^0.18.1",
51
+ "@openzeppelin/guardian-operator-client": "^0.18.3",
52
52
  "@playwright/test": "^1.60.0",
53
53
  "@types/node": "^24.13.5",
54
54
  "fake-indexeddb": "^6.2.5",
package/src/client.ts CHANGED
@@ -107,8 +107,8 @@ export interface RecoveredAccount {
107
107
  * },
108
108
  * });
109
109
  *
110
- * // Get GUARDIAN pubkey for config
111
- * const guardianCommitment = await client.guardianClient.getPubkey();
110
+ * // Get GUARDIAN's ACK commitment for the account's signature scheme
111
+ * const { commitment: guardianCommitment } = await client.guardianClient.getPubkey(signer.scheme);
112
112
  *
113
113
  * // Create multisig
114
114
  * const config = { threshold: 2, signerCommitments: [...], guardianCommitment };
package/src/index.ts CHANGED
@@ -31,8 +31,8 @@
31
31
  * },
32
32
  * });
33
33
  *
34
- * // Get GUARDIAN pubkey for config
35
- * const guardianCommitment = await client.guardianClient.getPubkey();
34
+ * // Get GUARDIAN's ACK commitment for the account's signature scheme
35
+ * const { commitment: guardianCommitment } = await client.guardianClient.getPubkey(signer.scheme);
36
36
  *
37
37
  * // Create multisig account
38
38
  * const config = { threshold: 2, signerCommitments: [signer.commitment, ...], guardianCommitment };