@silvana-one/mina-utils 1.0.22 → 1.0.24
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/node/commitment/commitment.d.ts +11 -0
- package/dist/node/commitment/commitment.js +72 -0
- package/dist/node/commitment/commitment.js.map +1 -0
- package/dist/node/commitment/constants.d.ts +11 -0
- package/dist/node/commitment/constants.js +3125 -0
- package/dist/node/commitment/constants.js.map +1 -0
- package/dist/node/commitment/exp.d.ts +5 -0
- package/dist/node/commitment/exp.js +106 -0
- package/dist/node/commitment/exp.js.map +1 -0
- package/dist/node/commitment/index.d.ts +5 -0
- package/dist/node/commitment/index.js +6 -0
- package/dist/node/commitment/index.js.map +1 -0
- package/dist/node/commitment/tree.d.ts +6 -0
- package/dist/node/commitment/tree.js +17 -0
- package/dist/node/commitment/tree.js.map +1 -0
- package/dist/node/commitment/witnesses.d.ts +6 -0
- package/dist/node/commitment/witnesses.js +3085 -0
- package/dist/node/commitment/witnesses.js.map +1 -0
- package/dist/node/index.cjs +12518 -2
- package/dist/node/index.d.ts +1 -0
- package/dist/node/index.js +1 -0
- package/dist/node/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/tsconfig.web.tsbuildinfo +1 -1
- package/dist/web/commitment/commitment.d.ts +11 -0
- package/dist/web/commitment/commitment.js +72 -0
- package/dist/web/commitment/commitment.js.map +1 -0
- package/dist/web/commitment/constants.d.ts +11 -0
- package/dist/web/commitment/constants.js +3125 -0
- package/dist/web/commitment/constants.js.map +1 -0
- package/dist/web/commitment/exp.d.ts +5 -0
- package/dist/web/commitment/exp.js +106 -0
- package/dist/web/commitment/exp.js.map +1 -0
- package/dist/web/commitment/index.d.ts +5 -0
- package/dist/web/commitment/index.js +6 -0
- package/dist/web/commitment/index.js.map +1 -0
- package/dist/web/commitment/tree.d.ts +6 -0
- package/dist/web/commitment/tree.js +17 -0
- package/dist/web/commitment/tree.js.map +1 -0
- package/dist/web/commitment/witnesses.d.ts +6 -0
- package/dist/web/commitment/witnesses.js +3085 -0
- package/dist/web/commitment/witnesses.js.map +1 -0
- package/dist/web/index.d.ts +1 -0
- package/dist/web/index.js +1 -0
- package/dist/web/index.js.map +1 -1
- package/package.json +5 -5
- package/src/commitment/README.md +3 -0
- package/src/commitment/commitment.ts +149 -0
- package/src/commitment/constants.ts +3135 -0
- package/src/commitment/exp.ts +139 -0
- package/src/commitment/index.ts +5 -0
- package/src/commitment/tree.ts +18 -0
- package/src/commitment/witnesses.ts +3088 -0
- package/src/index.ts +1 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Field, UInt32 } from "o1js";
|
|
2
|
+
import { Fr } from "./constants.js";
|
|
3
|
+
export type CanonicalElement = InstanceType<typeof Fr.Canonical>;
|
|
4
|
+
export type AlmostReducedElement = InstanceType<typeof Fr.AlmostReduced>;
|
|
5
|
+
export declare const R: CanonicalElement;
|
|
6
|
+
export declare const S: CanonicalElement;
|
|
7
|
+
export declare function scalar(n: bigint): CanonicalElement;
|
|
8
|
+
export declare function blsCommitment(element: CanonicalElement): Field;
|
|
9
|
+
export declare function digestStruct(fields: CanonicalElement[]): AlmostReducedElement;
|
|
10
|
+
export declare function commit(table: AlmostReducedElement[]): AlmostReducedElement;
|
|
11
|
+
export declare function update(oldTableCommitment: AlmostReducedElement, oldStructDigest: AlmostReducedElement, newStructDigest: AlmostReducedElement, index: UInt32): AlmostReducedElement;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { Field } from "o1js";
|
|
2
|
+
import { getR, Fr } from "./constants.js";
|
|
3
|
+
import { rScalarPowProvable } from "./exp.js";
|
|
4
|
+
// Create R constant for ZkProgram use (needs to be available at module level for provable code)
|
|
5
|
+
export const R = getR();
|
|
6
|
+
// ----- constants taken from Move code (big‑endian hex) -----
|
|
7
|
+
export const S = Fr.from(0x1582695da6689f26db7bb3eb32907ecd0ac3af032aefad31a069352705f0d459n);
|
|
8
|
+
const P = Field(20359658106300430391853594957854653514501797417378649347544016260949017072120n);
|
|
9
|
+
const P2 = P.mul(P);
|
|
10
|
+
// ----- helpers -----
|
|
11
|
+
export function scalar(n) {
|
|
12
|
+
return Fr.from(n);
|
|
13
|
+
}
|
|
14
|
+
export function blsCommitment(element) {
|
|
15
|
+
return element.value[0]
|
|
16
|
+
.add(element.value[1].mul(P))
|
|
17
|
+
.add(element.value[1].mul(P2));
|
|
18
|
+
}
|
|
19
|
+
// inner: digest one struct
|
|
20
|
+
export function digestStruct(fields) {
|
|
21
|
+
let d = Fr.from(0n).assertAlmostReduced();
|
|
22
|
+
for (const f of fields) {
|
|
23
|
+
const prod = d.mul(S); // returns Unreduced
|
|
24
|
+
d = prod.add(f).assertAlmostReduced(); // reduce for next iteration
|
|
25
|
+
}
|
|
26
|
+
return d;
|
|
27
|
+
}
|
|
28
|
+
// outer: commit whole table (vector of digests)
|
|
29
|
+
export function commit(table) {
|
|
30
|
+
let acc = Fr.from(0n).assertAlmostReduced();
|
|
31
|
+
const r = getR(); // Get R once, not in every iteration
|
|
32
|
+
// Iterate in reverse order so that table[i] gets coefficient R^i
|
|
33
|
+
for (let i = table.length - 1; i >= 0; i--) {
|
|
34
|
+
const prod = acc.mul(r); // returns Unreduced
|
|
35
|
+
acc = prod.add(table[i]).assertAlmostReduced(); // reduce for next iteration
|
|
36
|
+
}
|
|
37
|
+
return acc;
|
|
38
|
+
}
|
|
39
|
+
// constant‑time single‑field update using struct digest recalculation (non-provable version)
|
|
40
|
+
// export function update(
|
|
41
|
+
// oldTableCommitment: AlmostReducedElement,
|
|
42
|
+
// oldStructDigest: AlmostReducedElement,
|
|
43
|
+
// newStructDigest: AlmostReducedElement,
|
|
44
|
+
// index: number
|
|
45
|
+
// ): AlmostReducedElement {
|
|
46
|
+
// // The table commitment formula in commit() now produces:
|
|
47
|
+
// // table[0]*R^0 + table[1]*R^1 + table[2]*R^2 + ... + table[i]*R^i
|
|
48
|
+
// // So position i has coefficient R^i
|
|
49
|
+
// // Position i has coefficient R^i - use optimized lookup table exponentiation
|
|
50
|
+
// const rPowI = rScalarPow(index).assertCanonical();
|
|
51
|
+
// // Calculate the change: new_commitment = old_commitment + (new_struct - old_struct) * R^i
|
|
52
|
+
// const structDelta = newStructDigest
|
|
53
|
+
// .sub(oldStructDigest)
|
|
54
|
+
// .assertAlmostReduced();
|
|
55
|
+
// const tableDelta = structDelta.mul(rPowI).assertAlmostReduced();
|
|
56
|
+
// return oldTableCommitment.add(tableDelta).assertAlmostReduced();
|
|
57
|
+
// }
|
|
58
|
+
// constant‑time single‑field update using struct digest recalculation (provable version)
|
|
59
|
+
export function update(oldTableCommitment, oldStructDigest, newStructDigest, index) {
|
|
60
|
+
// The table commitment formula in commit() now produces:
|
|
61
|
+
// table[0]*R^0 + table[1]*R^1 + table[2]*R^2 + ... + table[i]*R^i
|
|
62
|
+
// So position i has coefficient R^i
|
|
63
|
+
// Position i has coefficient R^i - use provable lookup table exponentiation
|
|
64
|
+
const rPowI = rScalarPowProvable(index).assertCanonical();
|
|
65
|
+
// Calculate the change: new_commitment = old_commitment + (new_struct - old_struct) * R^i
|
|
66
|
+
const structDelta = newStructDigest
|
|
67
|
+
.sub(oldStructDigest)
|
|
68
|
+
.assertAlmostReduced();
|
|
69
|
+
const tableDelta = structDelta.mul(rPowI).assertAlmostReduced();
|
|
70
|
+
return oldTableCommitment.add(tableDelta).assertAlmostReduced();
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=commitment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commitment.js","sourceRoot":"","sources":["../../../src/commitment/commitment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { Fr, BLS_FR, TABLE0, TABLE1, TABLE2 };
|
|
2
|
+
declare const BLS_FR = 52435875175126190479447740508185965837690552500527637822603658699938581184513n;
|
|
3
|
+
declare const Fr: typeof import("node_modules/o1js/dist/node/lib/provable/foreign-field.js").UnreducedForeignField;
|
|
4
|
+
type CanonicalElement = InstanceType<typeof Fr.Canonical>;
|
|
5
|
+
export declare function getR(): CanonicalElement;
|
|
6
|
+
export declare function getTable0Entry(index: number): CanonicalElement;
|
|
7
|
+
export declare function getTable1Entry(index: number): CanonicalElement;
|
|
8
|
+
export declare function getTable2Entry(index: number): CanonicalElement;
|
|
9
|
+
declare const TABLE0: readonly bigint[];
|
|
10
|
+
declare const TABLE1: readonly bigint[];
|
|
11
|
+
declare const TABLE2: readonly bigint[];
|