@openzeppelin/miden-multisig-client 0.14.9 → 0.15.0-rc.0
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/dist/account/builder.d.ts.map +1 -1
- package/dist/account/builder.js +4 -3
- package/dist/account/builder.js.map +1 -1
- package/dist/account/builder.test.js +0 -3
- package/dist/account/builder.test.js.map +1 -1
- package/dist/account/masm/auth.d.ts +2 -2
- package/dist/account/masm/auth.d.ts.map +1 -1
- package/dist/account/masm/auth.js +22 -10
- package/dist/account/masm/auth.js.map +1 -1
- package/dist/account/masm/authLibraries.d.ts +6 -0
- package/dist/account/masm/authLibraries.d.ts.map +1 -0
- package/dist/account/masm/authLibraries.js +17 -0
- package/dist/account/masm/authLibraries.js.map +1 -0
- package/dist/lookupAuth.d.ts +4 -3
- package/dist/lookupAuth.d.ts.map +1 -1
- package/dist/lookupAuth.js +8 -7
- package/dist/lookupAuth.js.map +1 -1
- package/dist/lookupAuth.test.js +3 -2
- package/dist/lookupAuth.test.js.map +1 -1
- package/dist/multisig.d.ts.map +1 -1
- package/dist/multisig.js +34 -13
- package/dist/multisig.js.map +1 -1
- package/dist/multisig.test.js +118 -4
- package/dist/multisig.test.js.map +1 -1
- package/dist/procedures.d.ts +7 -7
- package/dist/procedures.js +7 -7
- package/dist/raw-client.d.ts.map +1 -1
- package/dist/raw-client.js +4 -4
- package/dist/raw-client.js.map +1 -1
- package/dist/transaction/updateProcedureThreshold.d.ts.map +1 -1
- package/dist/transaction/updateProcedureThreshold.js +10 -4
- package/dist/transaction/updateProcedureThreshold.js.map +1 -1
- package/dist/transaction/updateSigners.d.ts.map +1 -1
- package/dist/transaction/updateSigners.js +9 -3
- package/dist/transaction/updateSigners.js.map +1 -1
- package/dist/utils/digest.d.ts.map +1 -1
- package/dist/utils/digest.js +4 -3
- package/dist/utils/digest.js.map +1 -1
- package/dist/utils/felt.d.ts +12 -0
- package/dist/utils/felt.d.ts.map +1 -0
- package/dist/utils/felt.js +19 -0
- package/dist/utils/felt.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/word.d.ts.map +1 -1
- package/dist/utils/word.js +7 -2
- package/dist/utils/word.js.map +1 -1
- package/masm/auth/multisig.masm +11 -5
- package/masm/auth/multisig_ecdsa.masm +11 -5
- package/package.json +3 -3
- package/src/account/builder.test.ts +0 -3
- package/src/account/builder.ts +3 -3
- package/src/account/masm/auth.ts +22 -10
- package/src/lookupAuth.test.ts +3 -2
- package/src/lookupAuth.ts +7 -6
- package/src/multisig.test.ts +123 -4
- package/src/multisig.ts +38 -14
- package/src/procedures.ts +7 -7
- package/src/raw-client.ts +4 -4
- package/src/transaction/updateProcedureThreshold.ts +16 -7
- package/src/transaction/updateSigners.ts +15 -6
- package/src/utils/digest.ts +4 -3
- package/src/utils/felt.ts +20 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/word.ts +8 -2
package/dist/raw-client.js
CHANGED
|
@@ -7,15 +7,15 @@ export function resolveMidenRpcEndpoint(endpoint) {
|
|
|
7
7
|
function isPublicMidenClient(client) {
|
|
8
8
|
return 'accounts' in client && 'sync' in client;
|
|
9
9
|
}
|
|
10
|
-
export function getRawMidenClient(client, rpcUrl) {
|
|
10
|
+
export async function getRawMidenClient(client, rpcUrl) {
|
|
11
11
|
if (!isPublicMidenClient(client)) {
|
|
12
|
-
return
|
|
12
|
+
return client;
|
|
13
13
|
}
|
|
14
14
|
const cached = rawClientCache.get(client);
|
|
15
15
|
if (cached) {
|
|
16
16
|
return cached;
|
|
17
17
|
}
|
|
18
|
-
const rawClient = WasmWebClient.createClient(resolveMidenRpcEndpoint(rpcUrl), undefined, undefined, client.storeIdentifier());
|
|
18
|
+
const rawClient = WasmWebClient.createClient(resolveMidenRpcEndpoint(rpcUrl), undefined, undefined, await client.storeIdentifier());
|
|
19
19
|
rawClientCache.set(client, rawClient);
|
|
20
20
|
return rawClient;
|
|
21
21
|
}
|
|
@@ -27,7 +27,7 @@ export async function compileTxScript(client, code, libraries = [], rpcUrl) {
|
|
|
27
27
|
return client.compile.txScript({ code, libraries });
|
|
28
28
|
}
|
|
29
29
|
const rawClient = await getRawMidenClient(client, rpcUrl);
|
|
30
|
-
const builder = rawClient.createCodeBuilder();
|
|
30
|
+
const builder = await rawClient.createCodeBuilder();
|
|
31
31
|
for (const library of libraries) {
|
|
32
32
|
const builtLibrary = builder.buildLibrary(library.namespace, library.code);
|
|
33
33
|
if (library.linking === 'static') {
|
package/dist/raw-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raw-client.js","sourceRoot":"","sources":["../src/raw-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,aAAa,GACd,MAAM,sBAAsB,CAAC;AAE9B,MAAM,CAAC,MAAM,qBAAqB,GAAG,6BAA6B,CAAC;AASnE,MAAM,cAAc,GAAG,IAAI,OAAO,EAAuC,CAAC;AAE1E,MAAM,UAAU,uBAAuB,CAAC,QAAiB;IACvD,OAAO,QAAQ,IAAI,qBAAqB,CAAC;AAC3C,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAuB;IAClD,OAAO,UAAU,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,iBAAiB,
|
|
1
|
+
{"version":3,"file":"raw-client.js","sourceRoot":"","sources":["../src/raw-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,aAAa,GACd,MAAM,sBAAsB,CAAC;AAE9B,MAAM,CAAC,MAAM,qBAAqB,GAAG,6BAA6B,CAAC;AASnE,MAAM,cAAc,GAAG,IAAI,OAAO,EAAuC,CAAC;AAE1E,MAAM,UAAU,uBAAuB,CAAC,QAAiB;IACvD,OAAO,QAAQ,IAAI,qBAAqB,CAAC;AAC3C,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAuB;IAClD,OAAO,UAAU,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAuB,EACvB,MAAe;IAEf,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,CAC1C,uBAAuB,CAAC,MAAM,CAAC,EAC/B,SAAS,EACT,SAAS,EACT,MAAM,MAAM,CAAC,eAAe,EAAE,CAC/B,CAAC;IACF,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAuB;IAC1D,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAuB,EACvB,IAAY,EACZ,YAAmC,EAAE,EACrC,MAAe;IAEf,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,iBAAiB,EAAE,CAAC;IACpD,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;QAChC,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3E,IAAI,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACvC,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;AAK9B,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,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;AAK9B,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AA0DrD,wBAAsB,+CAA+C,CACnE,MAAM,EAAE,WAAW,GAAG,aAAa,EACnC,SAAS,EAAE,aAAa,EACxB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC;IAAE,OAAO,EAAE,kBAAkB,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,IAAI,CAAA;CAAE,CAAC,CA2BxE"}
|
|
@@ -4,16 +4,22 @@ import { getProcedureRoot } from '../procedures.js';
|
|
|
4
4
|
import { compileTxScript } from '../raw-client.js';
|
|
5
5
|
import { normalizeHexWord } from '../utils/encoding.js';
|
|
6
6
|
import { randomWord } from '../utils/random.js';
|
|
7
|
-
function
|
|
7
|
+
function buildProcedureThresholdFelts(procedure, threshold) {
|
|
8
8
|
const procedureRoot = WordType.fromHex(normalizeHexWord(getProcedureRoot(procedure)));
|
|
9
|
-
|
|
9
|
+
return [
|
|
10
10
|
...procedureRoot.toFelts(),
|
|
11
11
|
new Felt(BigInt(threshold)),
|
|
12
12
|
new Felt(0n),
|
|
13
13
|
new Felt(0n),
|
|
14
14
|
new Felt(0n),
|
|
15
|
-
]
|
|
16
|
-
|
|
15
|
+
];
|
|
16
|
+
}
|
|
17
|
+
function buildProcedureThresholdAdvice(procedure, threshold) {
|
|
18
|
+
// `Poseidon2.hashElements` consumes (frees) its `FeltArray` by value, so the
|
|
19
|
+
// advice payload must be a freshly built one — reusing the hashed array
|
|
20
|
+
// surfaces as "null pointer passed to rust" at the later `advice.insert`.
|
|
21
|
+
const configHash = Poseidon2.hashElements(new FeltArray(buildProcedureThresholdFelts(procedure, threshold)));
|
|
22
|
+
const payload = new FeltArray(buildProcedureThresholdFelts(procedure, threshold));
|
|
17
23
|
return { configHash, payload };
|
|
18
24
|
}
|
|
19
25
|
async function buildUpdateProcedureThresholdScript(client, procedure, threshold, signatureScheme, midenRpcEndpoint) {
|
|
@@ -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,EACL,mBAAmB,EACnB,aAAa,GACd,MAAM,yBAAyB,CAAC;AACjC,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;AAIhD,SAAS,
|
|
1
|
+
{"version":3,"file":"updateProcedureThreshold.js","sourceRoot":"","sources":["../../src/transaction/updateProcedureThreshold.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateSigners.d.ts","sourceRoot":"","sources":["../../src/transaction/updateSigners.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,WAAW,EAEhB,kBAAkB,EAGlB,KAAK,aAAa,EAClB,IAAI,EAEL,MAAM,sBAAsB,CAAC;AAQ9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"updateSigners.d.ts","sourceRoot":"","sources":["../../src/transaction/updateSigners.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,WAAW,EAEhB,kBAAkB,EAGlB,KAAK,aAAa,EAClB,IAAI,EAEL,MAAM,sBAAsB,CAAC;AAQ9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAuDrD,wBAAsB,oCAAoC,CACxD,MAAM,EAAE,WAAW,GAAG,aAAa,EACnC,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EAAE,EAC3B,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC;IAAE,OAAO,EAAE,kBAAkB,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,IAAI,CAAA;CAAE,CAAC,CAsCxE"}
|
|
@@ -3,7 +3,7 @@ import { MULTISIG_ECDSA_MASM, MULTISIG_MASM, } from '../account/masm/auth.js';
|
|
|
3
3
|
import { compileTxScript } from '../raw-client.js';
|
|
4
4
|
import { normalizeHexWord } from '../utils/encoding.js';
|
|
5
5
|
import { randomWord } from '../utils/random.js';
|
|
6
|
-
function
|
|
6
|
+
function buildMultisigConfigFelts(threshold, signerCommitments) {
|
|
7
7
|
const numApprovers = signerCommitments.length;
|
|
8
8
|
const felts = [
|
|
9
9
|
new Felt(BigInt(threshold)),
|
|
@@ -15,8 +15,14 @@ function buildMultisigConfigAdvice(threshold, signerCommitments) {
|
|
|
15
15
|
const word = WordType.fromHex(normalizeHexWord(commitment));
|
|
16
16
|
felts.push(...word.toFelts());
|
|
17
17
|
}
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
return felts;
|
|
19
|
+
}
|
|
20
|
+
function buildMultisigConfigAdvice(threshold, signerCommitments) {
|
|
21
|
+
// `Poseidon2.hashElements` consumes (frees) its `FeltArray` by value, so the
|
|
22
|
+
// advice payload must be a freshly built one — reusing the hashed array
|
|
23
|
+
// surfaces as "null pointer passed to rust" at the later `advice.insert`.
|
|
24
|
+
const configHash = Poseidon2.hashElements(new FeltArray(buildMultisigConfigFelts(threshold, signerCommitments)));
|
|
25
|
+
const payload = new FeltArray(buildMultisigConfigFelts(threshold, signerCommitments));
|
|
20
26
|
return { configHash, payload };
|
|
21
27
|
}
|
|
22
28
|
async function buildUpdateSignersScript(client, signatureScheme, midenRpcEndpoint) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateSigners.js","sourceRoot":"","sources":["../../src/transaction/updateSigners.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,IAAI,EACJ,SAAS,EAET,SAAS,EAET,yBAAyB,EAIzB,IAAI,IAAI,QAAQ,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,mBAAmB,EACnB,aAAa,GACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIhD,SAAS,
|
|
1
|
+
{"version":3,"file":"updateSigners.js","sourceRoot":"","sources":["../../src/transaction/updateSigners.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"digest.d.ts","sourceRoot":"","sources":["../../src/utils/digest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAsC,IAAI,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"digest.d.ts","sourceRoot":"","sources":["../../src/utils/digest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAsC,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAGhF,qBAAa,UAAU;IACrB,MAAM,CAAC,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAgB7E,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,kBAAkB,GAAG,IAAI;IAQlG,OAAO,CAAC,MAAM,CAAC,oCAAoC;IAoBnD,MAAM,CAAC,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAMrD,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAI/B,OAAO,CAAC,MAAM,CAAC,oBAAoB;CAgBpC"}
|
package/dist/utils/digest.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AccountId, Felt, FeltArray, Rpo256, Word } from '@miden-sdk/miden-sdk';
|
|
2
|
+
import { feltFromU64Reduced } from './felt.js';
|
|
2
3
|
export class AuthDigest {
|
|
3
4
|
static fromAccountIdWithTimestamp(accountId, timestamp) {
|
|
4
5
|
const paddedHex = accountId.startsWith('0x') ? accountId : `0x${accountId}`;
|
|
@@ -8,7 +9,7 @@ export class AuthDigest {
|
|
|
8
9
|
const feltArray = new FeltArray([
|
|
9
10
|
prefix,
|
|
10
11
|
suffix,
|
|
11
|
-
|
|
12
|
+
feltFromU64Reduced(BigInt(timestamp)),
|
|
12
13
|
new Felt(0n),
|
|
13
14
|
]);
|
|
14
15
|
return Rpo256.hashElements(feltArray);
|
|
@@ -24,7 +25,7 @@ export class AuthDigest {
|
|
|
24
25
|
const feltArray = new FeltArray([
|
|
25
26
|
prefix,
|
|
26
27
|
suffix,
|
|
27
|
-
|
|
28
|
+
feltFromU64Reduced(BigInt(timestamp)),
|
|
28
29
|
...payloadWord.toFelts(),
|
|
29
30
|
]);
|
|
30
31
|
return Rpo256.hashElements(feltArray);
|
|
@@ -47,7 +48,7 @@ export class AuthDigest {
|
|
|
47
48
|
for (let j = 0; j < 8 && i + j < bytes.length; j += 1) {
|
|
48
49
|
packed |= BigInt(bytes[i + j]) << (8n * BigInt(j));
|
|
49
50
|
}
|
|
50
|
-
payloadElements.push(
|
|
51
|
+
payloadElements.push(feltFromU64Reduced(packed));
|
|
51
52
|
}
|
|
52
53
|
return Rpo256.hashElements(new FeltArray(payloadElements));
|
|
53
54
|
}
|
package/dist/utils/digest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"digest.js","sourceRoot":"","sources":["../../src/utils/digest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"digest.js","sourceRoot":"","sources":["../../src/utils/digest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,OAAO,UAAU;IACrB,MAAM,CAAC,0BAA0B,CAAC,SAAiB,EAAE,SAAiB;QACpE,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC5E,MAAM,eAAe,GAAG,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;QAExC,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC;YAC9B,MAAM;YACN,MAAM;YACN,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,EAAE,CAAC;SACb,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,SAAiB,EAAE,SAAiB,EAAE,cAAkC;QACzF,OAAO,UAAU,CAAC,oCAAoC,CACpD,SAAS,EACT,SAAS,EACT,UAAU,CAAC,oBAAoB,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAC1D,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,oCAAoC,CACjD,SAAiB,EACjB,SAAiB,EACjB,WAAiB;QAEjB,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC5E,MAAM,eAAe,GAAG,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;QAExC,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC;YAC9B,MAAM;YACN,MAAM;YACN,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACrC,GAAG,WAAW,CAAC,OAAO,EAAE;SACzB,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,aAAqB;QAC5C,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,aAAa,EAAE,CAAC;QACxF,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;IACvC,CAAC;IAEO,MAAM,CAAC,gBAAgB;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC;IAEO,MAAM,CAAC,oBAAoB,CAAC,KAAiB;QACnD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,UAAU,CAAC,gBAAgB,EAAE,CAAC;QACvC,CAAC;QAED,MAAM,eAAe,GAAW,EAAE,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtD,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACrD,CAAC;YACD,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;IAC7D,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Felt } from '@miden-sdk/miden-sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Maps an arbitrary `u64` onto a canonical field element by reducing modulo the
|
|
4
|
+
* field order, mirroring `guardian_shared::felt::felt_from_u64_reduced`.
|
|
5
|
+
*
|
|
6
|
+
* Miden 0.15's `Felt` constructor rejects non-canonical inputs (values
|
|
7
|
+
* `>= FELT_ORDER`), whereas 0.14 reduced silently. Byte-packed digest inputs are
|
|
8
|
+
* arbitrary `u64`s, so reducing here preserves the original digest layout, keeps
|
|
9
|
+
* construction infallible, and stays byte-identical to server-side signing.
|
|
10
|
+
*/
|
|
11
|
+
export declare function feltFromU64Reduced(value: bigint): Felt;
|
|
12
|
+
//# sourceMappingURL=felt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"felt.d.ts","sourceRoot":"","sources":["../../src/utils/felt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAQ5C;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEtD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Felt } from '@miden-sdk/miden-sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Goldilocks field order (`2^64 - 2^32 + 1`), matching `Felt::ORDER` in
|
|
4
|
+
* `miden-protocol`.
|
|
5
|
+
*/
|
|
6
|
+
const FELT_ORDER = 18446744069414584321n;
|
|
7
|
+
/**
|
|
8
|
+
* Maps an arbitrary `u64` onto a canonical field element by reducing modulo the
|
|
9
|
+
* field order, mirroring `guardian_shared::felt::felt_from_u64_reduced`.
|
|
10
|
+
*
|
|
11
|
+
* Miden 0.15's `Felt` constructor rejects non-canonical inputs (values
|
|
12
|
+
* `>= FELT_ORDER`), whereas 0.14 reduced silently. Byte-packed digest inputs are
|
|
13
|
+
* arbitrary `u64`s, so reducing here preserves the original digest layout, keeps
|
|
14
|
+
* construction infallible, and stays byte-identical to server-side signing.
|
|
15
|
+
*/
|
|
16
|
+
export function feltFromU64Reduced(value) {
|
|
17
|
+
return new Felt(BigInt.asUintN(64, value) % FELT_ORDER);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=felt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"felt.js","sourceRoot":"","sources":["../../src/utils/felt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C;;;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"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC"}
|
package/dist/utils/index.js
CHANGED
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC"}
|
package/dist/utils/word.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"word.d.ts","sourceRoot":"","sources":["../../src/utils/word.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAE5C;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"word.d.ts","sourceRoot":"","sources":["../../src/utils/word.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAE5C;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CASrE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,GAAG,UAAU,CAU/F"}
|
package/dist/utils/word.js
CHANGED
|
@@ -2,8 +2,13 @@ export function wordToHex(word) {
|
|
|
2
2
|
return word.toHex();
|
|
3
3
|
}
|
|
4
4
|
export function wordElementToBigInt(word, index) {
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
if (index < 0 || index > 3) {
|
|
6
|
+
return 0n;
|
|
7
|
+
}
|
|
8
|
+
// The wallet-embedded 0.15 SDK lacks `toU64s()` on storage-read Words; fall
|
|
9
|
+
// back to `toFelts()`, which has the same element order.
|
|
10
|
+
const elements = typeof word.toU64s === 'function' ? word.toU64s() : word.toFelts().map(f => f.asInt());
|
|
11
|
+
return index < elements.length ? elements[index] : 0n;
|
|
7
12
|
}
|
|
8
13
|
export function wordToBytes(word) {
|
|
9
14
|
const felts = word.toFelts();
|
package/dist/utils/word.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"word.js","sourceRoot":"","sources":["../../src/utils/word.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,SAAS,CAAC,IAAU;IAClC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAU,EAAE,KAAa;IAC3D,
|
|
1
|
+
{"version":3,"file":"word.js","sourceRoot":"","sources":["../../src/utils/word.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,SAAS,CAAC,IAAU;IAClC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAU,EAAE,KAAa;IAC3D,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,4EAA4E;IAC5E,yDAAyD;IACzD,MAAM,QAAQ,GACZ,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACzF,OAAO,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAuD;IACjF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/masm/auth/multisig.masm
CHANGED
|
@@ -349,14 +349,20 @@ pub proc update_signers_and_threshold(multisig_config_hash: word)
|
|
|
349
349
|
drop
|
|
350
350
|
# => [pad(12)]
|
|
351
351
|
|
|
352
|
-
# compare initial vs current multisig config
|
|
353
|
-
|
|
354
|
-
# load init_num_of_approvers & new_num_of_approvers
|
|
355
352
|
loc_load.0 loc_load.1
|
|
356
353
|
# => [init_num_of_approvers, new_num_of_approvers, pad(12)]
|
|
357
354
|
|
|
358
|
-
|
|
359
|
-
|
|
355
|
+
dup.1 dup.1
|
|
356
|
+
u32assert2 u32lt
|
|
357
|
+
# => [should_cleanup, init_num_of_approvers, new_num_of_approvers, pad(12)]
|
|
358
|
+
|
|
359
|
+
if.true
|
|
360
|
+
exec.cleanup_pubkey_mapping
|
|
361
|
+
# => [pad(12)]
|
|
362
|
+
else
|
|
363
|
+
drop drop
|
|
364
|
+
# => [pad(12)]
|
|
365
|
+
end
|
|
360
366
|
end
|
|
361
367
|
|
|
362
368
|
#! Update or clear the threshold override for a specific procedure.
|
|
@@ -349,14 +349,20 @@ pub proc update_signers_and_threshold(multisig_config_hash: word)
|
|
|
349
349
|
drop
|
|
350
350
|
# => [pad(12)]
|
|
351
351
|
|
|
352
|
-
# compare initial vs current multisig config
|
|
353
|
-
|
|
354
|
-
# load init_num_of_approvers & new_num_of_approvers
|
|
355
352
|
loc_load.0 loc_load.1
|
|
356
353
|
# => [init_num_of_approvers, new_num_of_approvers, pad(12)]
|
|
357
354
|
|
|
358
|
-
|
|
359
|
-
|
|
355
|
+
dup.1 dup.1
|
|
356
|
+
u32assert2 u32lt
|
|
357
|
+
# => [should_cleanup, init_num_of_approvers, new_num_of_approvers, pad(12)]
|
|
358
|
+
|
|
359
|
+
if.true
|
|
360
|
+
exec.cleanup_pubkey_mapping
|
|
361
|
+
# => [pad(12)]
|
|
362
|
+
else
|
|
363
|
+
drop drop
|
|
364
|
+
# => [pad(12)]
|
|
365
|
+
end
|
|
360
366
|
end
|
|
361
367
|
|
|
362
368
|
#! Update or clear the threshold override for a specific procedure.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openzeppelin/miden-multisig-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0-rc.0",
|
|
4
4
|
"description": "TypeScript SDK for Miden multisig accounts with GUARDIAN integration",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -28,9 +28,9 @@
|
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@noble/curves": "^1.9.7",
|
|
31
|
-
"@miden-sdk/miden-sdk": "0.
|
|
31
|
+
"@miden-sdk/miden-sdk": "^0.15.0",
|
|
32
32
|
"@noble/hashes": "^2.0.1",
|
|
33
|
-
"@openzeppelin/guardian-client": "^0.
|
|
33
|
+
"@openzeppelin/guardian-client": "^0.15.0-rc.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"typescript": "^5.7.2",
|
package/src/account/builder.ts
CHANGED
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
import {
|
|
8
8
|
AccountBuilder,
|
|
9
9
|
AccountComponent,
|
|
10
|
-
AccountType,
|
|
11
10
|
AccountStorageMode,
|
|
12
11
|
type MidenClient,
|
|
13
12
|
} from '@miden-sdk/miden-sdk';
|
|
@@ -57,7 +56,7 @@ export async function createMultisigAccount(
|
|
|
57
56
|
? 'openzeppelin::auth::multisig_ecdsa'
|
|
58
57
|
: 'openzeppelin::auth::multisig';
|
|
59
58
|
|
|
60
|
-
const authBuilder = rawClient.createCodeBuilder();
|
|
59
|
+
const authBuilder = await rawClient.createCodeBuilder();
|
|
61
60
|
authBuilder.linkModule(guardianLibraryPath, guardianMasm);
|
|
62
61
|
authBuilder.linkModule(multisigLibraryPath, multisigMasm);
|
|
63
62
|
const authComponentCode = authBuilder.compileAccountComponentCode(authComponentMasm);
|
|
@@ -75,8 +74,9 @@ export async function createMultisigAccount(
|
|
|
75
74
|
? AccountStorageMode.public()
|
|
76
75
|
: AccountStorageMode.private();
|
|
77
76
|
|
|
77
|
+
// Miden 0.15: the account-ID no longer encodes account type; visibility is set
|
|
78
|
+
// via `storageMode()`, so the former `.accountType(...)` call is gone.
|
|
78
79
|
const accountBuilder = new AccountBuilder(seed)
|
|
79
|
-
.accountType(AccountType.RegularAccountUpdatableCode)
|
|
80
80
|
.storageMode(storageMode)
|
|
81
81
|
.withAuthComponent(authComponent)
|
|
82
82
|
.withBasicWalletComponent();
|
package/src/account/masm/auth.ts
CHANGED
|
@@ -352,14 +352,20 @@ pub proc update_signers_and_threshold(multisig_config_hash: word)
|
|
|
352
352
|
drop
|
|
353
353
|
# => [pad(12)]
|
|
354
354
|
|
|
355
|
-
# compare initial vs current multisig config
|
|
356
|
-
|
|
357
|
-
# load init_num_of_approvers & new_num_of_approvers
|
|
358
355
|
loc_load.0 loc_load.1
|
|
359
356
|
# => [init_num_of_approvers, new_num_of_approvers, pad(12)]
|
|
360
357
|
|
|
361
|
-
|
|
362
|
-
|
|
358
|
+
dup.1 dup.1
|
|
359
|
+
u32assert2 u32lt
|
|
360
|
+
# => [should_cleanup, init_num_of_approvers, new_num_of_approvers, pad(12)]
|
|
361
|
+
|
|
362
|
+
if.true
|
|
363
|
+
exec.cleanup_pubkey_mapping
|
|
364
|
+
# => [pad(12)]
|
|
365
|
+
else
|
|
366
|
+
drop drop
|
|
367
|
+
# => [pad(12)]
|
|
368
|
+
end
|
|
363
369
|
end
|
|
364
370
|
|
|
365
371
|
#! Update or clear the threshold override for a specific procedure.
|
|
@@ -902,14 +908,20 @@ pub proc update_signers_and_threshold(multisig_config_hash: word)
|
|
|
902
908
|
drop
|
|
903
909
|
# => [pad(12)]
|
|
904
910
|
|
|
905
|
-
# compare initial vs current multisig config
|
|
906
|
-
|
|
907
|
-
# load init_num_of_approvers & new_num_of_approvers
|
|
908
911
|
loc_load.0 loc_load.1
|
|
909
912
|
# => [init_num_of_approvers, new_num_of_approvers, pad(12)]
|
|
910
913
|
|
|
911
|
-
|
|
912
|
-
|
|
914
|
+
dup.1 dup.1
|
|
915
|
+
u32assert2 u32lt
|
|
916
|
+
# => [should_cleanup, init_num_of_approvers, new_num_of_approvers, pad(12)]
|
|
917
|
+
|
|
918
|
+
if.true
|
|
919
|
+
exec.cleanup_pubkey_mapping
|
|
920
|
+
# => [pad(12)]
|
|
921
|
+
else
|
|
922
|
+
drop drop
|
|
923
|
+
# => [pad(12)]
|
|
924
|
+
end
|
|
913
925
|
end
|
|
914
926
|
|
|
915
927
|
#! Update or clear the threshold override for a specific procedure.
|
package/src/lookupAuth.test.ts
CHANGED
|
@@ -156,8 +156,9 @@ describe('lookupAuthDigest', () => {
|
|
|
156
156
|
lookupAuthDigest(-1, keyCommitmentHex);
|
|
157
157
|
|
|
158
158
|
const messageCall = hashCalls[hashCalls.length - 1];
|
|
159
|
-
// -1
|
|
160
|
-
|
|
159
|
+
// -1 casts to u64 0xFFFFFFFFFFFFFFFF, then reduces mod the Goldilocks prime
|
|
160
|
+
// (matching Rust `felt_from_u64_reduced`): 0xFFFFFFFFFFFFFFFF - (2^64 - 2^32 + 1) = 0xFFFFFFFE.
|
|
161
|
+
expect(messageCall.input[4].value).toBe(0xFFFFFFFEn);
|
|
161
162
|
});
|
|
162
163
|
|
|
163
164
|
it('produces distinct digest inputs for distinct commitments', () => {
|
package/src/lookupAuth.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Felt, FeltArray, Rpo256, Word } from '@miden-sdk/miden-sdk';
|
|
2
|
+
import { feltFromU64Reduced } from './utils/felt.js';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* Lookup-bound message format used to sign requests against the Guardian
|
|
@@ -25,7 +26,7 @@ function bytesToFelts(bytes: Uint8Array): Felt[] {
|
|
|
25
26
|
const byte = offset + i < bytes.length ? bytes[offset + i] : 0;
|
|
26
27
|
value |= BigInt(byte) << BigInt(8 * i);
|
|
27
28
|
}
|
|
28
|
-
felts.push(
|
|
29
|
+
felts.push(feltFromU64Reduced(value));
|
|
29
30
|
}
|
|
30
31
|
return felts;
|
|
31
32
|
}
|
|
@@ -56,9 +57,10 @@ function lookupDomainTag(): Word {
|
|
|
56
57
|
* ```
|
|
57
58
|
*
|
|
58
59
|
* @param timestampMs Unix milliseconds. Reinterpreted as `u64` to match the
|
|
59
|
-
* Rust `as u64` cast (so negative inputs wrap into the
|
|
60
|
-
*
|
|
61
|
-
*
|
|
60
|
+
* Rust `as u64` cast (so negative inputs wrap into the high
|
|
61
|
+
* range), then reduced mod the Goldilocks prime via
|
|
62
|
+
* `feltFromU64Reduced` (Miden 0.15's `Felt` constructor
|
|
63
|
+
* rejects non-canonical inputs instead of reducing).
|
|
62
64
|
* @param keyCommitmentHex `0x`-prefixed 32-byte hex string for the queried
|
|
63
65
|
* commitment.
|
|
64
66
|
*/
|
|
@@ -66,8 +68,7 @@ export function lookupAuthDigest(timestampMs: number | bigint, keyCommitmentHex:
|
|
|
66
68
|
const tag = lookupDomainTag().toFelts();
|
|
67
69
|
const kc = Word.fromHex(keyCommitmentHex).toFelts();
|
|
68
70
|
const tsBigInt = typeof timestampMs === 'bigint' ? timestampMs : BigInt(timestampMs);
|
|
69
|
-
const
|
|
70
|
-
const timestampFelt = new Felt(timestampU64);
|
|
71
|
+
const timestampFelt = feltFromU64Reduced(tsBigInt);
|
|
71
72
|
|
|
72
73
|
const message = new FeltArray([
|
|
73
74
|
tag[0],
|