@openzeppelin/miden-multisig-client 0.12.6 → 0.12.8
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 +70 -75
- package/dist/account/builder.d.ts +0 -18
- package/dist/account/builder.d.ts.map +1 -1
- package/dist/account/builder.js +16 -24
- package/dist/account/builder.js.map +1 -1
- package/dist/account/masm.d.ts +2 -0
- package/dist/account/masm.d.ts.map +1 -1
- package/dist/account/masm.js +428 -1
- package/dist/account/masm.js.map +1 -1
- package/dist/account/storage.d.ts.map +1 -1
- package/dist/account/storage.js +5 -6
- package/dist/account/storage.js.map +1 -1
- package/dist/client.d.ts +5 -57
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +7 -53
- package/dist/client.js.map +1 -1
- package/dist/client.test.js +28 -0
- package/dist/client.test.js.map +1 -1
- package/dist/index.d.ts +3 -46
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -45
- package/dist/index.js.map +1 -1
- package/dist/inspector.d.ts +4 -30
- package/dist/inspector.d.ts.map +1 -1
- package/dist/inspector.js +13 -43
- package/dist/inspector.js.map +1 -1
- package/dist/multisig/helpers.d.ts.map +1 -1
- package/dist/multisig/helpers.js.map +1 -1
- package/dist/multisig.d.ts +39 -161
- package/dist/multisig.d.ts.map +1 -1
- package/dist/multisig.js +190 -241
- package/dist/multisig.js.map +1 -1
- package/dist/multisig.test.js +41 -31
- package/dist/multisig.test.js.map +1 -1
- package/dist/procedures.d.ts +20 -47
- package/dist/procedures.d.ts.map +1 -1
- package/dist/procedures.js +17 -50
- package/dist/procedures.js.map +1 -1
- package/dist/signer.d.ts +11 -26
- package/dist/signer.d.ts.map +1 -1
- package/dist/signer.js +41 -26
- package/dist/signer.js.map +1 -1
- package/dist/transaction/options.d.ts +2 -0
- package/dist/transaction/options.d.ts.map +1 -1
- package/dist/transaction/updatePsm.d.ts.map +1 -1
- package/dist/transaction/updatePsm.js +21 -3
- package/dist/transaction/updatePsm.js.map +1 -1
- package/dist/transaction/updateSigners.d.ts.map +1 -1
- package/dist/transaction/updateSigners.js +21 -3
- package/dist/transaction/updateSigners.js.map +1 -1
- package/dist/transaction.d.ts.map +1 -1
- package/dist/transaction.js +0 -2
- package/dist/transaction.js.map +1 -1
- package/dist/transaction.test.js +5 -0
- package/dist/transaction.test.js.map +1 -1
- package/dist/types/proposal.d.ts +16 -8
- package/dist/types/proposal.d.ts.map +1 -1
- package/dist/types.d.ts +18 -14
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/signature.d.ts +10 -2
- package/dist/utils/signature.d.ts.map +1 -1
- package/dist/utils/signature.js +77 -5
- package/dist/utils/signature.js.map +1 -1
- package/dist/utils/signature.test.js +16 -1
- package/dist/utils/signature.test.js.map +1 -1
- package/masm/multisig_ecdsa.masm +424 -0
- package/masm/psm_ecdsa.masm +179 -0
- package/package.json +2 -2
- package/src/account/builder.ts +18 -25
- package/src/account/masm.ts +433 -2
- package/src/account/storage.ts +5 -6
- package/src/client.test.ts +36 -0
- package/src/client.ts +10 -59
- package/src/index.ts +13 -62
- package/src/inspector.ts +15 -44
- package/src/multisig/helpers.ts +1 -2
- package/src/multisig.test.ts +45 -34
- package/src/multisig.ts +246 -273
- package/src/procedures.ts +21 -56
- package/src/signer.ts +48 -28
- package/src/transaction/options.ts +2 -0
- package/src/transaction/updatePsm.ts +24 -3
- package/src/transaction/updateSigners.ts +25 -3
- package/src/transaction.test.ts +6 -0
- package/src/transaction.ts +0 -2
- package/src/types/proposal.ts +15 -8
- package/src/types.ts +26 -16
- package/src/utils/signature.test.ts +24 -1
- package/src/utils/signature.ts +86 -4
package/dist/multisig.d.ts
CHANGED
|
@@ -1,196 +1,74 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Multisig class representing a created or loaded multisig account.
|
|
3
|
-
*
|
|
4
|
-
* This class wraps a Miden SDK Account and provides PSM integration
|
|
5
|
-
* for proposal management.
|
|
6
|
-
*/
|
|
7
1
|
import { PsmHttpClient, type Signer } from '@openzeppelin/psm-client';
|
|
8
|
-
import type { ConsumableNote,
|
|
2
|
+
import type { ConsumableNote, MultisigConfig, TransactionProposal, ProposalMetadata, ProposalType, SignTransactionProposalParams, SyncResult, TransactionProposalResult } from './types.js';
|
|
9
3
|
import type { ProcedureName } from './procedures.js';
|
|
4
|
+
import { type DetectedMultisigConfig } from './inspector.js';
|
|
10
5
|
import type { WebClient } from '@demox-labs/miden-sdk';
|
|
11
6
|
import { Account } from '@demox-labs/miden-sdk';
|
|
12
|
-
/**
|
|
13
|
-
* Result of fetching account state from PSM.
|
|
14
|
-
*/
|
|
15
7
|
export interface AccountState {
|
|
16
|
-
/** Account ID */
|
|
17
8
|
accountId: string;
|
|
18
|
-
/** Current commitment */
|
|
19
9
|
commitment: string;
|
|
20
|
-
/** Raw state data (base64-encoded serialized account) */
|
|
21
10
|
stateDataBase64: string;
|
|
22
11
|
createdAt: string;
|
|
23
12
|
updatedAt: string;
|
|
13
|
+
authScheme?: string;
|
|
24
14
|
}
|
|
25
|
-
/**
|
|
26
|
-
* Represents a multisig account with PSM integration.
|
|
27
|
-
*/
|
|
28
15
|
export declare class Multisig {
|
|
29
16
|
readonly account: Account | null;
|
|
30
17
|
readonly threshold: number;
|
|
31
18
|
readonly signerCommitments: string[];
|
|
32
19
|
readonly psmCommitment: string;
|
|
20
|
+
psmPublicKey?: string;
|
|
33
21
|
readonly procedureThresholds: Map<ProcedureName, number>;
|
|
22
|
+
readonly signatureScheme: Signer['scheme'];
|
|
34
23
|
private psm;
|
|
35
24
|
private readonly signer;
|
|
36
25
|
private readonly webClient;
|
|
37
26
|
private readonly _accountId;
|
|
38
27
|
private proposals;
|
|
39
28
|
constructor(account: Account | null, config: MultisigConfig, psm: PsmHttpClient, signer: Signer, webClient: WebClient, accountId?: string);
|
|
40
|
-
/** The account ID as a string */
|
|
41
29
|
get accountId(): string;
|
|
42
|
-
/** The signer's commitment */
|
|
43
30
|
get signerCommitment(): string;
|
|
44
|
-
|
|
45
|
-
* Maps a proposal type to the procedure that determines its threshold.
|
|
46
|
-
*/
|
|
31
|
+
setPsmPublicKey(pubkey?: string): void;
|
|
47
32
|
private getProposalProcedure;
|
|
48
|
-
/**
|
|
49
|
-
* Get the effective threshold for a given proposal type.
|
|
50
|
-
* Returns the procedure-specific threshold if configured, otherwise the default threshold.
|
|
51
|
-
*
|
|
52
|
-
* @param proposalType - The type of proposal
|
|
53
|
-
* @returns The threshold that applies to this proposal type
|
|
54
|
-
*/
|
|
55
33
|
getEffectiveThreshold(proposalType: ProposalType): number;
|
|
56
|
-
/**
|
|
57
|
-
* Update the PSM client used by this Multisig instance.
|
|
58
|
-
*
|
|
59
|
-
* @param psmClient - The new PSM HTTP client
|
|
60
|
-
*/
|
|
61
34
|
setPsmClient(psmClient: PsmHttpClient): void;
|
|
62
|
-
/**
|
|
63
|
-
* Fetch the current account state from PSM.
|
|
64
|
-
*
|
|
65
|
-
* @returns The account state including commitment and serialized data
|
|
66
|
-
*/
|
|
67
35
|
fetchState(): Promise<AccountState>;
|
|
68
|
-
/**
|
|
69
|
-
* Sync account state from PSM into the local WebClient store.
|
|
70
|
-
*
|
|
71
|
-
* If the PSM commitment differs from the local commitment (or the account
|
|
72
|
-
* is missing locally), the local store is overwritten with the PSM state.
|
|
73
|
-
*/
|
|
74
36
|
syncState(): Promise<AccountState>;
|
|
75
|
-
/**
|
|
76
|
-
* Register this multisig account on the PSM server.
|
|
77
|
-
*
|
|
78
|
-
* The initial state must be the serialized Account bytes (base64-encoded).
|
|
79
|
-
* If not provided, the account's serialize() method is used.
|
|
80
|
-
*
|
|
81
|
-
* @param initialStateBase64 - Optional base64-encoded serialized Account.¡
|
|
82
|
-
*/
|
|
83
37
|
registerOnPsm(initialStateBase64?: string): Promise<void>;
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
*
|
|
111
|
-
* @param signerToRemove - Commitment of the signer to remove (hex)
|
|
112
|
-
* @param nonce - Optional proposal nonce (defaults to Date.now())
|
|
113
|
-
* @param newThreshold - Optional new threshold (defaults to min of current threshold and new signer count)
|
|
114
|
-
*/
|
|
115
|
-
createRemoveSignerProposal(signerToRemove: string, nonce?: number, newThreshold?: number): Promise<Proposal>;
|
|
116
|
-
/**
|
|
117
|
-
* Create a "change threshold" proposal.
|
|
118
|
-
*
|
|
119
|
-
* @param newThreshold - The new threshold value
|
|
120
|
-
* @param nonce - Optional proposal nonce (defaults to Date.now())
|
|
121
|
-
*/
|
|
122
|
-
createChangeThresholdProposal(newThreshold: number, nonce?: number): Promise<Proposal>;
|
|
123
|
-
/**
|
|
124
|
-
* Create a "switch PSM" proposal to change the PSM provider.
|
|
125
|
-
*
|
|
126
|
-
* @param newPsmEndpoint - The new PSM server endpoint URL
|
|
127
|
-
* @param newPsmPubkey - The new PSM server's public key commitment (hex)
|
|
128
|
-
* @param nonce - Optional proposal nonce (defaults to Date.now())
|
|
129
|
-
*/
|
|
130
|
-
createSwitchPsmProposal(newPsmEndpoint: string, newPsmPubkey: string, nonce?: number): Promise<Proposal>;
|
|
131
|
-
/**
|
|
132
|
-
* Create a "consume notes" proposal to consume notes sent to the multisig account.
|
|
133
|
-
*
|
|
134
|
-
* @param noteIds - IDs of the notes to consume (hex strings)
|
|
135
|
-
* @param nonce - Optional proposal nonce (defaults to Date.now())
|
|
136
|
-
*/
|
|
137
|
-
createConsumeNotesProposal(noteIds: string[], nonce?: number): Promise<Proposal>;
|
|
138
|
-
/**
|
|
139
|
-
* Create a P2ID proposal to send funds to another account.
|
|
140
|
-
*
|
|
141
|
-
* @param recipientId - Account ID of the recipient (hex string)
|
|
142
|
-
* @param faucetId - Faucet/token account ID (hex string)
|
|
143
|
-
* @param amount - Amount to send
|
|
144
|
-
* @param nonce - Optional proposal nonce (defaults to Date.now())
|
|
145
|
-
*/
|
|
146
|
-
createP2idProposal(recipientId: string, faucetId: string, amount: bigint, nonce?: number): Promise<Proposal>;
|
|
147
|
-
/**
|
|
148
|
-
* Get notes that can be consumed by this multisig account.
|
|
149
|
-
*
|
|
150
|
-
* Returns a list of notes that are committed on-chain and can be consumed
|
|
151
|
-
* immediately by the multisig account.
|
|
152
|
-
*/
|
|
38
|
+
syncAll(): Promise<SyncResult>;
|
|
39
|
+
getAccountConfig(): Promise<DetectedMultisigConfig>;
|
|
40
|
+
switchPsm(psmClient: PsmHttpClient): Promise<void>;
|
|
41
|
+
syncTransactionProposals(): Promise<TransactionProposal[]>;
|
|
42
|
+
listTransactionProposals(): TransactionProposal[];
|
|
43
|
+
createProposal(nonce: number, txSummaryBase64: string, metadata: ProposalMetadata): Promise<TransactionProposal>;
|
|
44
|
+
createAddSignerProposal(newCommitment: string, options?: {
|
|
45
|
+
nonce?: number;
|
|
46
|
+
newThreshold?: number;
|
|
47
|
+
}): Promise<TransactionProposalResult>;
|
|
48
|
+
createRemoveSignerProposal(signerToRemove: string, options?: {
|
|
49
|
+
nonce?: number;
|
|
50
|
+
newThreshold?: number;
|
|
51
|
+
}): Promise<TransactionProposalResult>;
|
|
52
|
+
createChangeThresholdProposal(newThreshold: number, options?: {
|
|
53
|
+
nonce?: number;
|
|
54
|
+
}): Promise<TransactionProposalResult>;
|
|
55
|
+
createSwitchPsmProposal(newPsmEndpoint: string, newPsmPubkey: string, options?: {
|
|
56
|
+
nonce?: number;
|
|
57
|
+
}): Promise<TransactionProposalResult>;
|
|
58
|
+
createConsumeNotesProposal(noteIds: string[], options?: {
|
|
59
|
+
nonce?: number;
|
|
60
|
+
}): Promise<TransactionProposalResult>;
|
|
61
|
+
createSendProposal(recipientId: string, faucetId: string, amount: bigint, options?: {
|
|
62
|
+
nonce?: number;
|
|
63
|
+
}): Promise<TransactionProposalResult>;
|
|
153
64
|
getConsumableNotes(): Promise<ConsumableNote[]>;
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
*/
|
|
162
|
-
signProposal(proposalId: string): Promise<Proposal>;
|
|
163
|
-
/**
|
|
164
|
-
* Execute a proposal that has enough signatures.
|
|
165
|
-
*
|
|
166
|
-
* @param proposalId - The proposal commitment/ID
|
|
167
|
-
*/
|
|
168
|
-
executeProposal(proposalId: string): Promise<void>;
|
|
169
|
-
/**
|
|
170
|
-
* Export a proposal for offline signing
|
|
171
|
-
*/
|
|
172
|
-
exportProposal(proposalId: string): Promise<ExportedProposal>;
|
|
173
|
-
/**
|
|
174
|
-
* Export a proposal to JSON for side-channel sharing.
|
|
175
|
-
*
|
|
176
|
-
* @param proposalId - The proposal commitment/ID
|
|
177
|
-
* @returns JSON string that can be shared and imported by other signers
|
|
178
|
-
*/
|
|
179
|
-
exportProposalToJson(proposalId: string): string;
|
|
180
|
-
/**
|
|
181
|
-
* Import a proposal from JSON (exported via exportProposalToJson).
|
|
182
|
-
*
|
|
183
|
-
* @param json - JSON string from exportProposalToJson
|
|
184
|
-
* @returns The imported proposal
|
|
185
|
-
*/
|
|
186
|
-
importProposal(json: string): Proposal;
|
|
187
|
-
/**
|
|
188
|
-
* Sign an imported proposal and return updated JSON for sharing..
|
|
189
|
-
*
|
|
190
|
-
* @param proposalId - The proposal commitment/ID
|
|
191
|
-
* @returns Updated JSON string with the new signature included
|
|
192
|
-
*/
|
|
193
|
-
signProposalOffline(proposalId: string): string;
|
|
65
|
+
signTransactionProposal(commitment: string): Promise<TransactionProposal[]>;
|
|
66
|
+
signTransactionProposalExternal(params: SignTransactionProposalParams): Promise<TransactionProposal[]>;
|
|
67
|
+
executeTransactionProposal(commitment: string): Promise<void>;
|
|
68
|
+
exportTransactionProposalToJson(commitment: string): string;
|
|
69
|
+
importTransactionProposal(json: string): TransactionProposalResult;
|
|
70
|
+
signTransactionProposalOffline(commitment: string): string;
|
|
71
|
+
private syncAfterCreate;
|
|
194
72
|
private deltaToProposal;
|
|
195
73
|
private buildPsmMetadata;
|
|
196
74
|
private fromPsmMetadata;
|
package/dist/multisig.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multisig.d.ts","sourceRoot":"","sources":["../src/multisig.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"multisig.d.ts","sourceRoot":"","sources":["../src/multisig.ts"],"names":[],"mappings":"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"}
|