@openzeppelin/miden-multisig-client 0.18.0 → 0.18.2
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 +176 -23
- package/dist/client.d.ts +41 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +79 -2
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +7 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -4
- package/dist/index.js.map +1 -1
- package/dist/lookupAuth.d.ts.map +1 -1
- package/dist/lookupAuth.js +2 -20
- package/dist/lookupAuth.js.map +1 -1
- package/dist/multisig/authArgErrors.d.ts +27 -1
- package/dist/multisig/authArgErrors.d.ts.map +1 -1
- package/dist/multisig/authArgErrors.js +33 -0
- package/dist/multisig/authArgErrors.js.map +1 -1
- package/dist/multisig.d.ts +77 -11
- package/dist/multisig.d.ts.map +1 -1
- package/dist/multisig.js +247 -181
- package/dist/multisig.js.map +1 -1
- package/dist/proposal/metadata.d.ts.map +1 -1
- package/dist/proposal/metadata.js +2 -0
- package/dist/proposal/metadata.js.map +1 -1
- package/dist/recovery/transportDrain.d.ts +38 -30
- package/dist/recovery/transportDrain.d.ts.map +1 -1
- package/dist/recovery/transportDrain.js +113 -113
- package/dist/recovery/transportDrain.js.map +1 -1
- package/dist/session/grant.d.ts +40 -0
- package/dist/session/grant.d.ts.map +1 -0
- package/dist/session/grant.js +125 -0
- package/dist/session/grant.js.map +1 -0
- package/dist/session/key.d.ts +103 -0
- package/dist/session/key.d.ts.map +1 -0
- package/dist/session/key.js +160 -0
- package/dist/session/key.js.map +1 -0
- package/dist/session/manager.d.ts +76 -0
- package/dist/session/manager.d.ts.map +1 -0
- package/dist/session/manager.js +187 -0
- package/dist/session/manager.js.map +1 -0
- package/dist/signers/ecdsa.d.ts +5 -1
- package/dist/signers/ecdsa.d.ts.map +1 -1
- package/dist/signers/ecdsa.js +9 -0
- package/dist/signers/ecdsa.js.map +1 -1
- package/dist/signers/falcon.d.ts +5 -1
- package/dist/signers/falcon.d.ts.map +1 -1
- package/dist/signers/falcon.js +9 -0
- package/dist/signers/falcon.js.map +1 -1
- package/dist/signers/ledger.d.ts +9 -1
- package/dist/signers/ledger.d.ts.map +1 -1
- package/dist/signers/ledger.js +13 -1
- package/dist/signers/ledger.js.map +1 -1
- package/dist/signers/miden-wallet.d.ts +13 -1
- package/dist/signers/miden-wallet.d.ts.map +1 -1
- package/dist/signers/miden-wallet.js +25 -0
- package/dist/signers/miden-wallet.js.map +1 -1
- package/dist/signers/para.d.ts +5 -1
- package/dist/signers/para.d.ts.map +1 -1
- package/dist/signers/para.js +9 -0
- package/dist/signers/para.js.map +1 -1
- package/dist/transaction/authArgs.d.ts +2 -2
- package/dist/transaction/authArgs.js +2 -2
- package/dist/transaction/options.d.ts +2 -2
- package/dist/transaction/summary.d.ts +17 -61
- package/dist/transaction/summary.d.ts.map +1 -1
- package/dist/transaction/summary.js +49 -95
- package/dist/transaction/summary.js.map +1 -1
- package/dist/transaction.d.ts +1 -1
- package/dist/transaction.d.ts.map +1 -1
- package/dist/transaction.js +1 -1
- package/dist/transaction.js.map +1 -1
- package/dist/types/proposal.d.ts +11 -5
- package/dist/types/proposal.d.ts.map +1 -1
- package/dist/types/proposal.js.map +1 -1
- package/dist/utils/eip712.d.ts +26 -69
- package/dist/utils/eip712.d.ts.map +1 -1
- package/dist/utils/eip712.js +101 -8
- package/dist/utils/eip712.js.map +1 -1
- package/dist/utils/felt.d.ts +7 -1
- package/dist/utils/felt.d.ts.map +1 -1
- package/dist/utils/felt.js +18 -1
- package/dist/utils/felt.js.map +1 -1
- package/package.json +4 -4
- package/src/client.ts +97 -2
- package/src/index.ts +29 -8
- package/src/lookupAuth.ts +3 -22
- package/src/multisig/authArgErrors.ts +42 -1
- package/src/multisig.ts +318 -207
- package/src/proposal/metadata.ts +2 -0
- package/src/recovery/transportDrain.ts +118 -124
- package/src/session/grant.ts +143 -0
- package/src/session/key.ts +215 -0
- package/src/session/manager.ts +273 -0
- package/src/signers/ecdsa.ts +12 -1
- package/src/signers/falcon.ts +12 -1
- package/src/signers/ledger.ts +19 -2
- package/src/signers/miden-wallet.ts +29 -1
- package/src/signers/para.ts +12 -1
- package/src/transaction/authArgs.ts +2 -2
- package/src/transaction/options.ts +2 -2
- package/src/transaction/summary.ts +62 -110
- package/src/transaction.ts +1 -6
- package/src/types/proposal.ts +11 -5
- package/src/utils/eip712.ts +130 -10
- package/src/utils/felt.ts +19 -1
package/dist/types/proposal.d.ts
CHANGED
|
@@ -30,11 +30,17 @@ interface BaseProposalMetadata {
|
|
|
30
30
|
saltHex?: string;
|
|
31
31
|
requiredSignatures?: number;
|
|
32
32
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
33
|
+
* The block the proposal's transaction summary binds: the proposer's sync
|
|
34
|
+
* height when it built the request, or the block a custom producer's request
|
|
35
|
+
* names. Not signed: this SDK reads the block from the summary and refuses a
|
|
36
|
+
* proposal whose value disagrees (`BoundBlockMismatchError`), as the Rust SDK
|
|
37
|
+
* does. Every proposal this SDK creates writes it.
|
|
38
|
+
*/
|
|
39
|
+
boundBlockNum?: number;
|
|
40
|
+
/**
|
|
41
|
+
* Legacy: the base64 Miden `ChainAnchor` 0.18 clients wrote instead of
|
|
42
|
+
* `boundBlockNum`. This SDK never sets or reads it; the codec passes it
|
|
43
|
+
* through so an old proposal exports and imports unchanged.
|
|
38
44
|
*/
|
|
39
45
|
chainAnchor?: string;
|
|
40
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proposal.d.ts","sourceRoot":"","sources":["../../src/types/proposal.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"proposal.d.ts","sourceRoot":"","sources":["../../src/types/proposal.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proposal.js","sourceRoot":"","sources":["../../src/types/proposal.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"proposal.js","sourceRoot":"","sources":["../../src/types/proposal.ts"],"names":[],"mappings":"AA2EA,gFAAgF;AAChF,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAU,CAAC;AAE5D,iEAAiE;AACjE,MAAM,CAAC,MAAM,gCAAgC,GAAG,GAAG,GAAG,IAAI,CAAC;AAW3D,MAAM,UAAU,gBAAgB,CAAC,EAAgC;IAC/D,OAAO,EAAE,CAAC,eAAe,KAAK,iCAAiC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAgC;IAC/D,OAAO,EAAE,CAAC,eAAe,KAAK,SAAS,IAAI,EAAE,CAAC,eAAe,KAAK,CAAC,CAAC;AACtE,CAAC;AAKD,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,CAAC;AACnD,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,MAAM,sBAAsB,GAAG,WAAW,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAyC,EACzC,KAAyB;IAEzB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,sBAAsB,EAAE,CAAC;QAC5E,MAAM,IAAI,KAAK,CACb,eAAe,KAAK,KAAK,KAAK,wCAAwC,sBAAsB,EAAE,CAC/F,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAiED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAkB;IACrD,OAAO,QAAQ,CAAC,YAAY,CAAC,MAAM,KAAK,UAAU,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC;AACpF,CAAC"}
|
package/dist/utils/eip712.d.ts
CHANGED
|
@@ -1,80 +1,37 @@
|
|
|
1
|
+
import type { SessionGrantFields } from '@openzeppelin/guardian-client';
|
|
1
2
|
type TypedField = {
|
|
2
3
|
name: string;
|
|
3
4
|
type: string;
|
|
4
5
|
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
EIP712Domain: TypedField[];
|
|
12
|
-
};
|
|
13
|
-
primaryType: string;
|
|
14
|
-
domain: {
|
|
15
|
-
name: string;
|
|
16
|
-
version: string;
|
|
17
|
-
};
|
|
18
|
-
message: {
|
|
19
|
-
[fieldName]: string;
|
|
20
|
-
};
|
|
21
|
-
};
|
|
22
|
-
export declare function guardianRequestTypedData(requestHash: Uint8Array): {
|
|
23
|
-
types: {
|
|
24
|
-
[x: string]: TypedField[];
|
|
25
|
-
EIP712Domain: TypedField[];
|
|
26
|
-
};
|
|
6
|
+
/**
|
|
7
|
+
* EIP-712 typed data over `string`, `bytes`, `bytes32` and `uint64` fields,
|
|
8
|
+
* as Guardian signs it. Integers are decimal strings, as wallets accept them.
|
|
9
|
+
*/
|
|
10
|
+
export interface GuardianTypedData {
|
|
11
|
+
types: Record<string, TypedField[]>;
|
|
27
12
|
primaryType: string;
|
|
28
13
|
domain: {
|
|
29
14
|
name: string;
|
|
30
15
|
version: string;
|
|
31
16
|
};
|
|
32
|
-
message:
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
export declare function
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
export declare function
|
|
51
|
-
types: {
|
|
52
|
-
[x: string]: TypedField[];
|
|
53
|
-
EIP712Domain: TypedField[];
|
|
54
|
-
};
|
|
55
|
-
primaryType: string;
|
|
56
|
-
domain: {
|
|
57
|
-
name: string;
|
|
58
|
-
version: string;
|
|
59
|
-
};
|
|
60
|
-
message: {
|
|
61
|
-
[x: string]: string;
|
|
62
|
-
};
|
|
63
|
-
};
|
|
64
|
-
export declare function guardianKeyDiscoveryTypedData(challenge: Uint8Array): {
|
|
65
|
-
types: {
|
|
66
|
-
[x: string]: TypedField[];
|
|
67
|
-
EIP712Domain: TypedField[];
|
|
68
|
-
};
|
|
69
|
-
primaryType: string;
|
|
70
|
-
domain: {
|
|
71
|
-
name: string;
|
|
72
|
-
version: string;
|
|
73
|
-
};
|
|
74
|
-
message: {
|
|
75
|
-
[x: string]: string;
|
|
76
|
-
};
|
|
77
|
-
};
|
|
78
|
-
export declare function typedDataDigest(data: ReturnType<typeof typedData>): Uint8Array;
|
|
17
|
+
message: Record<string, string>;
|
|
18
|
+
}
|
|
19
|
+
export declare function guardianRequestTypedData(requestHash: Uint8Array): GuardianTypedData;
|
|
20
|
+
export declare function guardianLookupTypedData(lookupHash: Uint8Array): GuardianTypedData;
|
|
21
|
+
export declare function midenTransactionTypedData(txSummaryHash: Uint8Array): GuardianTypedData;
|
|
22
|
+
export declare function guardianKeyDiscoveryTypedData(challenge: Uint8Array): GuardianTypedData;
|
|
23
|
+
/**
|
|
24
|
+
* Readable session grant: every value Guardian binds is a top-level member,
|
|
25
|
+
* so the wallet displays the signer, the delegated key, the website, the
|
|
26
|
+
* lifetime (with a readable expiry), the scope, the Guardian key and the
|
|
27
|
+
* network instead of a hash.
|
|
28
|
+
*/
|
|
29
|
+
export declare function guardianSessionTypedData(grant: SessionGrantFields): GuardianTypedData;
|
|
30
|
+
/**
|
|
31
|
+
* Readable revoke-all: the signer whose sessions end and the request
|
|
32
|
+
* timestamp in milliseconds.
|
|
33
|
+
*/
|
|
34
|
+
export declare function guardianSessionRevokeAllTypedData(signerCommitment: string, timestampMs: number): GuardianTypedData;
|
|
35
|
+
export declare function typedDataDigest(data: GuardianTypedData): Uint8Array;
|
|
79
36
|
export {};
|
|
80
37
|
//# sourceMappingURL=eip712.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eip712.d.ts","sourceRoot":"","sources":["../../src/utils/eip712.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"eip712.d.ts","sourceRoot":"","sources":["../../src/utils/eip712.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAIxE,KAAK,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AA8BD,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,UAAU,qBAE/D;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,UAAU,qBAE7D;AAED,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,UAAU,qBAElE;AAED,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,UAAU,qBAElE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,kBAAkB,GAAG,iBAAiB,CA8BrF;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM,GAClB,iBAAiB,CAgBnB;AAgCD,wBAAgB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,UAAU,CAqBnE"}
|
package/dist/utils/eip712.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { keccak_256 } from '@noble/hashes/sha3.js';
|
|
2
2
|
import { bytesToHex, hexToBytes } from './encoding.js';
|
|
3
|
+
import { SESSION_GRANT_SCOPE, formatUtcSeconds } from '../session/grant.js';
|
|
3
4
|
const EIP191_PREFIX = 0x19;
|
|
4
5
|
const EIP712_VERSION = 0x01;
|
|
5
6
|
const DOMAIN_VERSION = '1';
|
|
7
|
+
const SESSION_DOMAIN_NAME = 'Guardian Session';
|
|
8
|
+
const UINT64_MAX = 0xffffffffffffffffn;
|
|
6
9
|
const domainFields = [
|
|
7
10
|
{ name: 'name', type: 'string' },
|
|
8
11
|
{ name: 'version', type: 'string' },
|
|
@@ -30,16 +33,106 @@ export function midenTransactionTypedData(txSummaryHash) {
|
|
|
30
33
|
export function guardianKeyDiscoveryTypedData(challenge) {
|
|
31
34
|
return typedData('Guardian Key Discovery', 'GuardianKeyDiscovery', 'challenge', bytesToHex(challenge));
|
|
32
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Readable session grant: every value Guardian binds is a top-level member,
|
|
38
|
+
* so the wallet displays the signer, the delegated key, the website, the
|
|
39
|
+
* lifetime (with a readable expiry), the scope, the Guardian key and the
|
|
40
|
+
* network instead of a hash.
|
|
41
|
+
*/
|
|
42
|
+
export function guardianSessionTypedData(grant) {
|
|
43
|
+
return {
|
|
44
|
+
types: {
|
|
45
|
+
EIP712Domain: domainFields,
|
|
46
|
+
GuardianSession: [
|
|
47
|
+
{ name: 'signer', type: 'bytes32' },
|
|
48
|
+
{ name: 'sessionKey', type: 'bytes' },
|
|
49
|
+
{ name: 'origin', type: 'string' },
|
|
50
|
+
{ name: 'issuedAt', type: 'uint64' },
|
|
51
|
+
{ name: 'expiresAt', type: 'uint64' },
|
|
52
|
+
{ name: 'expires', type: 'string' },
|
|
53
|
+
{ name: 'scope', type: 'string' },
|
|
54
|
+
{ name: 'guardianKey', type: 'bytes32' },
|
|
55
|
+
{ name: 'network', type: 'string' },
|
|
56
|
+
],
|
|
57
|
+
},
|
|
58
|
+
primaryType: 'GuardianSession',
|
|
59
|
+
domain: { name: SESSION_DOMAIN_NAME, version: DOMAIN_VERSION },
|
|
60
|
+
message: {
|
|
61
|
+
signer: grant.signerCommitment,
|
|
62
|
+
sessionKey: grant.sessionPublicKey,
|
|
63
|
+
origin: grant.origin,
|
|
64
|
+
issuedAt: String(grant.issuedAt),
|
|
65
|
+
expiresAt: String(grant.expiresAt),
|
|
66
|
+
expires: formatUtcSeconds(grant.expiresAt),
|
|
67
|
+
scope: SESSION_GRANT_SCOPE,
|
|
68
|
+
guardianKey: grant.guardianCommitment,
|
|
69
|
+
network: grant.network,
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Readable revoke-all: the signer whose sessions end and the request
|
|
75
|
+
* timestamp in milliseconds.
|
|
76
|
+
*/
|
|
77
|
+
export function guardianSessionRevokeAllTypedData(signerCommitment, timestampMs) {
|
|
78
|
+
if (!Number.isInteger(timestampMs) || timestampMs < 0) {
|
|
79
|
+
throw new Error('Revoke-all timestamp must be a non-negative integer');
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
types: {
|
|
83
|
+
EIP712Domain: domainFields,
|
|
84
|
+
GuardianSessionRevokeAll: [
|
|
85
|
+
{ name: 'signer', type: 'bytes32' },
|
|
86
|
+
{ name: 'timestamp', type: 'uint64' },
|
|
87
|
+
],
|
|
88
|
+
},
|
|
89
|
+
primaryType: 'GuardianSessionRevokeAll',
|
|
90
|
+
domain: { name: SESSION_DOMAIN_NAME, version: DOMAIN_VERSION },
|
|
91
|
+
message: { signer: signerCommitment, timestamp: String(timestampMs) },
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
function encodeField(field, value) {
|
|
95
|
+
switch (field.type) {
|
|
96
|
+
case 'string':
|
|
97
|
+
return keccak_256(new TextEncoder().encode(value));
|
|
98
|
+
case 'bytes':
|
|
99
|
+
return keccak_256(hexToBytes(value));
|
|
100
|
+
case 'bytes32': {
|
|
101
|
+
const bytes = hexToBytes(value);
|
|
102
|
+
if (bytes.length !== 32) {
|
|
103
|
+
throw new Error(`EIP-712 field ${field.name} must be 32 bytes`);
|
|
104
|
+
}
|
|
105
|
+
return bytes;
|
|
106
|
+
}
|
|
107
|
+
case 'uint64': {
|
|
108
|
+
let remaining = BigInt(value);
|
|
109
|
+
if (remaining < 0n || remaining > UINT64_MAX) {
|
|
110
|
+
throw new Error(`EIP-712 field ${field.name} must fit in uint64`);
|
|
111
|
+
}
|
|
112
|
+
const bytes = new Uint8Array(32);
|
|
113
|
+
for (let i = 31; i >= 24; i -= 1) {
|
|
114
|
+
bytes[i] = Number(remaining & 0xffn);
|
|
115
|
+
remaining >>= 8n;
|
|
116
|
+
}
|
|
117
|
+
return bytes;
|
|
118
|
+
}
|
|
119
|
+
default:
|
|
120
|
+
throw new Error(`Unsupported EIP-712 field type: ${field.type}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
33
123
|
export function typedDataDigest(data) {
|
|
34
|
-
const
|
|
35
|
-
const
|
|
124
|
+
const encoder = new TextEncoder();
|
|
125
|
+
const fields = data.types[data.primaryType];
|
|
126
|
+
const typeString = `${data.primaryType}(${fields.map((f) => `${f.type} ${f.name}`).join(',')})`;
|
|
36
127
|
const domain = new Uint8Array(96);
|
|
37
|
-
domain.set(keccak_256(
|
|
38
|
-
domain.set(keccak_256(
|
|
39
|
-
domain.set(keccak_256(
|
|
40
|
-
const struct = new Uint8Array(
|
|
41
|
-
struct.set(keccak_256(
|
|
42
|
-
|
|
128
|
+
domain.set(keccak_256(encoder.encode('EIP712Domain(string name,string version)')));
|
|
129
|
+
domain.set(keccak_256(encoder.encode(data.domain.name)), 32);
|
|
130
|
+
domain.set(keccak_256(encoder.encode(data.domain.version)), 64);
|
|
131
|
+
const struct = new Uint8Array(32 * (fields.length + 1));
|
|
132
|
+
struct.set(keccak_256(encoder.encode(typeString)));
|
|
133
|
+
fields.forEach((field, index) => {
|
|
134
|
+
struct.set(encodeField(field, data.message[field.name]), 32 * (index + 1));
|
|
135
|
+
});
|
|
43
136
|
const preimage = new Uint8Array(66);
|
|
44
137
|
preimage.set([EIP191_PREFIX, EIP712_VERSION]);
|
|
45
138
|
preimage.set(keccak_256(domain), 2);
|
package/dist/utils/eip712.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eip712.js","sourceRoot":"","sources":["../../src/utils/eip712.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"eip712.js","sourceRoot":"","sources":["../../src/utils/eip712.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/felt.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Felt } from '@miden-sdk/miden-sdk';
|
|
1
|
+
import { Felt, type Word } from '@miden-sdk/miden-sdk';
|
|
2
2
|
/**
|
|
3
3
|
* Maps an arbitrary `u64` onto a canonical field element by reducing modulo the
|
|
4
4
|
* field order, mirroring `guardian_shared::felt::felt_from_u64_reduced`.
|
|
@@ -9,4 +9,10 @@ import { Felt } from '@miden-sdk/miden-sdk';
|
|
|
9
9
|
* construction infallible, and stays byte-identical to server-side signing.
|
|
10
10
|
*/
|
|
11
11
|
export declare function feltFromU64Reduced(value: bigint): Felt;
|
|
12
|
+
/**
|
|
13
|
+
* RPO hash of `bytes` packed as 8-byte little-endian chunks (the last one
|
|
14
|
+
* zero-padded), mirroring `guardian_shared::felt::domain_tag_word`. The
|
|
15
|
+
* convention every Guardian message domain tag uses.
|
|
16
|
+
*/
|
|
17
|
+
export declare function domainTagWord(bytes: Uint8Array): Word;
|
|
12
18
|
//# sourceMappingURL=felt.d.ts.map
|
package/dist/utils/felt.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"felt.d.ts","sourceRoot":"","sources":["../../src/utils/felt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"felt.d.ts","sourceRoot":"","sources":["../../src/utils/felt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAqB,KAAK,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAQ1E;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAWrD"}
|
package/dist/utils/felt.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Felt } from '@miden-sdk/miden-sdk';
|
|
1
|
+
import { Felt, FeltArray, Rpo256 } from '@miden-sdk/miden-sdk';
|
|
2
2
|
/**
|
|
3
3
|
* Goldilocks field order (`2^64 - 2^32 + 1`), matching `Felt::ORDER` in
|
|
4
4
|
* `miden-protocol`.
|
|
@@ -16,4 +16,21 @@ const FELT_ORDER = 18446744069414584321n;
|
|
|
16
16
|
export function feltFromU64Reduced(value) {
|
|
17
17
|
return new Felt(BigInt.asUintN(64, value) % FELT_ORDER);
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* RPO hash of `bytes` packed as 8-byte little-endian chunks (the last one
|
|
21
|
+
* zero-padded), mirroring `guardian_shared::felt::domain_tag_word`. The
|
|
22
|
+
* convention every Guardian message domain tag uses.
|
|
23
|
+
*/
|
|
24
|
+
export function domainTagWord(bytes) {
|
|
25
|
+
const felts = [];
|
|
26
|
+
for (let offset = 0; offset < bytes.length; offset += 8) {
|
|
27
|
+
let value = 0n;
|
|
28
|
+
for (let i = 0; i < 8; i += 1) {
|
|
29
|
+
const byte = offset + i < bytes.length ? bytes[offset + i] : 0;
|
|
30
|
+
value |= BigInt(byte) << BigInt(8 * i);
|
|
31
|
+
}
|
|
32
|
+
felts.push(feltFromU64Reduced(value));
|
|
33
|
+
}
|
|
34
|
+
return Rpo256.hashElements(new FeltArray(felts));
|
|
35
|
+
}
|
|
19
36
|
//# sourceMappingURL=felt.js.map
|
package/dist/utils/felt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"felt.js","sourceRoot":"","sources":["../../src/utils/felt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"felt.js","sourceRoot":"","sources":["../../src/utils/felt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAa,MAAM,sBAAsB,CAAC;AAE1E;;;GAGG;AACH,MAAM,UAAU,GAAG,qBAAqB,CAAC;AAEzC;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC;AAC1D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAiB;IAC7C,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;QACxD,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/D,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD,CAAC"}
|
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.2",
|
|
4
4
|
"description": "TypeScript SDK for Miden multisig accounts with GUARDIAN integration",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -42,13 +42,13 @@
|
|
|
42
42
|
"test:qualification": "vitest run --config vitest.qualification.config.ts"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@miden-sdk/miden-sdk": "0.17.
|
|
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.2"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
|
-
"@openzeppelin/guardian-operator-client": "^0.18.
|
|
51
|
+
"@openzeppelin/guardian-operator-client": "^0.18.2",
|
|
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
|
@@ -15,6 +15,14 @@ import { requireConfigValue, requireMidenRpcEndpoint } from './config.js';
|
|
|
15
15
|
import type { MultisigConfig, Signer } from './types.js';
|
|
16
16
|
import { isSafeToAdoptGuardianState, readOnChainCommitment } from './state/adopt.js';
|
|
17
17
|
import { normalizeHexWord } from './utils/encoding.js';
|
|
18
|
+
import type { GuardianSession, SessionKeyStore } from './session/key.js';
|
|
19
|
+
import {
|
|
20
|
+
type StartSessionOptions,
|
|
21
|
+
endGuardianSession,
|
|
22
|
+
resumeGuardianSession,
|
|
23
|
+
revokeAllGuardianSessions,
|
|
24
|
+
startGuardianSession,
|
|
25
|
+
} from './session/manager.js';
|
|
18
26
|
import {
|
|
19
27
|
resolveProverConfig,
|
|
20
28
|
type ProverConfig,
|
|
@@ -99,8 +107,8 @@ export interface RecoveredAccount {
|
|
|
99
107
|
* },
|
|
100
108
|
* });
|
|
101
109
|
*
|
|
102
|
-
* // Get GUARDIAN
|
|
103
|
-
* 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);
|
|
104
112
|
*
|
|
105
113
|
* // Create multisig
|
|
106
114
|
* const config = { threshold: 2, signerCommitments: [...], guardianCommitment };
|
|
@@ -113,6 +121,7 @@ export class MultisigClient {
|
|
|
113
121
|
private readonly proverConfig: ResolvedProverConfig;
|
|
114
122
|
private readonly rpcConfig: ResolvedRpcConfig;
|
|
115
123
|
private _guardianClient: GuardianHttpClient;
|
|
124
|
+
private guardianSession: GuardianSession | null = null;
|
|
116
125
|
|
|
117
126
|
constructor(midenClient: MidenClient, config: MultisigClientConfig) {
|
|
118
127
|
this.midenClient = midenClient;
|
|
@@ -133,6 +142,7 @@ export class MultisigClient {
|
|
|
133
142
|
this._guardianClient = new GuardianHttpClient(
|
|
134
143
|
requireConfigValue('guardianEndpoint', endpoint),
|
|
135
144
|
);
|
|
145
|
+
this.guardianSession = null;
|
|
136
146
|
}
|
|
137
147
|
|
|
138
148
|
/**
|
|
@@ -142,6 +152,91 @@ export class MultisigClient {
|
|
|
142
152
|
return this._guardianClient;
|
|
143
153
|
}
|
|
144
154
|
|
|
155
|
+
/**
|
|
156
|
+
* Start a Guardian session: `signer` signs one grant, then a non-extractable
|
|
157
|
+
* browser key (the delegated signer) signs this client's session-eligible
|
|
158
|
+
* Guardian requests (state and delta reads, proposal list/get/create/sign)
|
|
159
|
+
* until the session ends. Account configuration, lookup, delta pushes,
|
|
160
|
+
* candidate abandons and transaction approvals keep using `signer`. Pass
|
|
161
|
+
* `options.store` to survive page reloads via `resumeSession`, and
|
|
162
|
+
* `options.onEnded` to learn when requests fall back to the wallet.
|
|
163
|
+
*
|
|
164
|
+
* A session this client already holds is logged out once the new one is
|
|
165
|
+
* registered. A Guardian endpoint change (`setGuardianEndpoint`) drops the
|
|
166
|
+
* session.
|
|
167
|
+
*/
|
|
168
|
+
async startSession(signer: Signer, options: StartSessionOptions = {}): Promise<GuardianSession> {
|
|
169
|
+
const previous = this.guardianSession;
|
|
170
|
+
const session = await startGuardianSession(this._guardianClient, signer, {
|
|
171
|
+
...options,
|
|
172
|
+
onEnded: this.trackSessionEnd(options.onEnded),
|
|
173
|
+
});
|
|
174
|
+
this.guardianSession = session;
|
|
175
|
+
if (previous) {
|
|
176
|
+
await endGuardianSession(this._guardianClient, previous, options.store).catch(() => false);
|
|
177
|
+
}
|
|
178
|
+
return session;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Reuse a session key stored by `startSession` without a wallet prompt.
|
|
183
|
+
* Returns `null` when there is none or it is about to expire.
|
|
184
|
+
*/
|
|
185
|
+
async resumeSession(
|
|
186
|
+
signer: Signer,
|
|
187
|
+
store: SessionKeyStore,
|
|
188
|
+
options: Pick<StartSessionOptions, 'onEnded'> = {},
|
|
189
|
+
): Promise<GuardianSession | null> {
|
|
190
|
+
const session = await resumeGuardianSession(this._guardianClient, signer, store, {
|
|
191
|
+
onEnded: this.trackSessionEnd(options.onEnded),
|
|
192
|
+
});
|
|
193
|
+
if (session) {
|
|
194
|
+
this.guardianSession = session;
|
|
195
|
+
}
|
|
196
|
+
return session;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Revoke the current session, fall back to wallet signatures, and forget its
|
|
201
|
+
* stored key. Returns whether Guardian still had the session active. On
|
|
202
|
+
* error the session stays in use.
|
|
203
|
+
*/
|
|
204
|
+
async endSession(store?: SessionKeyStore): Promise<boolean> {
|
|
205
|
+
const session = this.guardianSession;
|
|
206
|
+
if (!session) {
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
const revoked = await endGuardianSession(this._guardianClient, session, store);
|
|
210
|
+
if (this.guardianSession === session) {
|
|
211
|
+
this.guardianSession = null;
|
|
212
|
+
}
|
|
213
|
+
return revoked;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Revoke every session of `signer` on the Guardian with a wallet signature,
|
|
218
|
+
* including sessions started in other tabs or devices; stop using the
|
|
219
|
+
* current one and forget its stored key. Use it when a session key may be
|
|
220
|
+
* compromised, and run it again 10 minutes later: it ends only sessions
|
|
221
|
+
* already registered, and a page can register a grant it got signed for up
|
|
222
|
+
* to about 10 minutes. Returns how many sessions Guardian revoked.
|
|
223
|
+
*/
|
|
224
|
+
async revokeAllSessions(signer: Signer, store?: SessionKeyStore): Promise<number> {
|
|
225
|
+
return revokeAllGuardianSessions(this._guardianClient, signer, store);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/** Forgets the session this client holds once Guardian stops using it. */
|
|
229
|
+
private trackSessionEnd(
|
|
230
|
+
onEnded: StartSessionOptions['onEnded'],
|
|
231
|
+
): NonNullable<StartSessionOptions['onEnded']> {
|
|
232
|
+
return (reason, session) => {
|
|
233
|
+
if (this.guardianSession === session) {
|
|
234
|
+
this.guardianSession = null;
|
|
235
|
+
}
|
|
236
|
+
onEnded?.(reason, session);
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
|
|
145
240
|
/**
|
|
146
241
|
* Recover the set of accounts a given signer authorizes by querying
|
|
147
242
|
* Guardian's `/state/lookup` endpoint and fetching state for each match.
|
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 };
|
|
@@ -56,6 +56,30 @@ export type {
|
|
|
56
56
|
export type { ProverConfig, ProverRetryPolicy } from './prover/config.js';
|
|
57
57
|
export type { RpcConfig, RpcRetryPolicy } from './rpc/config.js';
|
|
58
58
|
export { lookupAuthDigest } from './lookupAuth.js';
|
|
59
|
+
export {
|
|
60
|
+
SESSION_GRANT_SCOPE,
|
|
61
|
+
describeSessionGrant,
|
|
62
|
+
sessionGrantDigest,
|
|
63
|
+
sessionLogoutDigest,
|
|
64
|
+
sessionRevokeAllDigest,
|
|
65
|
+
} from './session/grant.js';
|
|
66
|
+
export {
|
|
67
|
+
GuardianSession,
|
|
68
|
+
IndexedDbSessionKeyStore,
|
|
69
|
+
type GuardianSessionOptions,
|
|
70
|
+
WebCryptoSessionKey,
|
|
71
|
+
type SessionKeyStore,
|
|
72
|
+
type StoredSessionKey,
|
|
73
|
+
} from './session/key.js';
|
|
74
|
+
export {
|
|
75
|
+
GuardianSessionsUnsupportedError,
|
|
76
|
+
SessionGrantDeclinedError,
|
|
77
|
+
endGuardianSession,
|
|
78
|
+
resumeGuardianSession,
|
|
79
|
+
revokeAllGuardianSessions,
|
|
80
|
+
startGuardianSession,
|
|
81
|
+
type StartSessionOptions,
|
|
82
|
+
} from './session/manager.js';
|
|
59
83
|
export {
|
|
60
84
|
Multisig,
|
|
61
85
|
type AccountState,
|
|
@@ -67,15 +91,10 @@ export {
|
|
|
67
91
|
export { AccountInspector, type DetectedMultisigConfig, type VaultBalance } from './inspector.js';
|
|
68
92
|
export {
|
|
69
93
|
ChainBehindBoundBlockError,
|
|
70
|
-
chainAnchorFromBase64,
|
|
71
|
-
chainAnchorToBase64,
|
|
72
|
-
chainAnchorBlockNum,
|
|
73
|
-
executeForSummary,
|
|
74
|
-
executeForSummaryAt,
|
|
75
94
|
executeForSummaryAtTip,
|
|
76
95
|
summaryApprovalExpirationBlockNum,
|
|
96
|
+
summaryBoundBlockNum,
|
|
77
97
|
summarySalt,
|
|
78
|
-
SummaryAnchorMismatchError,
|
|
79
98
|
buildUpdateSignersTransactionRequest,
|
|
80
99
|
buildUpdateProcedureThresholdTransactionRequest,
|
|
81
100
|
buildUpdateGuardianTransactionRequest,
|
|
@@ -196,9 +215,11 @@ export {
|
|
|
196
215
|
|
|
197
216
|
export {
|
|
198
217
|
type AuthArgErrorCode,
|
|
218
|
+
BoundBlockMismatchError,
|
|
199
219
|
BoundBlockNotDeclaredError,
|
|
200
220
|
MultisigAuthArgsMissingError,
|
|
201
221
|
ProposalSaltMalformedError,
|
|
222
|
+
TransactionSummaryLayoutError,
|
|
202
223
|
} from './multisig/authArgErrors.js';
|
|
203
224
|
|
|
204
225
|
export {
|
package/src/lookupAuth.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { feltFromU64Reduced } from './utils/felt.js';
|
|
1
|
+
import { FeltArray, Rpo256, Word } from '@miden-sdk/miden-sdk';
|
|
2
|
+
import { domainTagWord, feltFromU64Reduced } from './utils/felt.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Lookup-bound message format used to sign requests against the Guardian
|
|
@@ -12,32 +12,13 @@ const DOMAIN_TAG_BYTES = new TextEncoder().encode('guardian.lookup.v1');
|
|
|
12
12
|
|
|
13
13
|
let cachedDomainTag: Word | null = null;
|
|
14
14
|
|
|
15
|
-
/**
|
|
16
|
-
* Convert a byte array to a sequence of Goldilocks-field felts using the same
|
|
17
|
-
* 8-byte little-endian chunking convention as
|
|
18
|
-
* `guardian_shared::auth_request_payload::AuthRequestPayload::from_bytes`. The
|
|
19
|
-
* final chunk is zero-padded if `bytes.length` is not a multiple of 8.
|
|
20
|
-
*/
|
|
21
|
-
function bytesToFelts(bytes: Uint8Array): Felt[] {
|
|
22
|
-
const felts: Felt[] = [];
|
|
23
|
-
for (let offset = 0; offset < bytes.length; offset += 8) {
|
|
24
|
-
let value = 0n;
|
|
25
|
-
for (let i = 0; i < 8; i += 1) {
|
|
26
|
-
const byte = offset + i < bytes.length ? bytes[offset + i] : 0;
|
|
27
|
-
value |= BigInt(byte) << BigInt(8 * i);
|
|
28
|
-
}
|
|
29
|
-
felts.push(feltFromU64Reduced(value));
|
|
30
|
-
}
|
|
31
|
-
return felts;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
15
|
/**
|
|
35
16
|
* The 4-felt RPO domain tag prepended to every lookup digest, computed once
|
|
36
17
|
* from `DOMAIN_TAG_BYTES`. Cached on first call.
|
|
37
18
|
*/
|
|
38
19
|
function lookupDomainTag(): Word {
|
|
39
20
|
if (cachedDomainTag === null) {
|
|
40
|
-
cachedDomainTag =
|
|
21
|
+
cachedDomainTag = domainTagWord(DOMAIN_TAG_BYTES);
|
|
41
22
|
}
|
|
42
23
|
return cachedDomainTag;
|
|
43
24
|
}
|