@openzeppelin/miden-multisig-client 0.16.2 → 0.17.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 +144 -7
- package/dist/account/builder.d.ts.map +1 -1
- package/dist/account/builder.js +32 -25
- package/dist/account/builder.js.map +1 -1
- package/dist/account/builder.test.js +73 -21
- package/dist/account/builder.test.js.map +1 -1
- package/dist/account/layout.d.ts +31 -0
- package/dist/account/layout.d.ts.map +1 -0
- package/dist/account/layout.js +31 -0
- package/dist/account/layout.js.map +1 -0
- package/dist/account/masm/account-components/auth.d.ts +1 -4
- package/dist/account/masm/account-components/auth.d.ts.map +1 -1
- package/dist/account/masm/account-components/auth.js +36 -53
- package/dist/account/masm/account-components/auth.js.map +1 -1
- package/dist/account/masm/index.d.ts +0 -1
- package/dist/account/masm/index.d.ts.map +1 -1
- package/dist/account/masm/index.js +0 -1
- package/dist/account/masm/index.js.map +1 -1
- package/dist/account/storage.d.ts +4 -0
- package/dist/account/storage.d.ts.map +1 -1
- package/dist/account/storage.js +9 -20
- package/dist/account/storage.js.map +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +5 -3
- package/dist/client.js.map +1 -1
- package/dist/client.test.js +68 -15
- package/dist/client.test.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/inspector.d.ts +59 -1
- package/dist/inspector.d.ts.map +1 -1
- package/dist/inspector.js +157 -29
- package/dist/inspector.js.map +1 -1
- package/dist/inspector.test.js +246 -37
- package/dist/inspector.test.js.map +1 -1
- package/dist/multisig.d.ts +106 -32
- package/dist/multisig.d.ts.map +1 -1
- package/dist/multisig.js +289 -95
- package/dist/multisig.js.map +1 -1
- package/dist/multisig.test.js +581 -58
- package/dist/multisig.test.js.map +1 -1
- package/dist/procedures.d.ts +6 -7
- package/dist/procedures.d.ts.map +1 -1
- package/dist/procedures.js +6 -7
- package/dist/procedures.js.map +1 -1
- package/dist/proposal/metadata.d.ts.map +1 -1
- package/dist/proposal/metadata.js +13 -2
- package/dist/proposal/metadata.js.map +1 -1
- package/dist/proposal/metadata.test.js +57 -0
- package/dist/proposal/metadata.test.js.map +1 -1
- package/dist/prover/workflow.d.ts +3 -2
- package/dist/prover/workflow.d.ts.map +1 -1
- package/dist/prover/workflow.js +5 -2
- package/dist/prover/workflow.js.map +1 -1
- package/dist/prover/workflow.test.js +6 -4
- package/dist/prover/workflow.test.js.map +1 -1
- package/dist/transaction/index.d.ts +1 -1
- package/dist/transaction/index.d.ts.map +1 -1
- package/dist/transaction/index.js +1 -1
- package/dist/transaction/index.js.map +1 -1
- package/dist/transaction/p2id.d.ts +17 -6
- package/dist/transaction/p2id.d.ts.map +1 -1
- package/dist/transaction/p2id.js +22 -31
- package/dist/transaction/p2id.js.map +1 -1
- package/dist/transaction/p2id.test.js +62 -24
- package/dist/transaction/p2id.test.js.map +1 -1
- package/dist/transaction/summary.d.ts +45 -2
- package/dist/transaction/summary.d.ts.map +1 -1
- package/dist/transaction/summary.js +42 -2
- package/dist/transaction/summary.js.map +1 -1
- package/dist/transaction/summary.test.d.ts +2 -0
- package/dist/transaction/summary.test.d.ts.map +1 -0
- package/dist/transaction/summary.test.js +26 -0
- package/dist/transaction/summary.test.js.map +1 -0
- package/dist/transaction/updateGuardian.d.ts.map +1 -1
- package/dist/transaction/updateGuardian.js +16 -18
- package/dist/transaction/updateGuardian.js.map +1 -1
- package/dist/transaction/updateProcedureThreshold.d.ts.map +1 -1
- package/dist/transaction/updateProcedureThreshold.js +15 -17
- package/dist/transaction/updateProcedureThreshold.js.map +1 -1
- package/dist/transaction/updateSigners.d.ts +6 -1
- package/dist/transaction/updateSigners.d.ts.map +1 -1
- package/dist/transaction/updateSigners.js +20 -17
- package/dist/transaction/updateSigners.js.map +1 -1
- package/dist/transaction.d.ts +2 -2
- 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 +28 -4
- package/dist/types/proposal.d.ts.map +1 -1
- package/dist/types/proposal.js +18 -0
- package/dist/types/proposal.js.map +1 -1
- package/dist/types.d.ts +0 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/signature.d.ts +11 -7
- package/dist/utils/signature.d.ts.map +1 -1
- package/dist/utils/signature.js +24 -58
- package/dist/utils/signature.js.map +1 -1
- package/dist/utils/word.d.ts +7 -0
- package/dist/utils/word.d.ts.map +1 -1
- package/dist/utils/word.js +15 -0
- package/dist/utils/word.js.map +1 -1
- package/masm/account_components/auth/guarded_multisig.masm +42 -0
- package/package.json +7 -4
- package/src/account/builder.test.ts +111 -45
- package/src/account/builder.ts +45 -33
- package/src/account/layout.ts +33 -0
- package/src/account/masm/account-components/auth.ts +36 -56
- package/src/account/masm/index.ts +0 -1
- package/src/account/storage.ts +9 -22
- package/src/client.test.ts +80 -15
- package/src/client.ts +5 -3
- package/src/index.ts +26 -1
- package/src/inspector.test.ts +330 -38
- package/src/inspector.ts +196 -33
- package/src/multisig.test.ts +679 -63
- package/src/multisig.ts +361 -107
- package/src/procedures.ts +6 -7
- package/src/proposal/metadata.test.ts +76 -0
- package/src/proposal/metadata.ts +13 -2
- package/src/prover/workflow.test.ts +9 -4
- package/src/prover/workflow.ts +15 -3
- package/src/transaction/index.ts +7 -1
- package/src/transaction/p2id.test.ts +112 -31
- package/src/transaction/p2id.ts +39 -38
- package/src/transaction/summary.test.ts +32 -0
- package/src/transaction/summary.ts +83 -4
- package/src/transaction/updateGuardian.ts +15 -25
- package/src/transaction/updateProcedureThreshold.ts +13 -29
- package/src/transaction/updateSigners.ts +38 -30
- package/src/transaction.ts +8 -1
- package/src/types/proposal.ts +43 -4
- package/src/types.ts +0 -1
- package/src/utils/signature.ts +32 -65
- package/src/utils/word.ts +17 -0
- package/dist/account/masm/auth.d.ts +0 -5
- package/dist/account/masm/auth.d.ts.map +0 -1
- package/dist/account/masm/auth.js +0 -1509
- package/dist/account/masm/auth.js.map +0 -1
- package/masm/account_components/auth/multisig.masm +0 -12
- package/masm/account_components/auth/multisig_ecdsa.masm +0 -12
- package/masm/account_components/auth/multisig_guardian.masm +0 -16
- package/masm/account_components/auth/multisig_guardian_ecdsa.masm +0 -16
- package/masm/auth/guardian.masm +0 -199
- package/masm/auth/guardian_ecdsa.masm +0 -195
- package/masm/auth/multisig.masm +0 -554
- package/masm/auth/multisig_ecdsa.masm +0 -554
- package/src/account/masm/auth.ts +0 -1512
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
-
const {
|
|
2
|
+
const { mockFungibleAssetConstructor, mockHashElements, mockNormalizeHexWord, mockRandomWord, mockWordFromHex, noteMetadataCalls, noteRecipientCalls, noteStorageCalls, saltFelts, } = vi.hoisted(() => {
|
|
3
3
|
const saltFelts = [
|
|
4
4
|
{ id: 'felt-0' },
|
|
5
5
|
{ id: 'felt-1' },
|
|
@@ -7,13 +7,10 @@ const { mockFromVaultKey, mockFungibleAssetConstructor, mockHashElements, mockNo
|
|
|
7
7
|
{ id: 'felt-3' },
|
|
8
8
|
];
|
|
9
9
|
return {
|
|
10
|
-
mockFromVaultKey: vi.fn((vaultKey, amount) => ({
|
|
11
|
-
kind: 'asset-from-vault-key',
|
|
12
|
-
vaultKey,
|
|
13
|
-
amount,
|
|
14
|
-
})),
|
|
15
10
|
mockFungibleAssetConstructor: vi.fn(),
|
|
16
11
|
noteMetadataCalls: [],
|
|
12
|
+
noteRecipientCalls: [],
|
|
13
|
+
noteStorageCalls: [],
|
|
17
14
|
mockHashElements: vi.fn().mockReturnValue({ toString: () => 'serial' }),
|
|
18
15
|
mockNormalizeHexWord: vi.fn((hex) => hex),
|
|
19
16
|
mockRandomWord: vi.fn().mockReturnValue({
|
|
@@ -53,7 +50,9 @@ vi.mock('@miden-sdk/miden-sdk', () => {
|
|
|
53
50
|
constructor(_assets) { }
|
|
54
51
|
}
|
|
55
52
|
class NoteStorage {
|
|
56
|
-
constructor(
|
|
53
|
+
constructor(inputs) {
|
|
54
|
+
noteStorageCalls.push([inputs]);
|
|
55
|
+
}
|
|
57
56
|
}
|
|
58
57
|
class NoteMetadata {
|
|
59
58
|
constructor(sender, noteType, noteTag) {
|
|
@@ -61,7 +60,9 @@ vi.mock('@miden-sdk/miden-sdk', () => {
|
|
|
61
60
|
}
|
|
62
61
|
}
|
|
63
62
|
class NoteRecipient {
|
|
64
|
-
constructor(
|
|
63
|
+
constructor(serialNum, noteScript, noteInputs) {
|
|
64
|
+
noteRecipientCalls.push([serialNum, noteScript, noteInputs]);
|
|
65
|
+
}
|
|
65
66
|
}
|
|
66
67
|
class Note {
|
|
67
68
|
constructor(_assets, _metadata, _recipient) { }
|
|
@@ -70,7 +71,6 @@ vi.mock('@miden-sdk/miden-sdk', () => {
|
|
|
70
71
|
constructor(faucet, amount) {
|
|
71
72
|
mockFungibleAssetConstructor(faucet, amount);
|
|
72
73
|
}
|
|
73
|
-
static fromVaultKey = mockFromVaultKey;
|
|
74
74
|
}
|
|
75
75
|
class NoteArray {
|
|
76
76
|
constructor(_notes) { }
|
|
@@ -111,6 +111,7 @@ vi.mock('@miden-sdk/miden-sdk', () => {
|
|
|
111
111
|
NoteStorage,
|
|
112
112
|
NoteScript: {
|
|
113
113
|
p2id: vi.fn(() => ({ kind: 'p2id-script' })),
|
|
114
|
+
p2ide: vi.fn(() => ({ kind: 'p2ide-script' })),
|
|
114
115
|
},
|
|
115
116
|
NoteTag: {
|
|
116
117
|
withAccountTarget: vi.fn(() => ({ kind: 'tag' })),
|
|
@@ -138,31 +139,22 @@ vi.mock('../utils/random.js', () => ({
|
|
|
138
139
|
randomWord: mockRandomWord,
|
|
139
140
|
}));
|
|
140
141
|
import { buildP2idTransactionRequest, parseP2idNoteType, p2idNoteTypeToMetadata } from './p2id.js';
|
|
141
|
-
const FAUCET_ID = '0x7bfb0f38b0fafa103f86a805594171';
|
|
142
|
-
const mockAccount = {
|
|
143
|
-
vault: () => ({
|
|
144
|
-
fungibleAssets: () => [
|
|
145
|
-
{
|
|
146
|
-
faucetId: () => ({ toString: () => FAUCET_ID }),
|
|
147
|
-
vaultKey: () => ({ kind: 'vault-key' }),
|
|
148
|
-
},
|
|
149
|
-
],
|
|
150
|
-
}),
|
|
151
|
-
};
|
|
152
142
|
import { NoteType } from '@miden-sdk/miden-sdk';
|
|
143
|
+
const FAUCET_ID = '0x7bfb0f38b0fafa103f86a805594171';
|
|
153
144
|
describe('buildP2idTransactionRequest', () => {
|
|
154
145
|
beforeEach(() => {
|
|
155
|
-
mockFromVaultKey.mockClear();
|
|
156
146
|
mockFungibleAssetConstructor.mockClear();
|
|
157
147
|
mockHashElements.mockClear();
|
|
158
148
|
mockNormalizeHexWord.mockClear();
|
|
159
149
|
mockRandomWord.mockClear();
|
|
160
150
|
mockWordFromHex.mockClear();
|
|
161
151
|
noteMetadataCalls.length = 0;
|
|
152
|
+
noteRecipientCalls.length = 0;
|
|
153
|
+
noteStorageCalls.length = 0;
|
|
162
154
|
});
|
|
163
155
|
it('derives serial number from salt felts plus four zero felts', () => {
|
|
164
156
|
const salt = { toHex: () => '0x' + '11'.repeat(32) };
|
|
165
|
-
buildP2idTransactionRequest('0x7bfb0f38b0fafa103f86a805594170', '0x8a65fc5a39e4cd106d648e3eb4ab5f', FAUCET_ID, 10n,
|
|
157
|
+
buildP2idTransactionRequest('0x7bfb0f38b0fafa103f86a805594170', '0x8a65fc5a39e4cd106d648e3eb4ab5f', FAUCET_ID, 10n, { salt });
|
|
166
158
|
expect(mockRandomWord).not.toHaveBeenCalled();
|
|
167
159
|
expect(mockHashElements).toHaveBeenCalledTimes(1);
|
|
168
160
|
const [feltArrayArg] = mockHashElements.mock.calls[0];
|
|
@@ -174,15 +166,61 @@ describe('buildP2idTransactionRequest', () => {
|
|
|
174
166
|
}
|
|
175
167
|
});
|
|
176
168
|
it('creates a public note by default (issue #322)', () => {
|
|
177
|
-
buildP2idTransactionRequest('0x7bfb0f38b0fafa103f86a805594170', '0x8a65fc5a39e4cd106d648e3eb4ab5f',
|
|
169
|
+
buildP2idTransactionRequest('0x7bfb0f38b0fafa103f86a805594170', '0x8a65fc5a39e4cd106d648e3eb4ab5f', FAUCET_ID, 10n);
|
|
178
170
|
expect(noteMetadataCalls).toHaveLength(1);
|
|
179
171
|
expect(noteMetadataCalls[0][1]).toBe(NoteType.Public);
|
|
180
172
|
});
|
|
173
|
+
it('builds the asset from the faucet id, whose callback flag it carries since Miden 0.16', () => {
|
|
174
|
+
buildP2idTransactionRequest('0x7bfb0f38b0fafa103f86a805594170', '0x8a65fc5a39e4cd106d648e3eb4ab5f', FAUCET_ID, 10n);
|
|
175
|
+
expect(mockFungibleAssetConstructor).toHaveBeenCalledTimes(1);
|
|
176
|
+
const [faucet, amount] = mockFungibleAssetConstructor.mock.calls[0];
|
|
177
|
+
expect(faucet.hex).toBe(FAUCET_ID);
|
|
178
|
+
expect(amount).toBe(10n);
|
|
179
|
+
});
|
|
181
180
|
it('threads the requested noteType into the note metadata (issue #322)', () => {
|
|
182
|
-
buildP2idTransactionRequest('0x7bfb0f38b0fafa103f86a805594170', '0x8a65fc5a39e4cd106d648e3eb4ab5f', '0x7bfb0f38b0fafa103f86a805594171', 10n,
|
|
181
|
+
buildP2idTransactionRequest('0x7bfb0f38b0fafa103f86a805594170', '0x8a65fc5a39e4cd106d648e3eb4ab5f', '0x7bfb0f38b0fafa103f86a805594171', 10n, { noteType: NoteType.Private });
|
|
183
182
|
expect(noteMetadataCalls).toHaveLength(1);
|
|
184
183
|
expect(noteMetadataCalls[0][1]).toBe(NoteType.Private);
|
|
185
184
|
});
|
|
185
|
+
it('builds a plain P2ID note without heights: p2id script, 2 storage items', () => {
|
|
186
|
+
buildP2idTransactionRequest('0x7bfb0f38b0fafa103f86a805594170', '0x8a65fc5a39e4cd106d648e3eb4ab5f', FAUCET_ID, 10n);
|
|
187
|
+
expect(noteRecipientCalls).toHaveLength(1);
|
|
188
|
+
expect(noteRecipientCalls[0][1]).toEqual({ kind: 'p2id-script' });
|
|
189
|
+
const [storageInputs] = noteStorageCalls[0];
|
|
190
|
+
expect(storageInputs.values).toEqual([2, 1]);
|
|
191
|
+
});
|
|
192
|
+
it('builds a P2IDE note when reclaimHeight is set (issue #366)', () => {
|
|
193
|
+
buildP2idTransactionRequest('0x7bfb0f38b0fafa103f86a805594170', '0x8a65fc5a39e4cd106d648e3eb4ab5f', FAUCET_ID, 10n, { reclaimHeight: 12345 });
|
|
194
|
+
expect(noteRecipientCalls).toHaveLength(1);
|
|
195
|
+
expect(noteRecipientCalls[0][1]).toEqual({ kind: 'p2ide-script' });
|
|
196
|
+
// P2IDE storage layout: [suffix, prefix, reclaim, timelock], 0 = unset.
|
|
197
|
+
const [storageInputs] = noteStorageCalls[0];
|
|
198
|
+
expect(storageInputs.values).toHaveLength(4);
|
|
199
|
+
expect(storageInputs.values.slice(0, 2)).toEqual([2, 1]);
|
|
200
|
+
expect(storageInputs.values[2].value).toBe(12345n);
|
|
201
|
+
expect(storageInputs.values[3].value).toBe(0n);
|
|
202
|
+
});
|
|
203
|
+
it('builds a P2IDE note when only timelockHeight is set (issue #366)', () => {
|
|
204
|
+
buildP2idTransactionRequest('0x7bfb0f38b0fafa103f86a805594170', '0x8a65fc5a39e4cd106d648e3eb4ab5f', FAUCET_ID, 10n, { timelockHeight: 777 });
|
|
205
|
+
expect(noteRecipientCalls[0][1]).toEqual({ kind: 'p2ide-script' });
|
|
206
|
+
const [storageInputs] = noteStorageCalls[0];
|
|
207
|
+
expect(storageInputs.values[2].value).toBe(0n);
|
|
208
|
+
expect(storageInputs.values[3].value).toBe(777n);
|
|
209
|
+
});
|
|
210
|
+
it('carries both heights into the P2IDE storage (issue #366)', () => {
|
|
211
|
+
buildP2idTransactionRequest('0x7bfb0f38b0fafa103f86a805594170', '0x8a65fc5a39e4cd106d648e3eb4ab5f', FAUCET_ID, 10n, { reclaimHeight: 500, timelockHeight: 400 });
|
|
212
|
+
const [storageInputs] = noteStorageCalls[0];
|
|
213
|
+
expect(storageInputs.values[2].value).toBe(500n);
|
|
214
|
+
expect(storageInputs.values[3].value).toBe(400n);
|
|
215
|
+
});
|
|
216
|
+
it.each([
|
|
217
|
+
['zero', 0],
|
|
218
|
+
['negative', -5],
|
|
219
|
+
['fractional', 1.5],
|
|
220
|
+
['above u32::MAX', 0x1_0000_0000],
|
|
221
|
+
])('rejects a %s height instead of building a divergent note (issue #366)', (_label, height) => {
|
|
222
|
+
expect(() => buildP2idTransactionRequest('0x7bfb0f38b0fafa103f86a805594170', '0x8a65fc5a39e4cd106d648e3eb4ab5f', FAUCET_ID, 10n, { reclaimHeight: height })).toThrow(/unsupported reclaimHeight/);
|
|
223
|
+
});
|
|
186
224
|
});
|
|
187
225
|
describe('parseP2idNoteType', () => {
|
|
188
226
|
it('maps absent to Public (pre-#322 proposals)', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p2id.test.js","sourceRoot":"","sources":["../../src/transaction/p2id.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAG9D,MAAM,EACJ,
|
|
1
|
+
{"version":3,"file":"p2id.test.js","sourceRoot":"","sources":["../../src/transaction/p2id.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,47 @@
|
|
|
1
1
|
import type { MidenClient, TransactionRequest, TransactionSummary, WasmWebClient } from '@miden-sdk/miden-sdk';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import { ChainAnchor, Word } from '@miden-sdk/miden-sdk';
|
|
3
|
+
/**
|
|
4
|
+
* Captures a `ChainAnchor` for the request at the current sync height and
|
|
5
|
+
* executes the transaction against it to obtain the summary awaiting
|
|
6
|
+
* authorization. The anchor is returned alongside the summary so the proposer
|
|
7
|
+
* can ship it with the signed data; cosigners and the executor then reproduce
|
|
8
|
+
* the summary — which binds the reference block commitment since protocol
|
|
9
|
+
* 0.16 — with {@link executeForSummaryAt} regardless of their own sync height.
|
|
10
|
+
*/
|
|
11
|
+
export declare function executeForSummary(client: MidenClient, accountId: string, txRequest: TransactionRequest, midenRpcEndpoint: string): Promise<{
|
|
12
|
+
summary: TransactionSummary;
|
|
13
|
+
anchor: ChainAnchor;
|
|
14
|
+
}>;
|
|
15
|
+
export declare function executeForSummary(client: WasmWebClient, accountId: string, txRequest: TransactionRequest, midenRpcEndpoint?: string): Promise<{
|
|
16
|
+
summary: TransactionSummary;
|
|
17
|
+
anchor: ChainAnchor;
|
|
18
|
+
}>;
|
|
19
|
+
/**
|
|
20
|
+
* Executes a transaction at the given `ChainAnchor`'s reference block to
|
|
21
|
+
* obtain the summary awaiting authorization — the anchored counterpart of
|
|
22
|
+
* {@link executeForSummary} for cosigners and executors holding a proposal's
|
|
23
|
+
* anchor.
|
|
24
|
+
*/
|
|
25
|
+
export declare function executeForSummaryAt(client: MidenClient, accountId: string, txRequest: TransactionRequest, anchor: ChainAnchor, midenRpcEndpoint: string): Promise<TransactionSummary>;
|
|
26
|
+
export declare function executeForSummaryAt(client: WasmWebClient, accountId: string, txRequest: TransactionRequest, anchor: ChainAnchor, midenRpcEndpoint?: string): Promise<TransactionSummary>;
|
|
27
|
+
/**
|
|
28
|
+
* Serializes a `ChainAnchor` to base64 for the proposal wire payload.
|
|
29
|
+
*/
|
|
30
|
+
export declare function chainAnchorToBase64(anchor: ChainAnchor): string;
|
|
31
|
+
/**
|
|
32
|
+
* Deserializes a `ChainAnchor` from its base64 wire form. `ChainAnchor`
|
|
33
|
+
* deserialization validates the header/chain consistency internally, so a
|
|
34
|
+
* decoded anchor only needs its block commitment checked against the signed
|
|
35
|
+
* transaction summary before it is safe to execute against.
|
|
36
|
+
*/
|
|
37
|
+
export declare function chainAnchorFromBase64(anchorBase64: string): ChainAnchor;
|
|
38
|
+
/**
|
|
39
|
+
* Reads the auth-arg salt back out of a transaction summary.
|
|
40
|
+
*
|
|
41
|
+
* Since miden-protocol 0.16-rc the summary binds seven user-defined elements
|
|
42
|
+
* instead of a dedicated salt word. The guarded-multisig auth component zeroes
|
|
43
|
+
* the leading three and passes the auth args as the trailing four, so the salt
|
|
44
|
+
* is the tail of `userParams()`.
|
|
45
|
+
*/
|
|
46
|
+
export declare function summarySalt(summary: TransactionSummary): Word;
|
|
4
47
|
//# sourceMappingURL=summary.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../src/transaction/summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACd,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../src/transaction/summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAa,WAAW,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAWpE;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,kBAAkB,EAC7B,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC,CAAC;AACjE,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,kBAAkB,EAC7B,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC;IAAE,OAAO,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC,CAAC;AAcjE;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,kBAAkB,EAC7B,MAAM,EAAE,WAAW,EACnB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAC/B,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,kBAAkB,EAC7B,MAAM,EAAE,WAAW,EACnB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAa/B;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAE/D;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,WAAW,CAEvE;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAE7D"}
|
|
@@ -1,8 +1,48 @@
|
|
|
1
|
-
import { AccountId } from '@miden-sdk/miden-sdk';
|
|
1
|
+
import { AccountId, ChainAnchor, Word } from '@miden-sdk/miden-sdk';
|
|
2
2
|
import { getRawMidenClient } from '../raw-client.js';
|
|
3
|
+
import { base64ToUint8Array, uint8ArrayToBase64 } from '../utils/encoding.js';
|
|
4
|
+
/**
|
|
5
|
+
* Index of the first user param carrying the auth-arg salt. The guarded-multisig
|
|
6
|
+
* auth component zeroes user params 0-2 and fills 3-6 with the auth args, matching
|
|
7
|
+
* `push.0.0.0` ahead of `multisig::auth_tx` in `guarded_multisig.masm`.
|
|
8
|
+
*/
|
|
9
|
+
const SALT_USER_PARAM_OFFSET = 3;
|
|
3
10
|
export async function executeForSummary(client, accountId, txRequest, midenRpcEndpoint) {
|
|
4
11
|
const acc = AccountId.fromHex(accountId);
|
|
5
12
|
const rawClient = await getRawMidenClient(client, midenRpcEndpoint);
|
|
6
|
-
|
|
13
|
+
const anchor = await rawClient.chainAnchorForRequest(txRequest);
|
|
14
|
+
const summary = await rawClient.executeForSummaryAt(acc, txRequest, anchor);
|
|
15
|
+
return { summary, anchor };
|
|
16
|
+
}
|
|
17
|
+
export async function executeForSummaryAt(client, accountId, txRequest, anchor, midenRpcEndpoint) {
|
|
18
|
+
const acc = AccountId.fromHex(accountId);
|
|
19
|
+
const rawClient = await getRawMidenClient(client, midenRpcEndpoint);
|
|
20
|
+
return rawClient.executeForSummaryAt(acc, txRequest, anchor);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Serializes a `ChainAnchor` to base64 for the proposal wire payload.
|
|
24
|
+
*/
|
|
25
|
+
export function chainAnchorToBase64(anchor) {
|
|
26
|
+
return uint8ArrayToBase64(anchor.serialize());
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Deserializes a `ChainAnchor` from its base64 wire form. `ChainAnchor`
|
|
30
|
+
* deserialization validates the header/chain consistency internally, so a
|
|
31
|
+
* decoded anchor only needs its block commitment checked against the signed
|
|
32
|
+
* transaction summary before it is safe to execute against.
|
|
33
|
+
*/
|
|
34
|
+
export function chainAnchorFromBase64(anchorBase64) {
|
|
35
|
+
return ChainAnchor.deserialize(base64ToUint8Array(anchorBase64));
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Reads the auth-arg salt back out of a transaction summary.
|
|
39
|
+
*
|
|
40
|
+
* Since miden-protocol 0.16-rc the summary binds seven user-defined elements
|
|
41
|
+
* instead of a dedicated salt word. The guarded-multisig auth component zeroes
|
|
42
|
+
* the leading three and passes the auth args as the trailing four, so the salt
|
|
43
|
+
* is the tail of `userParams()`.
|
|
44
|
+
*/
|
|
45
|
+
export function summarySalt(summary) {
|
|
46
|
+
return Word.newFromFelts(summary.userParams().slice(SALT_USER_PARAM_OFFSET));
|
|
7
47
|
}
|
|
8
48
|
//# sourceMappingURL=summary.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summary.js","sourceRoot":"","sources":["../../src/transaction/summary.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"summary.js","sourceRoot":"","sources":["../../src/transaction/summary.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE9E;;;;GAIG;AACH,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAsBjC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAmC,EACnC,SAAiB,EACjB,SAA6B,EAC7B,gBAAyB;IAEzB,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,mBAAmB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC;AAsBD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAmC,EACnC,SAAiB,EACjB,SAA6B,EAC7B,MAAmB,EACnB,gBAAyB;IAEzB,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACpE,OAAO,SAAS,CAAC,mBAAmB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAmB;IACrD,OAAO,kBAAkB,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;AAChD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,YAAoB;IACxD,OAAO,WAAW,CAAC,WAAW,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC;AACnE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,OAA2B;IACrD,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;AAC/E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary.test.d.ts","sourceRoot":"","sources":["../../src/transaction/summary.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
+
vi.mock('@miden-sdk/miden-sdk', () => ({
|
|
3
|
+
AccountId: { fromHex: vi.fn() },
|
|
4
|
+
Word: {
|
|
5
|
+
newFromFelts: vi.fn((felts) => ({ felts })),
|
|
6
|
+
},
|
|
7
|
+
}));
|
|
8
|
+
vi.mock('../raw-client.js', () => ({
|
|
9
|
+
getRawMidenClient: vi.fn(),
|
|
10
|
+
}));
|
|
11
|
+
const { summarySalt } = await import('./summary.js');
|
|
12
|
+
describe('summarySalt', () => {
|
|
13
|
+
it('reads the salt from the trailing four user params', () => {
|
|
14
|
+
const summary = {
|
|
15
|
+
userParams: () => [0, 0, 0, 11, 22, 33, 44],
|
|
16
|
+
};
|
|
17
|
+
expect(summarySalt(summary)).toEqual({ felts: [11, 22, 33, 44] });
|
|
18
|
+
});
|
|
19
|
+
it('ignores the leading three user params the auth component zeroes', () => {
|
|
20
|
+
const summary = {
|
|
21
|
+
userParams: () => [7, 8, 9, 11, 22, 33, 44],
|
|
22
|
+
};
|
|
23
|
+
expect(summarySalt(summary)).toEqual({ felts: [11, 22, 33, 44] });
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=summary.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary.test.js","sourceRoot":"","sources":["../../src/transaction/summary.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAElD,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC;IACrC,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;IAC/B,IAAI,EAAE;QACJ,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,KAAgB,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;KACvD;CACF,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE;CAC3B,CAAC,CAAC,CAAC;AAEJ,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;AAErD,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,OAAO,GAAG;YACd,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;SACnC,CAAC;QAEX,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,OAAO,GAAG;YACd,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;SACnC,CAAC;QAEX,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateGuardian.d.ts","sourceRoot":"","sources":["../../src/transaction/updateGuardian.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"updateGuardian.d.ts","sourceRoot":"","sources":["../../src/transaction/updateGuardian.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAChB,kBAAkB,EAGlB,KAAK,aAAa,EAClB,IAAI,EAEL,MAAM,sBAAsB,CAAC;AAK9B,OAAO,KAAK,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AA8BlF,wBAAgB,qCAAqC,CACnD,MAAM,EAAE,WAAW,EACnB,iBAAiB,EAAE,MAAM,EACzB,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC;IAAE,OAAO,EAAE,kBAAkB,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC,CAAC;AACxD,wBAAgB,qCAAqC,CACnD,MAAM,EAAE,aAAa,EACrB,iBAAiB,EAAE,MAAM,EACzB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC;IAAE,OAAO,EAAE,kBAAkB,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC,CAAC"}
|
|
@@ -1,36 +1,34 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { GUARDIAN_ECDSA_MASM, GUARDIAN_MASM } from '../account/masm/auth.js';
|
|
1
|
+
import { TransactionRequestBuilder, Word as WordType, } from '@miden-sdk/miden-sdk';
|
|
3
2
|
import { compileTxScript } from '../raw-client.js';
|
|
4
3
|
import { normalizeHexWord } from '../utils/encoding.js';
|
|
5
4
|
import { randomWord } from '../utils/random.js';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
import { authSchemeId } from '../utils/signature.js';
|
|
6
|
+
async function buildUpdateGuardianScript(client, newGuardianPubkey, signatureScheme, midenRpcEndpoint) {
|
|
7
|
+
// A word literal preserves the key's element order on the operand stack.
|
|
8
|
+
const keyLiteral = normalizeHexWord(newGuardianPubkey);
|
|
9
|
+
const schemeId = authSchemeId(signatureScheme);
|
|
10
|
+
// Calling the origin procedure yields the same MAST root as its component re-export.
|
|
9
11
|
const scriptSource = `
|
|
10
|
-
use
|
|
12
|
+
use miden::standards::auth::guardian
|
|
11
13
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
@transaction_script
|
|
15
|
+
pub proc main
|
|
16
|
+
push.${keyLiteral}
|
|
17
|
+
push.${schemeId}
|
|
15
18
|
call.guardian::update_guardian_public_key
|
|
19
|
+
drop
|
|
20
|
+
dropw
|
|
16
21
|
end
|
|
17
22
|
`;
|
|
18
|
-
return compileTxScript(client, scriptSource, [
|
|
23
|
+
return compileTxScript(client, scriptSource, [], midenRpcEndpoint);
|
|
19
24
|
}
|
|
20
25
|
export async function buildUpdateGuardianTransactionRequest(client, newGuardianPubkey, options = {}) {
|
|
21
26
|
const signatureScheme = options.signatureScheme ?? 'falcon';
|
|
22
|
-
const script = await buildUpdateGuardianScript(client, signatureScheme, options.midenRpcEndpoint);
|
|
27
|
+
const script = await buildUpdateGuardianScript(client, newGuardianPubkey, signatureScheme, options.midenRpcEndpoint);
|
|
23
28
|
const authSaltHex = options.salt ? options.salt.toHex() : randomWord().toHex();
|
|
24
|
-
const pubkeyWordForAdvice = WordType.fromHex(normalizeHexWord(newGuardianPubkey));
|
|
25
|
-
const pubkeyWordForFelts = WordType.fromHex(normalizeHexWord(newGuardianPubkey));
|
|
26
|
-
const pubkeyWordForScript = WordType.fromHex(normalizeHexWord(newGuardianPubkey));
|
|
27
|
-
const advice = new AdviceMap();
|
|
28
|
-
advice.insert(pubkeyWordForAdvice, new FeltArray(pubkeyWordForFelts.toFelts()));
|
|
29
29
|
const authSaltForBuilder = WordType.fromHex(normalizeHexWord(authSaltHex));
|
|
30
30
|
let txBuilder = new TransactionRequestBuilder();
|
|
31
31
|
txBuilder = txBuilder.withCustomScript(script);
|
|
32
|
-
txBuilder = txBuilder.withScriptArg(pubkeyWordForScript);
|
|
33
|
-
txBuilder = txBuilder.extendAdviceMap(advice);
|
|
34
32
|
txBuilder = txBuilder.withAuthArg(authSaltForBuilder);
|
|
35
33
|
if (options.signatureAdviceMap) {
|
|
36
34
|
txBuilder = txBuilder.extendAdviceMap(options.signatureAdviceMap);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateGuardian.js","sourceRoot":"","sources":["../../src/transaction/updateGuardian.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"updateGuardian.js","sourceRoot":"","sources":["../../src/transaction/updateGuardian.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,yBAAyB,EAIzB,IAAI,IAAI,QAAQ,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAIrD,KAAK,UAAU,yBAAyB,CACtC,MAAmC,EACnC,iBAAyB,EACzB,eAAgC,EAChC,gBAAyB;IAEzB,yEAAyE;IACzE,MAAM,UAAU,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;IAE/C,qFAAqF;IACrF,MAAM,YAAY,GAAG;;;;;WAKZ,UAAU;WACV,QAAQ;;;;;GAKhB,CAAC;IAEF,OAAO,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC;AACrE,CAAC;AAYD,MAAM,CAAC,KAAK,UAAU,qCAAqC,CACzD,MAAmC,EACnC,iBAAyB,EACzB,UAA4B,EAAE;IAE9B,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,QAAQ,CAAC;IAC5D,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAC5C,MAAM,EACN,iBAAiB,EACjB,eAAe,EACf,OAAO,CAAC,gBAAgB,CACzB,CAAC;IAEF,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;IAC/E,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC;IAE3E,IAAI,SAAS,GAAG,IAAI,yBAAyB,EAAE,CAAC;IAChD,SAAS,GAAG,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC/C,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAEtD,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC/B,SAAS,GAAG,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC;IAE1E,OAAO;QACL,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE;QAC1B,IAAI,EAAE,iBAAiB;KACxB,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateProcedureThreshold.d.ts","sourceRoot":"","sources":["../../src/transaction/updateProcedureThreshold.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,WAAW,EAEhB,kBAAkB,EAGlB,KAAK,aAAa,EAClB,IAAI,EAEL,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"updateProcedureThreshold.d.ts","sourceRoot":"","sources":["../../src/transaction/updateProcedureThreshold.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,WAAW,EAEhB,kBAAkB,EAGlB,KAAK,aAAa,EAClB,IAAI,EAEL,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIxE,OAAO,KAAK,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAgDlF,wBAAgB,+CAA+C,CAC7D,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,aAAa,EACxB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC;IAAE,OAAO,EAAE,kBAAkB,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,IAAI,CAAA;CAAE,CAAC,CAAC;AAC1E,wBAAgB,+CAA+C,CAC7D,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,aAAa,EACxB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC;IAAE,OAAO,EAAE,kBAAkB,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,IAAI,CAAA;CAAE,CAAC,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Felt, FeltArray, Poseidon2, TransactionRequestBuilder, Word as WordType, } from '@miden-sdk/miden-sdk';
|
|
2
|
-
import { MULTISIG_ECDSA_MASM, MULTISIG_MASM, } from '../account/masm/auth.js';
|
|
3
2
|
import { getProcedureRoot } from '../procedures.js';
|
|
4
3
|
import { compileTxScript } from '../raw-client.js';
|
|
5
4
|
import { normalizeHexWord } from '../utils/encoding.js';
|
|
@@ -14,34 +13,33 @@ function buildProcedureThresholdFelts(procedure, threshold) {
|
|
|
14
13
|
new Felt(0n),
|
|
15
14
|
];
|
|
16
15
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return
|
|
16
|
+
/**
|
|
17
|
+
* `set_procedure_threshold` reads its `[proc_threshold, PROC_ROOT]` inputs from the operand stack
|
|
18
|
+
* (pushed by the script), so no advice-map entry is attached; this hash is returned only for
|
|
19
|
+
* caller bookkeeping.
|
|
20
|
+
*/
|
|
21
|
+
function buildProcedureThresholdConfigHash(procedure, threshold) {
|
|
22
|
+
return Poseidon2.hashElements(new FeltArray(buildProcedureThresholdFelts(procedure, threshold)));
|
|
24
23
|
}
|
|
25
|
-
async function buildUpdateProcedureThresholdScript(client, procedure, threshold,
|
|
26
|
-
const multisigMasm = signatureScheme === 'ecdsa' ? MULTISIG_ECDSA_MASM : MULTISIG_MASM;
|
|
24
|
+
async function buildUpdateProcedureThresholdScript(client, procedure, threshold, midenRpcEndpoint) {
|
|
27
25
|
const procedureRoot = normalizeHexWord(getProcedureRoot(procedure));
|
|
28
26
|
const scriptSource = `
|
|
29
|
-
use
|
|
27
|
+
use miden::standards::auth::multisig
|
|
30
28
|
|
|
31
|
-
|
|
29
|
+
@transaction_script
|
|
30
|
+
pub proc main
|
|
32
31
|
push.${procedureRoot}
|
|
33
32
|
push.${threshold}
|
|
34
|
-
call.multisig::
|
|
33
|
+
call.multisig::set_procedure_threshold
|
|
35
34
|
dropw
|
|
36
35
|
drop
|
|
37
36
|
end
|
|
38
37
|
`;
|
|
39
|
-
return compileTxScript(client, scriptSource, [
|
|
38
|
+
return compileTxScript(client, scriptSource, [], midenRpcEndpoint);
|
|
40
39
|
}
|
|
41
40
|
export async function buildUpdateProcedureThresholdTransactionRequest(client, procedure, threshold, options = {}) {
|
|
42
|
-
const
|
|
43
|
-
const
|
|
44
|
-
const script = await buildUpdateProcedureThresholdScript(client, procedure, threshold, signatureScheme, options.midenRpcEndpoint);
|
|
41
|
+
const configHash = buildProcedureThresholdConfigHash(procedure, threshold);
|
|
42
|
+
const script = await buildUpdateProcedureThresholdScript(client, procedure, threshold, options.midenRpcEndpoint);
|
|
45
43
|
const authSaltHex = options.salt ? options.salt.toHex() : randomWord().toHex();
|
|
46
44
|
const authSalt = WordType.fromHex(normalizeHexWord(authSaltHex));
|
|
47
45
|
let txBuilder = new TransactionRequestBuilder();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateProcedureThreshold.js","sourceRoot":"","sources":["../../src/transaction/updateProcedureThreshold.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,SAAS,EAET,SAAS,EAET,yBAAyB,EAIzB,IAAI,IAAI,QAAQ,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,
|
|
1
|
+
{"version":3,"file":"updateProcedureThreshold.js","sourceRoot":"","sources":["../../src/transaction/updateProcedureThreshold.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,SAAS,EAET,SAAS,EAET,yBAAyB,EAIzB,IAAI,IAAI,QAAQ,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAsB,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,SAAS,4BAA4B,CAAC,SAAwB,EAAE,SAAiB;IAC/E,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACtF,OAAO;QACL,GAAG,aAAa,CAAC,OAAO,EAAE;QAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,IAAI,IAAI,CAAC,EAAE,CAAC;QACZ,IAAI,IAAI,CAAC,EAAE,CAAC;QACZ,IAAI,IAAI,CAAC,EAAE,CAAC;KACb,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,iCAAiC,CAAC,SAAwB,EAAE,SAAiB;IACpF,OAAO,SAAS,CAAC,YAAY,CAC3B,IAAI,SAAS,CAAC,4BAA4B,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAClE,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,mCAAmC,CAChD,MAAmC,EACnC,SAAwB,EACxB,SAAiB,EACjB,gBAAyB;IAEzB,MAAM,aAAa,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;IAEpE,MAAM,YAAY,GAAG;;;;;WAKZ,aAAa;WACb,SAAS;;;;;GAKjB,CAAC;IAEF,OAAO,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC;AACrE,CAAC;AAcD,MAAM,CAAC,KAAK,UAAU,+CAA+C,CACnE,MAAmC,EACnC,SAAwB,EACxB,SAAiB,EACjB,UAA4B,EAAE;IAE9B,MAAM,UAAU,GAAG,iCAAiC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAE3E,MAAM,MAAM,GAAG,MAAM,mCAAmC,CACtD,MAAM,EACN,SAAS,EACT,SAAS,EACT,OAAO,CAAC,gBAAgB,CACzB,CAAC;IACF,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;IAC/E,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC;IAEjE,IAAI,SAAS,GAAG,IAAI,yBAAyB,EAAE,CAAC;IAChD,SAAS,GAAG,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC/C,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAE5C,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC/B,SAAS,GAAG,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACpE,CAAC;IAED,OAAO;QACL,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE;QAC1B,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QACrD,UAAU;KACX,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import { type MidenClient, TransactionRequest, type WasmWebClient, Word } from '@miden-sdk/miden-sdk';
|
|
1
|
+
import { FeltArray, type MidenClient, TransactionRequest, type WasmWebClient, Word } from '@miden-sdk/miden-sdk';
|
|
2
2
|
import type { MidenClientSignatureOptions, SignatureOptions } from './options.js';
|
|
3
|
+
import type { SignatureScheme } from '../types.js';
|
|
4
|
+
export declare function buildMultisigConfigAdvice(threshold: number, signerCommitments: string[], signatureScheme: SignatureScheme): {
|
|
5
|
+
configHash: Word;
|
|
6
|
+
payload: FeltArray;
|
|
7
|
+
};
|
|
3
8
|
export declare function buildUpdateSignersTransactionRequest(client: MidenClient, threshold: number, signerCommitments: string[], options: MidenClientSignatureOptions): Promise<{
|
|
4
9
|
request: TransactionRequest;
|
|
5
10
|
salt: Word;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateSigners.d.ts","sourceRoot":"","sources":["../../src/transaction/updateSigners.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"updateSigners.d.ts","sourceRoot":"","sources":["../../src/transaction/updateSigners.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,SAAS,EACT,KAAK,WAAW,EAEhB,kBAAkB,EAGlB,KAAK,aAAa,EAClB,IAAI,EAEL,MAAM,sBAAsB,CAAC;AAK9B,OAAO,KAAK,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAwBnD,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EAAE,EAC3B,eAAe,EAAE,eAAe,GAC/B;IAAE,UAAU,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,SAAS,CAAA;CAAE,CAW1C;AAkBD,wBAAgB,oCAAoC,CAClD,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EAAE,EAC3B,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC;IAAE,OAAO,EAAE,kBAAkB,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,IAAI,CAAA;CAAE,CAAC,CAAC;AAC1E,wBAAgB,oCAAoC,CAClD,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EAAE,EAC3B,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC;IAAE,OAAO,EAAE,kBAAkB,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,IAAI,CAAA;CAAE,CAAC,CAAC"}
|
|
@@ -1,49 +1,52 @@
|
|
|
1
1
|
import { AdviceMap, Felt, FeltArray, Poseidon2, TransactionRequestBuilder, Word as WordType, } from '@miden-sdk/miden-sdk';
|
|
2
|
-
import { MULTISIG_ECDSA_MASM, MULTISIG_MASM, } from '../account/masm/auth.js';
|
|
3
2
|
import { compileTxScript } from '../raw-client.js';
|
|
4
3
|
import { normalizeHexWord } from '../utils/encoding.js';
|
|
5
4
|
import { randomWord } from '../utils/random.js';
|
|
6
|
-
|
|
5
|
+
import { authSchemeId } from '../utils/signature.js';
|
|
6
|
+
function buildMultisigConfigFelts(threshold, signerCommitments, signatureScheme) {
|
|
7
7
|
const numApprovers = signerCommitments.length;
|
|
8
|
+
const schemeId = authSchemeId(signatureScheme);
|
|
8
9
|
const felts = [
|
|
9
10
|
new Felt(BigInt(threshold)),
|
|
10
11
|
new Felt(BigInt(numApprovers)),
|
|
11
12
|
new Felt(0n),
|
|
12
13
|
new Felt(0n),
|
|
13
14
|
];
|
|
15
|
+
// Interleave [PUB_KEY, SCHEME_ID] per approver, in reverse index order.
|
|
14
16
|
for (const commitment of [...signerCommitments].reverse()) {
|
|
15
17
|
const word = WordType.fromHex(normalizeHexWord(commitment));
|
|
16
18
|
felts.push(...word.toFelts());
|
|
19
|
+
felts.push(new Felt(BigInt(schemeId)), new Felt(0n), new Felt(0n), new Felt(0n));
|
|
17
20
|
}
|
|
18
21
|
return felts;
|
|
19
22
|
}
|
|
20
|
-
function buildMultisigConfigAdvice(threshold, signerCommitments) {
|
|
21
|
-
// `Poseidon2.hashElements` consumes (frees) its `FeltArray` by value, so the
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
const configHash = Poseidon2.hashElements(new FeltArray(buildMultisigConfigFelts(threshold, signerCommitments)));
|
|
25
|
-
const payload = new FeltArray(buildMultisigConfigFelts(threshold, signerCommitments));
|
|
23
|
+
export function buildMultisigConfigAdvice(threshold, signerCommitments, signatureScheme) {
|
|
24
|
+
// `Poseidon2.hashElements` consumes (frees) its `FeltArray` by value, so the advice payload
|
|
25
|
+
// must be a separately built array — reusing the hashed array surfaces as "null pointer
|
|
26
|
+
// passed to rust" at the later `advice.insert`.
|
|
27
|
+
const configHash = Poseidon2.hashElements(new FeltArray(buildMultisigConfigFelts(threshold, signerCommitments, signatureScheme)));
|
|
28
|
+
const payload = new FeltArray(buildMultisigConfigFelts(threshold, signerCommitments, signatureScheme));
|
|
26
29
|
return { configHash, payload };
|
|
27
30
|
}
|
|
28
|
-
async function buildUpdateSignersScript(client,
|
|
29
|
-
const multisigMasm = signatureScheme === 'ecdsa' ? MULTISIG_ECDSA_MASM : MULTISIG_MASM;
|
|
31
|
+
async function buildUpdateSignersScript(client, midenRpcEndpoint) {
|
|
30
32
|
const scriptSource = `
|
|
31
|
-
use
|
|
33
|
+
use miden::standards::auth::multisig
|
|
32
34
|
|
|
33
|
-
|
|
35
|
+
@transaction_script
|
|
36
|
+
pub proc main
|
|
34
37
|
call.multisig::update_signers_and_threshold
|
|
35
38
|
end
|
|
36
39
|
`;
|
|
37
|
-
return compileTxScript(client, scriptSource, [
|
|
40
|
+
return compileTxScript(client, scriptSource, [], midenRpcEndpoint);
|
|
38
41
|
}
|
|
39
42
|
export async function buildUpdateSignersTransactionRequest(client, threshold, signerCommitments, options = {}) {
|
|
40
43
|
const signatureScheme = options.signatureScheme ?? 'falcon';
|
|
41
|
-
const { configHash: configHashForAdvice, payload } = buildMultisigConfigAdvice(threshold, signerCommitments);
|
|
42
|
-
const { configHash: configHashForScript } = buildMultisigConfigAdvice(threshold, signerCommitments);
|
|
43
|
-
const { configHash: configHashForReturn } = buildMultisigConfigAdvice(threshold, signerCommitments);
|
|
44
|
+
const { configHash: configHashForAdvice, payload } = buildMultisigConfigAdvice(threshold, signerCommitments, signatureScheme);
|
|
45
|
+
const { configHash: configHashForScript } = buildMultisigConfigAdvice(threshold, signerCommitments, signatureScheme);
|
|
46
|
+
const { configHash: configHashForReturn } = buildMultisigConfigAdvice(threshold, signerCommitments, signatureScheme);
|
|
44
47
|
const advice = new AdviceMap();
|
|
45
48
|
advice.insert(configHashForAdvice, payload);
|
|
46
|
-
const script = await buildUpdateSignersScript(client,
|
|
49
|
+
const script = await buildUpdateSignersScript(client, options.midenRpcEndpoint);
|
|
47
50
|
const authSaltHex = options.salt ? options.salt.toHex() : randomWord().toHex();
|
|
48
51
|
const authSaltForBuilder = WordType.fromHex(normalizeHexWord(authSaltHex));
|
|
49
52
|
let txBuilder = new TransactionRequestBuilder();
|