@openzeppelin/guardian-client 0.18.3 → 0.19.0-rc.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.
- package/README.md +66 -5
- package/dist/auth-request.d.ts +13 -0
- package/dist/auth-request.d.ts.map +1 -1
- package/dist/auth-request.js +26 -5
- package/dist/auth-request.js.map +1 -1
- package/dist/conversion.d.ts.map +1 -1
- package/dist/conversion.js +12 -2
- package/dist/conversion.js.map +1 -1
- package/dist/error-codes.d.ts +3 -5
- package/dist/error-codes.d.ts.map +1 -1
- package/dist/error-codes.js +21 -4
- package/dist/error-codes.js.map +1 -1
- package/dist/execution.d.ts +99 -0
- package/dist/execution.d.ts.map +1 -0
- package/dist/execution.js +124 -0
- package/dist/execution.js.map +1 -0
- package/dist/http.d.ts +57 -4
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +111 -13
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/request-envelope.d.ts +22 -0
- package/dist/request-envelope.d.ts.map +1 -0
- package/dist/request-envelope.js +51 -0
- package/dist/request-envelope.js.map +1 -0
- package/dist/server-types.d.ts +20 -0
- package/dist/server-types.d.ts.map +1 -1
- package/dist/types.d.ts +48 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/auth-request.test.ts +12 -0
- package/src/auth-request.ts +37 -5
- package/src/conversion.test.ts +81 -0
- package/src/conversion.ts +17 -2
- package/src/dependencies.test.ts +25 -0
- package/src/error-codes.test.ts +14 -1
- package/src/error-codes.ts +21 -4
- package/src/execution.test.ts +145 -0
- package/src/execution.ts +206 -0
- package/src/http.test.ts +430 -14
- package/src/http.ts +153 -13
- package/src/index.ts +34 -1
- package/src/request-envelope.test.ts +30 -0
- package/src/request-envelope.ts +68 -0
- package/src/server-types.ts +20 -1
- package/src/types.ts +50 -1
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The envelope a Guardian-executable proposal stores its serialized `TransactionRequest` in.
|
|
3
|
+
* Mirrors `guardian_shared::request_envelope`; the same bytes seal to the same envelope in both
|
|
4
|
+
* SDKs.
|
|
5
|
+
*/
|
|
6
|
+
export const ENVELOPE_FORMAT_VERSION = 1;
|
|
7
|
+
/** The Miden protocol line requests are serialized for, as `MAJOR.MINOR`. */
|
|
8
|
+
export const PROTOCOL_LINE = '0.17';
|
|
9
|
+
function toBase64(bytes) {
|
|
10
|
+
let binary = '';
|
|
11
|
+
for (const byte of bytes) {
|
|
12
|
+
binary += String.fromCharCode(byte);
|
|
13
|
+
}
|
|
14
|
+
return btoa(binary);
|
|
15
|
+
}
|
|
16
|
+
async function sha256Hex(bytes) {
|
|
17
|
+
const digest = new Uint8Array(await globalThis.crypto.subtle.digest('SHA-256', new Uint8Array(bytes)));
|
|
18
|
+
return `0x${Array.from(digest, (byte) => byte.toString(16).padStart(2, '0')).join('')}`;
|
|
19
|
+
}
|
|
20
|
+
/** Wraps freshly serialized request bytes for storage with a proposal. */
|
|
21
|
+
export async function sealTransactionRequest(bytes) {
|
|
22
|
+
return {
|
|
23
|
+
format_version: ENVELOPE_FORMAT_VERSION,
|
|
24
|
+
protocol_line: PROTOCOL_LINE,
|
|
25
|
+
checksum: await sha256Hex(bytes),
|
|
26
|
+
bytes: toBase64(bytes),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function envelopeField(record, key, accepts) {
|
|
30
|
+
const value = record[key];
|
|
31
|
+
if (!accepts(value)) {
|
|
32
|
+
throw new Error(`Guardian returned a transaction request envelope with an invalid ${key}: ${JSON.stringify(value)}`);
|
|
33
|
+
}
|
|
34
|
+
return value;
|
|
35
|
+
}
|
|
36
|
+
const isString = (value) => typeof value === 'string';
|
|
37
|
+
const isFormatVersion = (value) => Number.isSafeInteger(value) && value >= 0;
|
|
38
|
+
/** Decodes a stored envelope as the server returns it, refusing a missing or mistyped field. */
|
|
39
|
+
export function decodeTransactionRequestEnvelope(value) {
|
|
40
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
41
|
+
throw new Error(`Guardian returned a transaction request envelope that is not an object: ${JSON.stringify(value)}`);
|
|
42
|
+
}
|
|
43
|
+
const record = value;
|
|
44
|
+
return {
|
|
45
|
+
format_version: envelopeField(record, 'format_version', isFormatVersion),
|
|
46
|
+
protocol_line: envelopeField(record, 'protocol_line', isString),
|
|
47
|
+
checksum: envelopeField(record, 'checksum', isString),
|
|
48
|
+
bytes: envelopeField(record, 'bytes', isString),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=request-envelope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-envelope.js","sourceRoot":"","sources":["../src/request-envelope.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAEzC,6EAA6E;AAC7E,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC;AAYpC,SAAS,QAAQ,CAAC,KAAiB;IACjC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,KAAiB;IACxC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvG,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AAC1F,CAAC;AAED,0EAA0E;AAC1E,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,KAAiB;IAC5D,OAAO;QACL,cAAc,EAAE,uBAAuB;QACvC,aAAa,EAAE,aAAa;QAC5B,QAAQ,EAAE,MAAM,SAAS,CAAC,KAAK,CAAC;QAChC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAI,MAA+B,EAAE,GAAqC,EAAE,OAAuC;IACvI,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,oEAAoE,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;AAChF,MAAM,eAAe,GAAG,CAAC,KAAc,EAAmB,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAK,KAAgB,IAAI,CAAC,CAAC;AAEnH,gGAAgG;AAChG,MAAM,UAAU,gCAAgC,CAAC,KAAc;IAC7D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,2EAA2E,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACtH,CAAC;IACD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,OAAO;QACL,cAAc,EAAE,aAAa,CAAC,MAAM,EAAE,gBAAgB,EAAE,eAAe,CAAC;QACxE,aAAa,EAAE,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,CAAC;QAC/D,QAAQ,EAAE,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC;QACrD,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC;KAChD,CAAC;AACJ,CAAC"}
|
package/dist/server-types.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { TransactionRequestEnvelope } from './request-envelope.js';
|
|
2
|
+
import type { ServerExecutionCapabilityWire } from './execution.js';
|
|
1
3
|
export interface ServerFalconSignature {
|
|
2
4
|
scheme: 'falcon';
|
|
3
5
|
signature: string;
|
|
@@ -40,6 +42,11 @@ export interface ServerProposalMetadata {
|
|
|
40
42
|
target_threshold?: number;
|
|
41
43
|
required_signatures?: number;
|
|
42
44
|
signer_commitments?: string[];
|
|
45
|
+
/**
|
|
46
|
+
* Target signer schemes (`"falcon"` / `"ecdsa"`), index-aligned with
|
|
47
|
+
* `signer_commitments` (issue #563). Proposer-supplied and stored as sent.
|
|
48
|
+
*/
|
|
49
|
+
signer_schemes?: string[];
|
|
43
50
|
target_procedure?: string;
|
|
44
51
|
salt?: string;
|
|
45
52
|
description?: string;
|
|
@@ -79,6 +86,7 @@ export interface ServerDeltaObject {
|
|
|
79
86
|
signature: ServerProposalSignature;
|
|
80
87
|
}>;
|
|
81
88
|
metadata?: ServerProposalMetadata;
|
|
89
|
+
transaction_request?: TransactionRequestEnvelope;
|
|
82
90
|
};
|
|
83
91
|
ack_sig?: string;
|
|
84
92
|
ack_pubkey?: string;
|
|
@@ -127,6 +135,14 @@ export type ServerAuthConfig = {
|
|
|
127
135
|
MidenEcdsa: {
|
|
128
136
|
cosigner_commitments: string[];
|
|
129
137
|
};
|
|
138
|
+
} | {
|
|
139
|
+
Miden: {
|
|
140
|
+
cosigners: {
|
|
141
|
+
commitment: string;
|
|
142
|
+
scheme: 'falcon' | 'ecdsa';
|
|
143
|
+
}[];
|
|
144
|
+
guardian_scheme: 'falcon' | 'ecdsa';
|
|
145
|
+
};
|
|
130
146
|
};
|
|
131
147
|
export interface ServerConfigureRequest {
|
|
132
148
|
account_id: string;
|
|
@@ -154,6 +170,7 @@ export interface ServerDeltaProposalRequest {
|
|
|
154
170
|
signature: ServerProposalSignature;
|
|
155
171
|
}>;
|
|
156
172
|
metadata?: ServerProposalMetadata;
|
|
173
|
+
transaction_request?: TransactionRequestEnvelope;
|
|
157
174
|
};
|
|
158
175
|
}
|
|
159
176
|
export interface ServerDeltaProposalResponse {
|
|
@@ -166,12 +183,14 @@ export interface ServerProposalsResponse {
|
|
|
166
183
|
export interface ServerAbandonCandidateRequest {
|
|
167
184
|
account_id: string;
|
|
168
185
|
nonce: number;
|
|
186
|
+
proposal_id: string;
|
|
169
187
|
}
|
|
170
188
|
export interface ServerAbandonCandidateResponse {
|
|
171
189
|
account_id: string;
|
|
172
190
|
nonce: number;
|
|
173
191
|
state: 'pending' | 'abandoned' | 'retained';
|
|
174
192
|
abandon_requested_at?: string;
|
|
193
|
+
commitment: string;
|
|
175
194
|
}
|
|
176
195
|
export interface ServerSignProposalRequest {
|
|
177
196
|
account_id: string;
|
|
@@ -189,6 +208,7 @@ export interface ServerStatusResponse {
|
|
|
189
208
|
environment: string;
|
|
190
209
|
started_at: string;
|
|
191
210
|
uptime_seconds: number;
|
|
211
|
+
execution?: ServerExecutionCapabilityWire | null;
|
|
192
212
|
sessions?: {
|
|
193
213
|
max_ttl_seconds: number;
|
|
194
214
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-types.d.ts","sourceRoot":"","sources":["../src/server-types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"server-types.d.ts","sourceRoot":"","sources":["../src/server-types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import type { TransactionRequestEnvelope } from './request-envelope.js';
|
|
1
2
|
import type { RequestAuthPayload } from './auth-request.js';
|
|
3
|
+
import type { ServerExecutionCapability } from './execution.js';
|
|
2
4
|
export interface Signer {
|
|
3
5
|
readonly commitment: string;
|
|
4
6
|
readonly publicKey: string;
|
|
@@ -124,6 +126,11 @@ export interface EcdsaSignature {
|
|
|
124
126
|
}
|
|
125
127
|
export type ProposalSignature = FalconSignature | EcdsaSignature;
|
|
126
128
|
export type SignatureScheme = 'falcon' | 'ecdsa';
|
|
129
|
+
/** One cosigner of a {@link AuthConfig} `Miden` auth and the scheme Guardian verifies its signatures under. */
|
|
130
|
+
export interface MidenCosignerConfig {
|
|
131
|
+
commitment: string;
|
|
132
|
+
scheme: SignatureScheme;
|
|
133
|
+
}
|
|
127
134
|
export type AuthConfig = {
|
|
128
135
|
MidenFalconRpo: {
|
|
129
136
|
cosigner_commitments: string[];
|
|
@@ -132,6 +139,18 @@ export type AuthConfig = {
|
|
|
132
139
|
MidenEcdsa: {
|
|
133
140
|
cosigner_commitments: string[];
|
|
134
141
|
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Cosigners that each carry their own scheme, and the GUARDIAN's scheme
|
|
145
|
+
* (issue #563). Send it only for an account whose cosigners and GUARDIAN
|
|
146
|
+
* do not all share one scheme; servers before #563 reject it, and the
|
|
147
|
+
* single-scheme variants keep serving the accounts that do.
|
|
148
|
+
*/
|
|
149
|
+
| {
|
|
150
|
+
Miden: {
|
|
151
|
+
cosigners: MidenCosignerConfig[];
|
|
152
|
+
guardian_scheme: SignatureScheme;
|
|
153
|
+
};
|
|
135
154
|
};
|
|
136
155
|
export interface CosignerSignature {
|
|
137
156
|
signerId: string;
|
|
@@ -171,6 +190,15 @@ export interface ProposalMetadata {
|
|
|
171
190
|
targetThreshold?: number;
|
|
172
191
|
requiredSignatures?: number;
|
|
173
192
|
signerCommitments?: string[];
|
|
193
|
+
/**
|
|
194
|
+
* Target signer schemes (`"falcon"` / `"ecdsa"`), index-aligned with
|
|
195
|
+
* `signerCommitments`, for an update-signers proposal whose signers do not
|
|
196
|
+
* all share one scheme (issue #563). Absent => every target signer keeps the
|
|
197
|
+
* proposer's scheme. GUARDIAN stores the proposer's values as sent, so a
|
|
198
|
+
* consumer validates them, as it validates the rest of the metadata against
|
|
199
|
+
* the transaction summary, before relying on them.
|
|
200
|
+
*/
|
|
201
|
+
signerSchemes?: string[];
|
|
174
202
|
targetProcedure?: string;
|
|
175
203
|
salt?: string;
|
|
176
204
|
description?: string;
|
|
@@ -214,6 +242,8 @@ export interface DeltaObject {
|
|
|
214
242
|
signature: ProposalSignature;
|
|
215
243
|
}>;
|
|
216
244
|
metadata?: ProposalMetadata;
|
|
245
|
+
/** The request a Guardian-executable proposal stores. Absent on a self-executed one. */
|
|
246
|
+
transactionRequest?: TransactionRequestEnvelope;
|
|
217
247
|
};
|
|
218
248
|
ackSig?: string;
|
|
219
249
|
ackPubkey?: string;
|
|
@@ -239,6 +269,7 @@ export interface StateObject {
|
|
|
239
269
|
};
|
|
240
270
|
createdAt: string;
|
|
241
271
|
updatedAt: string;
|
|
272
|
+
/** `falcon` or `ecdsa` when the account's cosigners and GUARDIAN share that scheme, `mixed` when they do not. */
|
|
242
273
|
authScheme?: string;
|
|
243
274
|
}
|
|
244
275
|
/**
|
|
@@ -279,6 +310,11 @@ export interface StatusResponse {
|
|
|
279
310
|
environment: string;
|
|
280
311
|
startedAt: string;
|
|
281
312
|
uptimeSeconds: number;
|
|
313
|
+
/**
|
|
314
|
+
* Whether the server accepts Guardian execution requests. Absent on a Guardian that predates
|
|
315
|
+
* Guardian execution: it does not offer it.
|
|
316
|
+
*/
|
|
317
|
+
execution?: ServerExecutionCapability;
|
|
282
318
|
/** Present on every Guardian that accepts session grants; absent on older servers. */
|
|
283
319
|
sessions?: SessionsStatus;
|
|
284
320
|
}
|
|
@@ -294,6 +330,8 @@ export interface DeltaProposalRequest {
|
|
|
294
330
|
signature: ProposalSignature;
|
|
295
331
|
}>;
|
|
296
332
|
metadata?: ProposalMetadata;
|
|
333
|
+
/** The request a Guardian-executable proposal stores. Omit for a self-executed one. */
|
|
334
|
+
transactionRequest?: TransactionRequestEnvelope;
|
|
297
335
|
};
|
|
298
336
|
}
|
|
299
337
|
export interface DeltaProposalResponse {
|
|
@@ -326,12 +364,21 @@ export interface AbandonCandidateResponse {
|
|
|
326
364
|
* return the original timestamp; absent once resolved.
|
|
327
365
|
*/
|
|
328
366
|
abandonRequestedAt?: string;
|
|
367
|
+
/**
|
|
368
|
+
* The abandoned delta's `new_commitment`. Another delta can later take
|
|
369
|
+
* the same nonce (a Guardian execution archives the abandoned one), so
|
|
370
|
+
* pass this to `abandonStatus` to poll for this delta.
|
|
371
|
+
*/
|
|
372
|
+
commitment: string;
|
|
329
373
|
}
|
|
330
374
|
/**
|
|
331
375
|
* Resolution of an abandon request, as observed via the delta feed.
|
|
332
376
|
* `'retained'` means the account slot is released but the on-chain
|
|
333
377
|
* outcome is still uncertain — "unlocked but unresolved", never to be
|
|
334
|
-
* read as "the transaction did not land".
|
|
378
|
+
* read as "the transaction did not land". When another delta has taken
|
|
379
|
+
* the nonce, `'abandoned'` means it is canonical (the abandoned
|
|
380
|
+
* transaction can no longer land) and `'waiting'` that it is still a
|
|
381
|
+
* candidate.
|
|
335
382
|
*/
|
|
336
383
|
export type AbandonStatus = 'waiting' | 'landed' | 'abandoned' | 'retained' | 'unexpected';
|
|
337
384
|
export interface PushDeltaResponse {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openzeppelin/guardian-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.19.0-rc.1",
|
|
4
4
|
"description": "TypeScript HTTP client for Guardian server",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"vitest": "^5.0.0"
|
|
40
40
|
},
|
|
41
41
|
"engines": {
|
|
42
|
-
"node": ">=
|
|
42
|
+
"node": ">=20"
|
|
43
43
|
},
|
|
44
44
|
"license": "MIT"
|
|
45
45
|
}
|
package/src/auth-request.test.ts
CHANGED
|
@@ -8,4 +8,16 @@ describe('RequestAuthPayload', () => {
|
|
|
8
8
|
|
|
9
9
|
expect(left.toCanonicalJson()).toEqual(right.toCanonicalJson());
|
|
10
10
|
});
|
|
11
|
+
|
|
12
|
+
it('prefixes an operation payload with its tag and a zero byte, and keeps the canonical JSON', () => {
|
|
13
|
+
const request = { proposal_id: '0x22', account_id: '0x11' };
|
|
14
|
+
const plain = RequestAuthPayload.fromRequest(request);
|
|
15
|
+
const tagged = RequestAuthPayload.forOperation('ExecuteDeltaProposal', request);
|
|
16
|
+
|
|
17
|
+
const tag = new TextEncoder().encode('guardian.ExecuteDeltaProposal');
|
|
18
|
+
const json = new TextEncoder().encode('{"account_id":"0x11","proposal_id":"0x22"}');
|
|
19
|
+
expect(Array.from(tagged.toBytes())).toEqual([...tag, 0, ...json]);
|
|
20
|
+
expect(Array.from(plain.toBytes())).toEqual([...json]);
|
|
21
|
+
expect(tagged.toCanonicalJson()).toBe(plain.toCanonicalJson());
|
|
22
|
+
});
|
|
11
23
|
});
|
package/src/auth-request.ts
CHANGED
|
@@ -6,13 +6,40 @@ type JsonValue =
|
|
|
6
6
|
| JsonValue[]
|
|
7
7
|
| { [key: string]: JsonValue };
|
|
8
8
|
|
|
9
|
+
/**
|
|
10
|
+
* An operation whose signed payload is domain-separated from every other request's, so a
|
|
11
|
+
* signature over one never authenticates another request with the same body. Mirrors the Rust
|
|
12
|
+
* `SignedOperation`.
|
|
13
|
+
*/
|
|
14
|
+
export type SignedOperation = 'ExecuteDeltaProposal';
|
|
15
|
+
|
|
16
|
+
function operationTag(operation: SignedOperation): string {
|
|
17
|
+
switch (operation) {
|
|
18
|
+
case 'ExecuteDeltaProposal':
|
|
19
|
+
return 'guardian.ExecuteDeltaProposal\0';
|
|
20
|
+
default: {
|
|
21
|
+
const unreachable: never = operation;
|
|
22
|
+
throw new Error(`Unknown signed operation: ${JSON.stringify(unreachable)}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
9
27
|
export class RequestAuthPayload {
|
|
10
|
-
private constructor(
|
|
28
|
+
private constructor(
|
|
29
|
+
private readonly canonicalJson: string,
|
|
30
|
+
private readonly tag: string,
|
|
31
|
+
) {}
|
|
11
32
|
|
|
12
33
|
static fromRequest(requestPayload: unknown): RequestAuthPayload {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
34
|
+
return new RequestAuthPayload(RequestAuthPayload.canonicalJsonOf(requestPayload), '');
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The payload of `requestPayload` signed as `operation`: the bytes are the operation's tag
|
|
39
|
+
* followed by the canonical JSON, as the Rust `AuthRequestPayload::for_operation` builds them.
|
|
40
|
+
*/
|
|
41
|
+
static forOperation(operation: SignedOperation, requestPayload: unknown): RequestAuthPayload {
|
|
42
|
+
return new RequestAuthPayload(RequestAuthPayload.canonicalJsonOf(requestPayload), operationTag(operation));
|
|
16
43
|
}
|
|
17
44
|
|
|
18
45
|
toCanonicalJson(): string {
|
|
@@ -20,7 +47,12 @@ export class RequestAuthPayload {
|
|
|
20
47
|
}
|
|
21
48
|
|
|
22
49
|
toBytes(): Uint8Array {
|
|
23
|
-
return new TextEncoder().encode(this.canonicalJson);
|
|
50
|
+
return new TextEncoder().encode(this.tag + this.canonicalJson);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
private static canonicalJsonOf(requestPayload: unknown): string {
|
|
54
|
+
const normalized = RequestAuthPayload.normalizeJson(requestPayload);
|
|
55
|
+
return JSON.stringify(RequestAuthPayload.canonicalizeJson(normalized));
|
|
24
56
|
}
|
|
25
57
|
|
|
26
58
|
private static normalizeJson(value: unknown): JsonValue {
|
package/src/conversion.test.ts
CHANGED
|
@@ -237,9 +237,51 @@ describe('conversion', () => {
|
|
|
237
237
|
|
|
238
238
|
expect(result.newCommitment).toBeUndefined();
|
|
239
239
|
expect(result.deltaPayload.metadata).toBeUndefined();
|
|
240
|
+
expect(result.deltaPayload.transactionRequest).toBeUndefined();
|
|
240
241
|
expect(result.ackSig).toBeUndefined();
|
|
241
242
|
});
|
|
242
243
|
|
|
244
|
+
it('round-trips the stored transaction request from a read back into a push', () => {
|
|
245
|
+
const envelope = { format_version: 1, protocol_line: '0.17', checksum: '0xabc', bytes: 'AQID' };
|
|
246
|
+
const server: ServerDeltaObject = {
|
|
247
|
+
account_id: '0xaccount',
|
|
248
|
+
nonce: 1,
|
|
249
|
+
prev_commitment: '0xprev',
|
|
250
|
+
delta_payload: {
|
|
251
|
+
tx_summary: { data: 'base64data' },
|
|
252
|
+
signatures: [],
|
|
253
|
+
transaction_request: envelope,
|
|
254
|
+
},
|
|
255
|
+
status: { status: 'pending', timestamp: '2024-01-01T00:00:00Z', proposer_id: '0xp', cosigner_sigs: [] },
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
const fetched = fromServerDeltaObject(server);
|
|
259
|
+
expect(fetched.deltaPayload.transactionRequest).toEqual(envelope);
|
|
260
|
+
|
|
261
|
+
const reposted = toServerDeltaProposalRequest({
|
|
262
|
+
accountId: fetched.accountId,
|
|
263
|
+
nonce: fetched.nonce,
|
|
264
|
+
deltaPayload: fetched.deltaPayload,
|
|
265
|
+
});
|
|
266
|
+
expect(reposted.delta_payload.transaction_request).toEqual(envelope);
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
it('refuses a stored transaction request with a missing field', () => {
|
|
270
|
+
const server = {
|
|
271
|
+
account_id: '0xaccount',
|
|
272
|
+
nonce: 1,
|
|
273
|
+
prev_commitment: '0xprev',
|
|
274
|
+
delta_payload: {
|
|
275
|
+
tx_summary: { data: 'base64data' },
|
|
276
|
+
signatures: [],
|
|
277
|
+
transaction_request: { format_version: 1, protocol_line: '0.17', bytes: 'AQID' },
|
|
278
|
+
},
|
|
279
|
+
status: { status: 'pending', timestamp: '2024-01-01T00:00:00Z', proposer_id: '0xp', cosigner_sigs: [] },
|
|
280
|
+
} as unknown as ServerDeltaObject;
|
|
281
|
+
|
|
282
|
+
expect(() => fromServerDeltaObject(server)).toThrow(/invalid checksum/);
|
|
283
|
+
});
|
|
284
|
+
|
|
243
285
|
it('converts StateObject', () => {
|
|
244
286
|
const server: ServerStateObject = {
|
|
245
287
|
account_id: '0xaccount',
|
|
@@ -360,6 +402,45 @@ describe('conversion', () => {
|
|
|
360
402
|
});
|
|
361
403
|
});
|
|
362
404
|
|
|
405
|
+
it('carries per-signer schemes in ProposalMetadata both ways (issue #563)', () => {
|
|
406
|
+
const server: ServerProposalMetadata = {
|
|
407
|
+
proposal_type: 'add_signer',
|
|
408
|
+
target_threshold: 2,
|
|
409
|
+
signer_commitments: ['0x1', '0x2'],
|
|
410
|
+
signer_schemes: ['falcon', 'ecdsa'],
|
|
411
|
+
};
|
|
412
|
+
const meta = fromServerProposalMetadata(server);
|
|
413
|
+
expect(meta.signerSchemes).toEqual(['falcon', 'ecdsa']);
|
|
414
|
+
expect(toServerProposalMetadata(meta).signer_schemes).toEqual(['falcon', 'ecdsa']);
|
|
415
|
+
|
|
416
|
+
// Absent on the wire stays absent: single-scheme proposals are unchanged.
|
|
417
|
+
const legacy = toServerProposalMetadata(
|
|
418
|
+
fromServerProposalMetadata({ proposal_type: 'add_signer', signer_commitments: ['0x1'] }),
|
|
419
|
+
);
|
|
420
|
+
expect(JSON.parse(JSON.stringify(legacy))).toEqual({
|
|
421
|
+
proposal_type: 'add_signer',
|
|
422
|
+
signer_commitments: ['0x1'],
|
|
423
|
+
});
|
|
424
|
+
});
|
|
425
|
+
|
|
426
|
+
it('passes a per-signer-scheme Miden auth through ConfigureRequest unchanged', () => {
|
|
427
|
+
const auth = {
|
|
428
|
+
Miden: {
|
|
429
|
+
cosigners: [
|
|
430
|
+
{ commitment: '0x1', scheme: 'falcon' as const },
|
|
431
|
+
{ commitment: '0x2', scheme: 'ecdsa' as const },
|
|
432
|
+
],
|
|
433
|
+
guardian_scheme: 'ecdsa' as const,
|
|
434
|
+
},
|
|
435
|
+
};
|
|
436
|
+
const result = toServerConfigureRequest({
|
|
437
|
+
accountId: '0xaccount',
|
|
438
|
+
auth,
|
|
439
|
+
initialState: { data: 'statedata', accountId: '0xaccount' },
|
|
440
|
+
});
|
|
441
|
+
expect(result.auth).toEqual(auth);
|
|
442
|
+
});
|
|
443
|
+
|
|
363
444
|
it('converts ConfigureRequest', () => {
|
|
364
445
|
const req: ConfigureRequest = {
|
|
365
446
|
accountId: '0xaccount',
|
package/src/conversion.ts
CHANGED
|
@@ -38,11 +38,13 @@ import type {
|
|
|
38
38
|
ServerSignProposalRequest,
|
|
39
39
|
ServerStateObject,
|
|
40
40
|
} from './server-types.js';
|
|
41
|
+
import { decodeTransactionRequestEnvelope, type TransactionRequestEnvelope } from './request-envelope.js';
|
|
41
42
|
|
|
42
43
|
type ServerProposalDeltaPayload = {
|
|
43
44
|
tx_summary: { data: string };
|
|
44
45
|
signatures?: Array<{ signer_id: string; signature: ServerProposalSignature }>;
|
|
45
46
|
metadata?: ServerProposalMetadata;
|
|
47
|
+
transaction_request?: unknown;
|
|
46
48
|
};
|
|
47
49
|
|
|
48
50
|
type ServerExecutionDeltaPayload = {
|
|
@@ -57,11 +59,16 @@ function extractDeltaPayload(payload: ServerDeltaPayload): {
|
|
|
57
59
|
txSummary: { data: string };
|
|
58
60
|
signatures: Array<{ signer_id: string; signature: ServerProposalSignature }>;
|
|
59
61
|
metadata?: ServerProposalMetadata;
|
|
62
|
+
transactionRequest?: TransactionRequestEnvelope;
|
|
60
63
|
} {
|
|
61
64
|
const txSummary = 'tx_summary' in payload ? payload.tx_summary : { data: payload.data };
|
|
62
65
|
const signatures = 'signatures' in payload && Array.isArray(payload.signatures) ? payload.signatures : [];
|
|
63
66
|
const metadata = 'metadata' in payload ? payload.metadata : undefined;
|
|
64
|
-
|
|
67
|
+
const transactionRequest =
|
|
68
|
+
'transaction_request' in payload && payload.transaction_request !== undefined && payload.transaction_request !== null
|
|
69
|
+
? decodeTransactionRequestEnvelope(payload.transaction_request)
|
|
70
|
+
: undefined;
|
|
71
|
+
return { txSummary, signatures, metadata, transactionRequest };
|
|
65
72
|
}
|
|
66
73
|
|
|
67
74
|
export function fromServerSignature(signature: ServerProposalSignature): ProposalSignature {
|
|
@@ -110,6 +117,7 @@ export function fromServerProposalMetadata(server: ServerProposalMetadata): Prop
|
|
|
110
117
|
targetThreshold: server.target_threshold,
|
|
111
118
|
requiredSignatures: server.required_signatures,
|
|
112
119
|
signerCommitments: server.signer_commitments,
|
|
120
|
+
signerSchemes: server.signer_schemes,
|
|
113
121
|
targetProcedure: server.target_procedure,
|
|
114
122
|
salt: server.salt,
|
|
115
123
|
description: server.description,
|
|
@@ -130,7 +138,9 @@ export function fromServerProposalMetadata(server: ServerProposalMetadata): Prop
|
|
|
130
138
|
}
|
|
131
139
|
|
|
132
140
|
export function fromServerDeltaObject(server: ServerDeltaObject): DeltaObject {
|
|
133
|
-
const { txSummary, signatures, metadata } = extractDeltaPayload(
|
|
141
|
+
const { txSummary, signatures, metadata, transactionRequest } = extractDeltaPayload(
|
|
142
|
+
server.delta_payload as ServerDeltaPayload
|
|
143
|
+
);
|
|
134
144
|
|
|
135
145
|
return {
|
|
136
146
|
accountId: server.account_id,
|
|
@@ -144,6 +154,7 @@ export function fromServerDeltaObject(server: ServerDeltaObject): DeltaObject {
|
|
|
144
154
|
signature: fromServerSignature(s.signature),
|
|
145
155
|
})),
|
|
146
156
|
metadata: metadata ? fromServerProposalMetadata(metadata) : undefined,
|
|
157
|
+
...(transactionRequest ? { transactionRequest } : {}),
|
|
147
158
|
},
|
|
148
159
|
ackSig: server.ack_sig,
|
|
149
160
|
ackPubkey: server.ack_pubkey,
|
|
@@ -238,6 +249,7 @@ export function toServerProposalMetadata(meta: ProposalMetadata): ServerProposal
|
|
|
238
249
|
target_threshold: meta.targetThreshold,
|
|
239
250
|
required_signatures: meta.requiredSignatures,
|
|
240
251
|
signer_commitments: meta.signerCommitments,
|
|
252
|
+
signer_schemes: meta.signerSchemes,
|
|
241
253
|
target_procedure: meta.targetProcedure,
|
|
242
254
|
salt: meta.salt,
|
|
243
255
|
description: meta.description,
|
|
@@ -300,6 +312,9 @@ export function toServerDeltaProposalRequest(req: DeltaProposalRequest): ServerD
|
|
|
300
312
|
signature: toServerSignature(s.signature),
|
|
301
313
|
})),
|
|
302
314
|
metadata: req.deltaPayload.metadata ? toServerProposalMetadata(req.deltaPayload.metadata) : undefined,
|
|
315
|
+
...(req.deltaPayload.transactionRequest
|
|
316
|
+
? { transaction_request: req.deltaPayload.transactionRequest }
|
|
317
|
+
: {}),
|
|
303
318
|
},
|
|
304
319
|
};
|
|
305
320
|
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { readFileSync, readdirSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { describe, expect, it } from 'vitest';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Requesting and observing Guardian execution must need no Miden capability, so this package
|
|
8
|
+
* stays dependency-free and never reaches for the Miden SDK. A caller brings its own signer.
|
|
9
|
+
*/
|
|
10
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
|
|
12
|
+
describe('the base client has no Miden capability', () => {
|
|
13
|
+
it('declares no runtime dependencies', () => {
|
|
14
|
+
const manifest = JSON.parse(readFileSync(join(here, '../package.json'), 'utf8'));
|
|
15
|
+
expect(manifest.dependencies ?? {}).toEqual({});
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('imports nothing from the Miden SDK', () => {
|
|
19
|
+
const sources = readdirSync(here).filter((name) => name.endsWith('.ts') && !name.endsWith('.test.ts'));
|
|
20
|
+
expect(sources.length).toBeGreaterThan(0);
|
|
21
|
+
for (const file of sources) {
|
|
22
|
+
expect(readFileSync(join(here, file), 'utf8'), file).not.toMatch(/from\s+'@miden-sdk\//);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
});
|
package/src/error-codes.test.ts
CHANGED
|
@@ -54,7 +54,20 @@ describe('drift guard against GuardianError::code()', () => {
|
|
|
54
54
|
const nextFn = errorRs.indexOf('pub fn', codeFnStart + 1);
|
|
55
55
|
const codeFn = errorRs.slice(codeFnStart, nextFn === -1 ? undefined : nextFn);
|
|
56
56
|
|
|
57
|
-
const
|
|
57
|
+
const executionRs = readFileSync(
|
|
58
|
+
join(here, '../../../crates/shared/src/execution.rs'),
|
|
59
|
+
'utf8'
|
|
60
|
+
);
|
|
61
|
+
const refusalCodes = new Map(
|
|
62
|
+
[...executionRs.matchAll(/pub const ([A-Z_]+): &str =\s*"([A-Z_]+)"/g)].map((m) => [m[1], m[2]])
|
|
63
|
+
);
|
|
64
|
+
const literalCodes = [...codeFn.matchAll(/"([A-Za-z_]+)"/g)].map((m) => m[1]);
|
|
65
|
+
const constantCodes = [...codeFn.matchAll(/refusal_codes::([A-Z_]+)/g)].map((m) => {
|
|
66
|
+
const wire = refusalCodes.get(m[1]);
|
|
67
|
+
expect(wire, `refusal_codes::${m[1]} is defined in guardian-shared`).toBeDefined();
|
|
68
|
+
return wire as string;
|
|
69
|
+
});
|
|
70
|
+
const serverWireCodes = [...literalCodes, ...constantCodes];
|
|
58
71
|
expect(serverWireCodes.length).toBeGreaterThan(0);
|
|
59
72
|
|
|
60
73
|
const normalizedServerCodes = new Set(
|