@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 +64 -3
- package/dist/client.d.ts +2 -2
- package/dist/client.js +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/package.json +3 -3
- package/src/client.ts +2 -2
- package/src/index.ts +2 -2
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
48
|
+
"@openzeppelin/guardian-client": "^0.18.3"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
|
-
"@openzeppelin/guardian-operator-client": "^0.18.
|
|
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
|
|
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
|
|
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 };
|