@aztec/bb.js 0.0.1-commit.f146247c → 0.0.1-commit.f1df4d2
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/build/amd64-linux/bb +0 -0
- package/build/amd64-macos/bb +0 -0
- package/build/amd64-macos/nodejs_module.node +0 -0
- package/build/arm64-linux/bb +0 -0
- package/build/arm64-macos/bb +0 -0
- package/build/arm64-macos/nodejs_module.node +0 -0
- package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg-threads.js +1 -1
- package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg.js +1 -1
- package/dest/browser/crs/net_crs.d.ts +6 -1
- package/dest/browser/crs/net_crs.d.ts.map +1 -1
- package/dest/browser/crs/net_crs.js +30 -7
- package/dest/node/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
- package/dest/node/crs/net_crs.d.ts +6 -1
- package/dest/node/crs/net_crs.d.ts.map +1 -1
- package/dest/node/crs/net_crs.js +30 -7
- package/dest/node/crs/net_crs.test.d.ts +2 -0
- package/dest/node/crs/net_crs.test.d.ts.map +1 -0
- package/dest/node/crs/net_crs.test.js +39 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
- package/dest/node-cjs/crs/net_crs.d.ts +6 -1
- package/dest/node-cjs/crs/net_crs.d.ts.map +1 -1
- package/dest/node-cjs/crs/net_crs.js +31 -7
- package/dest/node-cjs/crs/net_crs.test.d.ts +2 -0
- package/dest/node-cjs/crs/net_crs.test.d.ts.map +1 -0
- package/dest/node-cjs/crs/net_crs.test.js +41 -0
- package/package.json +1 -1
- package/src/crs/net_crs.test.ts +47 -0
- package/src/crs/net_crs.ts +45 -14
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fetches data from primary URL, falling back to secondary on failure
|
|
3
|
+
* @internal Exported for testing
|
|
4
|
+
*/
|
|
5
|
+
export declare function fetchWithFallback(primaryUrl: string, fallbackUrl: string, options: RequestInit): Promise<Response>;
|
|
1
6
|
/**
|
|
2
7
|
* Downloader for CRS from the web or local.
|
|
3
8
|
*/
|
|
@@ -67,4 +72,4 @@ export declare class NetGrumpkinCrs {
|
|
|
67
72
|
getG1Data(): Uint8Array;
|
|
68
73
|
private fetchG1Data;
|
|
69
74
|
}
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0X2Nycy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Nycy9uZXRfY3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BOzs7R0FHRztBQUNILHdCQUFzQixpQkFBaUIsQ0FDckMsVUFBVSxFQUFFLE1BQU0sRUFDbEIsV0FBVyxFQUFFLE1BQU0sRUFDbkIsT0FBTyxFQUFFLFdBQVcsR0FDbkIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQVVuQjtBQUVEOztHQUVHO0FBQ0gscUJBQWEsTUFBTTthQVFDLFNBQVMsRUFBRSxNQUFNO0lBUG5DLE9BQU8sQ0FBQyxJQUFJLENBQWM7SUFDMUIsT0FBTyxDQUFDLE1BQU0sQ0FBYztJQUU1QjtJQUNFOztPQUVHO0lBQ2EsU0FBUyxFQUFFLE1BQU0sRUFDL0I7SUFFSjs7T0FFRztJQUNHLElBQUksa0JBR1Q7SUFFRDs7T0FFRztJQUNHLFlBQVksSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBR3hEO0lBRUQ7O09BRUc7SUFDRyxZQUFZLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUd4RDtJQUVLLGNBQWMscUNBR25CO0lBRUQ7O09BRUc7SUFDRyxjQUFjLHFDQUduQjtJQUVEOzs7T0FHRztJQUNILFNBQVMsSUFBSSxVQUFVLENBRXRCO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyxJQUFJLFVBQVUsQ0FFdEI7WUFLYSxXQUFXO1lBc0JYLFdBQVc7Q0FTMUI7QUFFRDs7R0FFRztBQUNILHFCQUFhLGNBQWM7YUFPUCxTQUFTLEVBQUUsTUFBTTtJQU5uQyxPQUFPLENBQUMsSUFBSSxDQUFjO0lBRTFCO0lBQ0U7O09BRUc7SUFDYSxTQUFTLEVBQUUsTUFBTSxFQUMvQjtJQUVKOztPQUVHO0lBQ0csSUFBSSxrQkFFVDtJQUVLLGNBQWMscUNBR25CO0lBRUQ7O09BRUc7SUFDRyxZQUFZLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUd4RDtJQUVEOzs7T0FHRztJQUNILFNBQVMsSUFBSSxVQUFVLENBRXRCO1lBS2EsV0FBVztDQW9CMUIifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"net_crs.d.ts","sourceRoot":"","sources":["../../../src/crs/net_crs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"net_crs.d.ts","sourceRoot":"","sources":["../../../src/crs/net_crs.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,QAAQ,CAAC,CAUnB;AAED;;GAEG;AACH,qBAAa,MAAM;aAQC,SAAS,EAAE,MAAM;IAPnC,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,MAAM,CAAc;IAE5B;IACE;;OAEG;IACa,SAAS,EAAE,MAAM,EAC/B;IAEJ;;OAEG;IACG,IAAI,kBAGT;IAED;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAGxD;IAED;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAGxD;IAEK,cAAc,qCAGnB;IAED;;OAEG;IACG,cAAc,qCAGnB;IAED;;;OAGG;IACH,SAAS,IAAI,UAAU,CAEtB;IAED;;;OAGG;IACH,SAAS,IAAI,UAAU,CAEtB;YAKa,WAAW;YAsBX,WAAW;CAS1B;AAED;;GAEG;AACH,qBAAa,cAAc;aAOP,SAAS,EAAE,MAAM;IANnC,OAAO,CAAC,IAAI,CAAc;IAE1B;IACE;;OAEG;IACa,SAAS,EAAE,MAAM,EAC/B;IAEJ;;OAEG;IACG,IAAI,kBAET;IAEK,cAAc,qCAGnB;IAED;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAGxD;IAED;;;OAGG;IACH,SAAS,IAAI,UAAU,CAEtB;YAKa,WAAW;CAoB1B"}
|
|
@@ -1,4 +1,24 @@
|
|
|
1
1
|
import { retry, makeBackoff } from '../retry/index.js';
|
|
2
|
+
// Primary CRS host (Cloudflare R2)
|
|
3
|
+
const CRS_PRIMARY_HOST = 'https://crs.aztec-cdn.foundation';
|
|
4
|
+
// Fallback CRS host (AWS S3)
|
|
5
|
+
const CRS_FALLBACK_HOST = 'https://crs.aztec-labs.com';
|
|
6
|
+
/**
|
|
7
|
+
* Fetches data from primary URL, falling back to secondary on failure
|
|
8
|
+
* @internal Exported for testing
|
|
9
|
+
*/
|
|
10
|
+
export async function fetchWithFallback(primaryUrl, fallbackUrl, options) {
|
|
11
|
+
try {
|
|
12
|
+
const response = await fetch(primaryUrl, options);
|
|
13
|
+
if (response.ok || response.status === 206) {
|
|
14
|
+
return response;
|
|
15
|
+
}
|
|
16
|
+
throw new Error(`HTTP ${response.status}`);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return await fetch(fallbackUrl, options);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
2
22
|
/**
|
|
3
23
|
* Downloader for CRS from the web or local.
|
|
4
24
|
*/
|
|
@@ -68,20 +88,22 @@ export class NetCrs {
|
|
|
68
88
|
return new Response(new Uint8Array([]));
|
|
69
89
|
}
|
|
70
90
|
const g1End = this.numPoints * 64 - 1;
|
|
71
|
-
|
|
91
|
+
const options = {
|
|
72
92
|
headers: {
|
|
73
93
|
Range: `bytes=0-${g1End}`,
|
|
74
94
|
},
|
|
75
95
|
cache: 'force-cache',
|
|
76
|
-
}
|
|
96
|
+
};
|
|
97
|
+
return await retry(() => fetchWithFallback(`${CRS_PRIMARY_HOST}/g1.dat`, `${CRS_FALLBACK_HOST}/g1.dat`, options), makeBackoff([5, 5, 5]));
|
|
77
98
|
}
|
|
78
99
|
/**
|
|
79
100
|
* Fetches the appropriate range of points from a remote source
|
|
80
101
|
*/
|
|
81
102
|
async fetchG2Data() {
|
|
82
|
-
|
|
103
|
+
const options = {
|
|
83
104
|
cache: 'force-cache',
|
|
84
|
-
}
|
|
105
|
+
};
|
|
106
|
+
return await retry(() => fetchWithFallback(`${CRS_PRIMARY_HOST}/g2.dat`, `${CRS_FALLBACK_HOST}/g2.dat`, options), makeBackoff([5, 5, 5]));
|
|
85
107
|
}
|
|
86
108
|
}
|
|
87
109
|
/**
|
|
@@ -130,12 +152,13 @@ export class NetGrumpkinCrs {
|
|
|
130
152
|
return new Response(new Uint8Array([]));
|
|
131
153
|
}
|
|
132
154
|
const g1End = this.numPoints * 64 - 1;
|
|
133
|
-
|
|
155
|
+
const options = {
|
|
134
156
|
headers: {
|
|
135
157
|
Range: `bytes=0-${g1End}`,
|
|
136
158
|
},
|
|
137
159
|
cache: 'force-cache',
|
|
138
|
-
}
|
|
160
|
+
};
|
|
161
|
+
return await fetchWithFallback(`${CRS_PRIMARY_HOST}/grumpkin_g1.dat`, `${CRS_FALLBACK_HOST}/grumpkin_g1.dat`, options);
|
|
139
162
|
}
|
|
140
163
|
}
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0X2Nycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jcnMvbmV0X2Nycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXZELG1DQUFtQztBQUNuQyxNQUFNLGdCQUFnQixHQUFHLGtDQUFrQyxDQUFDO0FBQzVELDZCQUE2QjtBQUM3QixNQUFNLGlCQUFpQixHQUFHLDRCQUE0QixDQUFDO0FBRXZEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLFVBQWtCLEVBQ2xCLFdBQW1CLEVBQ25CLE9BQW9CLEVBQ0Q7SUFDbkIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2xELElBQUksUUFBUSxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQzNDLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sTUFBTSxLQUFLLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7QUFBQSxDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sTUFBTTtJQVFDLFNBQVM7SUFQbkIsSUFBSSxDQUFjO0lBQ2xCLE1BQU0sQ0FBYztJQUU1QjtJQUNFOztPQUVHO0lBQ2EsU0FBaUIsRUFDakM7eUJBRGdCLFNBQVM7SUFDeEIsQ0FBQztJQUVKOztPQUVHO0lBQ0gsS0FBSyxDQUFDLElBQUksR0FBRztRQUNYLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxDQUFD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
|
|
Binary file
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fetches data from primary URL, falling back to secondary on failure
|
|
3
|
+
* @internal Exported for testing
|
|
4
|
+
*/
|
|
5
|
+
export declare function fetchWithFallback(primaryUrl: string, fallbackUrl: string, options: RequestInit): Promise<Response>;
|
|
1
6
|
/**
|
|
2
7
|
* Downloader for CRS from the web or local.
|
|
3
8
|
*/
|
|
@@ -67,4 +72,4 @@ export declare class NetGrumpkinCrs {
|
|
|
67
72
|
getG1Data(): Uint8Array;
|
|
68
73
|
private fetchG1Data;
|
|
69
74
|
}
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0X2Nycy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Nycy9uZXRfY3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BOzs7R0FHRztBQUNILHdCQUFzQixpQkFBaUIsQ0FDckMsVUFBVSxFQUFFLE1BQU0sRUFDbEIsV0FBVyxFQUFFLE1BQU0sRUFDbkIsT0FBTyxFQUFFLFdBQVcsR0FDbkIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQVVuQjtBQUVEOztHQUVHO0FBQ0gscUJBQWEsTUFBTTthQVFDLFNBQVMsRUFBRSxNQUFNO0lBUG5DLE9BQU8sQ0FBQyxJQUFJLENBQWM7SUFDMUIsT0FBTyxDQUFDLE1BQU0sQ0FBYztJQUU1QjtJQUNFOztPQUVHO0lBQ2EsU0FBUyxFQUFFLE1BQU0sRUFDL0I7SUFFSjs7T0FFRztJQUNHLElBQUksa0JBR1Q7SUFFRDs7T0FFRztJQUNHLFlBQVksSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBR3hEO0lBRUQ7O09BRUc7SUFDRyxZQUFZLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUd4RDtJQUVLLGNBQWMscUNBR25CO0lBRUQ7O09BRUc7SUFDRyxjQUFjLHFDQUduQjtJQUVEOzs7T0FHRztJQUNILFNBQVMsSUFBSSxVQUFVLENBRXRCO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyxJQUFJLFVBQVUsQ0FFdEI7WUFLYSxXQUFXO1lBc0JYLFdBQVc7Q0FTMUI7QUFFRDs7R0FFRztBQUNILHFCQUFhLGNBQWM7YUFPUCxTQUFTLEVBQUUsTUFBTTtJQU5uQyxPQUFPLENBQUMsSUFBSSxDQUFjO0lBRTFCO0lBQ0U7O09BRUc7SUFDYSxTQUFTLEVBQUUsTUFBTSxFQUMvQjtJQUVKOztPQUVHO0lBQ0csSUFBSSxrQkFFVDtJQUVLLGNBQWMscUNBR25CO0lBRUQ7O09BRUc7SUFDRyxZQUFZLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUd4RDtJQUVEOzs7T0FHRztJQUNILFNBQVMsSUFBSSxVQUFVLENBRXRCO1lBS2EsV0FBVztDQW9CMUIifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"net_crs.d.ts","sourceRoot":"","sources":["../../../src/crs/net_crs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"net_crs.d.ts","sourceRoot":"","sources":["../../../src/crs/net_crs.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,QAAQ,CAAC,CAUnB;AAED;;GAEG;AACH,qBAAa,MAAM;aAQC,SAAS,EAAE,MAAM;IAPnC,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,MAAM,CAAc;IAE5B;IACE;;OAEG;IACa,SAAS,EAAE,MAAM,EAC/B;IAEJ;;OAEG;IACG,IAAI,kBAGT;IAED;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAGxD;IAED;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAGxD;IAEK,cAAc,qCAGnB;IAED;;OAEG;IACG,cAAc,qCAGnB;IAED;;;OAGG;IACH,SAAS,IAAI,UAAU,CAEtB;IAED;;;OAGG;IACH,SAAS,IAAI,UAAU,CAEtB;YAKa,WAAW;YAsBX,WAAW;CAS1B;AAED;;GAEG;AACH,qBAAa,cAAc;aAOP,SAAS,EAAE,MAAM;IANnC,OAAO,CAAC,IAAI,CAAc;IAE1B;IACE;;OAEG;IACa,SAAS,EAAE,MAAM,EAC/B;IAEJ;;OAEG;IACG,IAAI,kBAET;IAEK,cAAc,qCAGnB;IAED;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAGxD;IAED;;;OAGG;IACH,SAAS,IAAI,UAAU,CAEtB;YAKa,WAAW;CAoB1B"}
|
package/dest/node/crs/net_crs.js
CHANGED
|
@@ -1,4 +1,24 @@
|
|
|
1
1
|
import { retry, makeBackoff } from '../retry/index.js';
|
|
2
|
+
// Primary CRS host (Cloudflare R2)
|
|
3
|
+
const CRS_PRIMARY_HOST = 'https://crs.aztec-cdn.foundation';
|
|
4
|
+
// Fallback CRS host (AWS S3)
|
|
5
|
+
const CRS_FALLBACK_HOST = 'https://crs.aztec-labs.com';
|
|
6
|
+
/**
|
|
7
|
+
* Fetches data from primary URL, falling back to secondary on failure
|
|
8
|
+
* @internal Exported for testing
|
|
9
|
+
*/
|
|
10
|
+
export async function fetchWithFallback(primaryUrl, fallbackUrl, options) {
|
|
11
|
+
try {
|
|
12
|
+
const response = await fetch(primaryUrl, options);
|
|
13
|
+
if (response.ok || response.status === 206) {
|
|
14
|
+
return response;
|
|
15
|
+
}
|
|
16
|
+
throw new Error(`HTTP ${response.status}`);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return await fetch(fallbackUrl, options);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
2
22
|
/**
|
|
3
23
|
* Downloader for CRS from the web or local.
|
|
4
24
|
*/
|
|
@@ -68,20 +88,22 @@ export class NetCrs {
|
|
|
68
88
|
return new Response(new Uint8Array([]));
|
|
69
89
|
}
|
|
70
90
|
const g1End = this.numPoints * 64 - 1;
|
|
71
|
-
|
|
91
|
+
const options = {
|
|
72
92
|
headers: {
|
|
73
93
|
Range: `bytes=0-${g1End}`,
|
|
74
94
|
},
|
|
75
95
|
cache: 'force-cache',
|
|
76
|
-
}
|
|
96
|
+
};
|
|
97
|
+
return await retry(() => fetchWithFallback(`${CRS_PRIMARY_HOST}/g1.dat`, `${CRS_FALLBACK_HOST}/g1.dat`, options), makeBackoff([5, 5, 5]));
|
|
77
98
|
}
|
|
78
99
|
/**
|
|
79
100
|
* Fetches the appropriate range of points from a remote source
|
|
80
101
|
*/
|
|
81
102
|
async fetchG2Data() {
|
|
82
|
-
|
|
103
|
+
const options = {
|
|
83
104
|
cache: 'force-cache',
|
|
84
|
-
}
|
|
105
|
+
};
|
|
106
|
+
return await retry(() => fetchWithFallback(`${CRS_PRIMARY_HOST}/g2.dat`, `${CRS_FALLBACK_HOST}/g2.dat`, options), makeBackoff([5, 5, 5]));
|
|
85
107
|
}
|
|
86
108
|
}
|
|
87
109
|
/**
|
|
@@ -130,12 +152,13 @@ export class NetGrumpkinCrs {
|
|
|
130
152
|
return new Response(new Uint8Array([]));
|
|
131
153
|
}
|
|
132
154
|
const g1End = this.numPoints * 64 - 1;
|
|
133
|
-
|
|
155
|
+
const options = {
|
|
134
156
|
headers: {
|
|
135
157
|
Range: `bytes=0-${g1End}`,
|
|
136
158
|
},
|
|
137
159
|
cache: 'force-cache',
|
|
138
|
-
}
|
|
160
|
+
};
|
|
161
|
+
return await fetchWithFallback(`${CRS_PRIMARY_HOST}/grumpkin_g1.dat`, `${CRS_FALLBACK_HOST}/grumpkin_g1.dat`, options);
|
|
139
162
|
}
|
|
140
163
|
}
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0X2Nycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jcnMvbmV0X2Nycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXZELG1DQUFtQztBQUNuQyxNQUFNLGdCQUFnQixHQUFHLGtDQUFrQyxDQUFDO0FBQzVELDZCQUE2QjtBQUM3QixNQUFNLGlCQUFpQixHQUFHLDRCQUE0QixDQUFDO0FBRXZEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLFVBQWtCLEVBQ2xCLFdBQW1CLEVBQ25CLE9BQW9CLEVBQ0Q7SUFDbkIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2xELElBQUksUUFBUSxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQzNDLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sTUFBTSxLQUFLLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7QUFBQSxDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sTUFBTTtJQVFDLFNBQVM7SUFQbkIsSUFBSSxDQUFjO0lBQ2xCLE1BQU0sQ0FBYztJQUU1QjtJQUNFOztPQUVHO0lBQ2EsU0FBaUIsRUFDakM7eUJBRGdCLFNBQVM7SUFDeEIsQ0FBQztJQUVKOztPQUVHO0lBQ0gsS0FBSyxDQUFDLElBQUksR0FBRztRQUNYLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxDQUFD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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"net_crs.test.d.ts","sourceRoot":"","sources":["../../../src/crs/net_crs.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { NetCrs, fetchWithFallback } from './net_crs.js';
|
|
2
|
+
// Expected first G1 point from BN254 CRS (generator point with x=1, y=2 in big-endian)
|
|
3
|
+
const BN254_G1_FIRST_ELEMENT = new Uint8Array([
|
|
4
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
5
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
|
|
6
|
+
]);
|
|
7
|
+
describe('NetCrs', () => {
|
|
8
|
+
it('should download CRS data from primary host', async () => {
|
|
9
|
+
const crs = new NetCrs(1);
|
|
10
|
+
await crs.init();
|
|
11
|
+
const g1Data = crs.getG1Data();
|
|
12
|
+
expect(g1Data.length).toBe(64); // 1 point * 64 bytes
|
|
13
|
+
// Verify first point matches expected generator
|
|
14
|
+
expect(g1Data).toEqual(BN254_G1_FIRST_ELEMENT);
|
|
15
|
+
}, 30000);
|
|
16
|
+
it('should download G2 data', async () => {
|
|
17
|
+
const crs = new NetCrs(1);
|
|
18
|
+
await crs.init();
|
|
19
|
+
const g2Data = crs.getG2Data();
|
|
20
|
+
expect(g2Data.length).toBe(128); // G2 point is 128 bytes
|
|
21
|
+
}, 30000);
|
|
22
|
+
});
|
|
23
|
+
describe('fetchWithFallback', () => {
|
|
24
|
+
it('should fallback to secondary URL when primary fails', async () => {
|
|
25
|
+
const badPrimaryUrl = 'https://nonexistent.invalid/g1.dat';
|
|
26
|
+
const goodFallbackUrl = 'https://crs.aztec-labs.com/g1.dat';
|
|
27
|
+
const options = {
|
|
28
|
+
headers: {
|
|
29
|
+
Range: 'bytes=0-63',
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
const response = await fetchWithFallback(badPrimaryUrl, goodFallbackUrl, options);
|
|
33
|
+
expect(response.ok || response.status === 206).toBe(true);
|
|
34
|
+
const data = new Uint8Array(await response.arrayBuffer());
|
|
35
|
+
expect(data.length).toBe(64);
|
|
36
|
+
expect(data).toEqual(BN254_G1_FIRST_ELEMENT);
|
|
37
|
+
}, 30000);
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0X2Nycy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Nycy9uZXRfY3JzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV6RCx1RkFBdUY7QUFDdkYsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLFVBQVUsQ0FBQztJQUM1QyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3RILENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN2RSxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzNELE1BQU0sR0FBRyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRWpCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMvQixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLHFCQUFxQjtRQUVyRCxnREFBZ0Q7UUFDaEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQUEsQ0FDaEQsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUVWLEVBQUUsQ0FBQyx5QkFBeUIsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3hDLE1BQU0sR0FBRyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRWpCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMvQixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtJQUF6QixDQUNqQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQUEsQ0FDWCxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDbEMsRUFBRSxDQUFDLHFEQUFxRCxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDcEUsTUFBTSxhQUFhLEdBQUcsb0NBQW9DLENBQUM7UUFDM0QsTUFBTSxlQUFlLEdBQUcsbUNBQW1DLENBQUM7UUFDNUQsTUFBTSxPQUFPLEdBQWdCO1lBQzNCLE9BQU8sRUFBRTtnQkFDUCxLQUFLLEVBQUUsWUFBWTthQUNwQjtTQUNGLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEYsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUMxRCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFBQSxDQUM5QyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQUEsQ0FDWCxDQUFDLENBQUMifQ==
|
|
Binary file
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fetches data from primary URL, falling back to secondary on failure
|
|
3
|
+
* @internal Exported for testing
|
|
4
|
+
*/
|
|
5
|
+
export declare function fetchWithFallback(primaryUrl: string, fallbackUrl: string, options: RequestInit): Promise<Response>;
|
|
1
6
|
/**
|
|
2
7
|
* Downloader for CRS from the web or local.
|
|
3
8
|
*/
|
|
@@ -67,4 +72,4 @@ export declare class NetGrumpkinCrs {
|
|
|
67
72
|
getG1Data(): Uint8Array;
|
|
68
73
|
private fetchG1Data;
|
|
69
74
|
}
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0X2Nycy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Nycy9uZXRfY3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BOzs7R0FHRztBQUNILHdCQUFzQixpQkFBaUIsQ0FDckMsVUFBVSxFQUFFLE1BQU0sRUFDbEIsV0FBVyxFQUFFLE1BQU0sRUFDbkIsT0FBTyxFQUFFLFdBQVcsR0FDbkIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQVVuQjtBQUVEOztHQUVHO0FBQ0gscUJBQWEsTUFBTTthQVFDLFNBQVMsRUFBRSxNQUFNO0lBUG5DLE9BQU8sQ0FBQyxJQUFJLENBQWM7SUFDMUIsT0FBTyxDQUFDLE1BQU0sQ0FBYztJQUU1QjtJQUNFOztPQUVHO0lBQ2EsU0FBUyxFQUFFLE1BQU0sRUFDL0I7SUFFSjs7T0FFRztJQUNHLElBQUksa0JBR1Q7SUFFRDs7T0FFRztJQUNHLFlBQVksSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBR3hEO0lBRUQ7O09BRUc7SUFDRyxZQUFZLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUd4RDtJQUVLLGNBQWMscUNBR25CO0lBRUQ7O09BRUc7SUFDRyxjQUFjLHFDQUduQjtJQUVEOzs7T0FHRztJQUNILFNBQVMsSUFBSSxVQUFVLENBRXRCO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyxJQUFJLFVBQVUsQ0FFdEI7WUFLYSxXQUFXO1lBc0JYLFdBQVc7Q0FTMUI7QUFFRDs7R0FFRztBQUNILHFCQUFhLGNBQWM7YUFPUCxTQUFTLEVBQUUsTUFBTTtJQU5uQyxPQUFPLENBQUMsSUFBSSxDQUFjO0lBRTFCO0lBQ0U7O09BRUc7SUFDYSxTQUFTLEVBQUUsTUFBTSxFQUMvQjtJQUVKOztPQUVHO0lBQ0csSUFBSSxrQkFFVDtJQUVLLGNBQWMscUNBR25CO0lBRUQ7O09BRUc7SUFDRyxZQUFZLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUd4RDtJQUVEOzs7T0FHRztJQUNILFNBQVMsSUFBSSxVQUFVLENBRXRCO1lBS2EsV0FBVztDQW9CMUIifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"net_crs.d.ts","sourceRoot":"","sources":["../../../src/crs/net_crs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"net_crs.d.ts","sourceRoot":"","sources":["../../../src/crs/net_crs.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,QAAQ,CAAC,CAUnB;AAED;;GAEG;AACH,qBAAa,MAAM;aAQC,SAAS,EAAE,MAAM;IAPnC,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,MAAM,CAAc;IAE5B;IACE;;OAEG;IACa,SAAS,EAAE,MAAM,EAC/B;IAEJ;;OAEG;IACG,IAAI,kBAGT;IAED;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAGxD;IAED;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAGxD;IAEK,cAAc,qCAGnB;IAED;;OAEG;IACG,cAAc,qCAGnB;IAED;;;OAGG;IACH,SAAS,IAAI,UAAU,CAEtB;IAED;;;OAGG;IACH,SAAS,IAAI,UAAU,CAEtB;YAKa,WAAW;YAsBX,WAAW;CAS1B;AAED;;GAEG;AACH,qBAAa,cAAc;aAOP,SAAS,EAAE,MAAM;IANnC,OAAO,CAAC,IAAI,CAAc;IAE1B;IACE;;OAEG;IACa,SAAS,EAAE,MAAM,EAC/B;IAEJ;;OAEG;IACG,IAAI,kBAET;IAEK,cAAc,qCAGnB;IAED;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAGxD;IAED;;;OAGG;IACH,SAAS,IAAI,UAAU,CAEtB;YAKa,WAAW;CAoB1B"}
|
|
@@ -1,7 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.NetGrumpkinCrs = exports.NetCrs = void 0;
|
|
4
|
+
exports.fetchWithFallback = fetchWithFallback;
|
|
4
5
|
const index_js_1 = require("../retry/index.js");
|
|
6
|
+
// Primary CRS host (Cloudflare R2)
|
|
7
|
+
const CRS_PRIMARY_HOST = 'https://crs.aztec-cdn.foundation';
|
|
8
|
+
// Fallback CRS host (AWS S3)
|
|
9
|
+
const CRS_FALLBACK_HOST = 'https://crs.aztec-labs.com';
|
|
10
|
+
/**
|
|
11
|
+
* Fetches data from primary URL, falling back to secondary on failure
|
|
12
|
+
* @internal Exported for testing
|
|
13
|
+
*/
|
|
14
|
+
async function fetchWithFallback(primaryUrl, fallbackUrl, options) {
|
|
15
|
+
try {
|
|
16
|
+
const response = await fetch(primaryUrl, options);
|
|
17
|
+
if (response.ok || response.status === 206) {
|
|
18
|
+
return response;
|
|
19
|
+
}
|
|
20
|
+
throw new Error(`HTTP ${response.status}`);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return await fetch(fallbackUrl, options);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
5
26
|
/**
|
|
6
27
|
* Downloader for CRS from the web or local.
|
|
7
28
|
*/
|
|
@@ -71,20 +92,22 @@ class NetCrs {
|
|
|
71
92
|
return new Response(new Uint8Array([]));
|
|
72
93
|
}
|
|
73
94
|
const g1End = this.numPoints * 64 - 1;
|
|
74
|
-
|
|
95
|
+
const options = {
|
|
75
96
|
headers: {
|
|
76
97
|
Range: `bytes=0-${g1End}`,
|
|
77
98
|
},
|
|
78
99
|
cache: 'force-cache',
|
|
79
|
-
}
|
|
100
|
+
};
|
|
101
|
+
return await (0, index_js_1.retry)(() => fetchWithFallback(`${CRS_PRIMARY_HOST}/g1.dat`, `${CRS_FALLBACK_HOST}/g1.dat`, options), (0, index_js_1.makeBackoff)([5, 5, 5]));
|
|
80
102
|
}
|
|
81
103
|
/**
|
|
82
104
|
* Fetches the appropriate range of points from a remote source
|
|
83
105
|
*/
|
|
84
106
|
async fetchG2Data() {
|
|
85
|
-
|
|
107
|
+
const options = {
|
|
86
108
|
cache: 'force-cache',
|
|
87
|
-
}
|
|
109
|
+
};
|
|
110
|
+
return await (0, index_js_1.retry)(() => fetchWithFallback(`${CRS_PRIMARY_HOST}/g2.dat`, `${CRS_FALLBACK_HOST}/g2.dat`, options), (0, index_js_1.makeBackoff)([5, 5, 5]));
|
|
88
111
|
}
|
|
89
112
|
}
|
|
90
113
|
exports.NetCrs = NetCrs;
|
|
@@ -134,13 +157,14 @@ class NetGrumpkinCrs {
|
|
|
134
157
|
return new Response(new Uint8Array([]));
|
|
135
158
|
}
|
|
136
159
|
const g1End = this.numPoints * 64 - 1;
|
|
137
|
-
|
|
160
|
+
const options = {
|
|
138
161
|
headers: {
|
|
139
162
|
Range: `bytes=0-${g1End}`,
|
|
140
163
|
},
|
|
141
164
|
cache: 'force-cache',
|
|
142
|
-
}
|
|
165
|
+
};
|
|
166
|
+
return await fetchWithFallback(`${CRS_PRIMARY_HOST}/grumpkin_g1.dat`, `${CRS_FALLBACK_HOST}/grumpkin_g1.dat`, options);
|
|
143
167
|
}
|
|
144
168
|
}
|
|
145
169
|
exports.NetGrumpkinCrs = NetGrumpkinCrs;
|
|
146
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0X2Nycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jcnMvbmV0X2Nycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsZ0RBQXVEO0FBRXZELG1DQUFtQztBQUNuQyxNQUFNLGdCQUFnQixHQUFHLGtDQUFrQyxDQUFDO0FBQzVELDZCQUE2QjtBQUM3QixNQUFNLGlCQUFpQixHQUFHLDRCQUE0QixDQUFDO0FBRXZEOzs7R0FHRztBQUNJLEtBQUssNEJBQ1YsVUFBa0IsRUFDbEIsV0FBbUIsRUFDbkIsT0FBb0IsRUFDRDtJQUNuQixJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEQsSUFBSSxRQUFRLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDM0MsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxNQUFNLEtBQUssQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDM0MsQ0FBQztBQUFBLENBQ0Y7QUFFRDs7R0FFRztBQUNIO0lBUW9CLFNBQVM7SUFQbkIsSUFBSSxDQUFjO0lBQ2xCLE1BQU0sQ0FBYztJQUU1QjtJQUNFOztPQUVHO0lBQ2EsU0FBaUIsRUFDakM7eUJBRGdCLFNBQVM7SUFDeEIsQ0FBQztJQUVKOztPQUVHO0lBQ0gsS0FBSyxDQUFDLElBQUksR0FBRztRQUNYLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQUEsQ0FDN0I7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxZQUFZLEdBQXdDO1FBQ3hELE1B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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"net_crs.test.d.ts","sourceRoot":"","sources":["../../../src/crs/net_crs.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const net_crs_js_1 = require("./net_crs.js");
|
|
4
|
+
// Expected first G1 point from BN254 CRS (generator point with x=1, y=2 in big-endian)
|
|
5
|
+
const BN254_G1_FIRST_ELEMENT = new Uint8Array([
|
|
6
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
7
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
|
|
8
|
+
]);
|
|
9
|
+
describe('NetCrs', () => {
|
|
10
|
+
it('should download CRS data from primary host', async () => {
|
|
11
|
+
const crs = new net_crs_js_1.NetCrs(1);
|
|
12
|
+
await crs.init();
|
|
13
|
+
const g1Data = crs.getG1Data();
|
|
14
|
+
expect(g1Data.length).toBe(64); // 1 point * 64 bytes
|
|
15
|
+
// Verify first point matches expected generator
|
|
16
|
+
expect(g1Data).toEqual(BN254_G1_FIRST_ELEMENT);
|
|
17
|
+
}, 30000);
|
|
18
|
+
it('should download G2 data', async () => {
|
|
19
|
+
const crs = new net_crs_js_1.NetCrs(1);
|
|
20
|
+
await crs.init();
|
|
21
|
+
const g2Data = crs.getG2Data();
|
|
22
|
+
expect(g2Data.length).toBe(128); // G2 point is 128 bytes
|
|
23
|
+
}, 30000);
|
|
24
|
+
});
|
|
25
|
+
describe('fetchWithFallback', () => {
|
|
26
|
+
it('should fallback to secondary URL when primary fails', async () => {
|
|
27
|
+
const badPrimaryUrl = 'https://nonexistent.invalid/g1.dat';
|
|
28
|
+
const goodFallbackUrl = 'https://crs.aztec-labs.com/g1.dat';
|
|
29
|
+
const options = {
|
|
30
|
+
headers: {
|
|
31
|
+
Range: 'bytes=0-63',
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
const response = await (0, net_crs_js_1.fetchWithFallback)(badPrimaryUrl, goodFallbackUrl, options);
|
|
35
|
+
expect(response.ok || response.status === 206).toBe(true);
|
|
36
|
+
const data = new Uint8Array(await response.arrayBuffer());
|
|
37
|
+
expect(data.length).toBe(64);
|
|
38
|
+
expect(data).toEqual(BN254_G1_FIRST_ELEMENT);
|
|
39
|
+
}, 30000);
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0X2Nycy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Nycy9uZXRfY3JzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2Q0FBeUQ7QUFFekQsdUZBQXVGO0FBQ3ZGLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxVQUFVLENBQUM7SUFDNUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN0SCxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDdkUsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN2QixFQUFFLENBQUMsNENBQTRDLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUMzRCxNQUFNLEdBQUcsR0FBRyxJQUFJLG1CQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFakIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMscUJBQXFCO1FBRXJELGdEQUFnRDtRQUNoRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFBQSxDQUNoRCxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRVYsRUFBRSxDQUFDLHlCQUF5QixFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDeEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxtQkFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRWpCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMvQixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtJQUF6QixDQUNqQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQUEsQ0FDWCxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDbEMsRUFBRSxDQUFDLHFEQUFxRCxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDcEUsTUFBTSxhQUFhLEdBQUcsb0NBQW9DLENBQUM7UUFDM0QsTUFBTSxlQUFlLEdBQUcsbUNBQW1DLENBQUM7UUFDNUQsTUFBTSxPQUFPLEdBQWdCO1lBQzNCLE9BQU8sRUFBRTtnQkFDUCxLQUFLLEVBQUUsWUFBWTthQUNwQjtTQUNGLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsOEJBQWlCLEVBQUMsYUFBYSxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNsRixNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUxRCxNQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzFELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUFBLENBQzlDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFBQSxDQUNYLENBQUMsQ0FBQyJ9
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/bb.js",
|
|
3
3
|
"packageManager": "yarn@4.5.2",
|
|
4
|
-
"version": "0.0.1-commit.
|
|
4
|
+
"version": "0.0.1-commit.f1df4d2",
|
|
5
5
|
"homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/barretenberg/ts",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { NetCrs, fetchWithFallback } from './net_crs.js';
|
|
2
|
+
|
|
3
|
+
// Expected first G1 point from BN254 CRS (generator point with x=1, y=2 in big-endian)
|
|
4
|
+
const BN254_G1_FIRST_ELEMENT = new Uint8Array([
|
|
5
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
6
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
|
|
7
|
+
]);
|
|
8
|
+
|
|
9
|
+
describe('NetCrs', () => {
|
|
10
|
+
it('should download CRS data from primary host', async () => {
|
|
11
|
+
const crs = new NetCrs(1);
|
|
12
|
+
await crs.init();
|
|
13
|
+
|
|
14
|
+
const g1Data = crs.getG1Data();
|
|
15
|
+
expect(g1Data.length).toBe(64); // 1 point * 64 bytes
|
|
16
|
+
|
|
17
|
+
// Verify first point matches expected generator
|
|
18
|
+
expect(g1Data).toEqual(BN254_G1_FIRST_ELEMENT);
|
|
19
|
+
}, 30000);
|
|
20
|
+
|
|
21
|
+
it('should download G2 data', async () => {
|
|
22
|
+
const crs = new NetCrs(1);
|
|
23
|
+
await crs.init();
|
|
24
|
+
|
|
25
|
+
const g2Data = crs.getG2Data();
|
|
26
|
+
expect(g2Data.length).toBe(128); // G2 point is 128 bytes
|
|
27
|
+
}, 30000);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
describe('fetchWithFallback', () => {
|
|
31
|
+
it('should fallback to secondary URL when primary fails', async () => {
|
|
32
|
+
const badPrimaryUrl = 'https://nonexistent.invalid/g1.dat';
|
|
33
|
+
const goodFallbackUrl = 'https://crs.aztec-labs.com/g1.dat';
|
|
34
|
+
const options: RequestInit = {
|
|
35
|
+
headers: {
|
|
36
|
+
Range: 'bytes=0-63',
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const response = await fetchWithFallback(badPrimaryUrl, goodFallbackUrl, options);
|
|
41
|
+
expect(response.ok || response.status === 206).toBe(true);
|
|
42
|
+
|
|
43
|
+
const data = new Uint8Array(await response.arrayBuffer());
|
|
44
|
+
expect(data.length).toBe(64);
|
|
45
|
+
expect(data).toEqual(BN254_G1_FIRST_ELEMENT);
|
|
46
|
+
}, 30000);
|
|
47
|
+
});
|
package/src/crs/net_crs.ts
CHANGED
|
@@ -1,4 +1,30 @@
|
|
|
1
1
|
import { retry, makeBackoff } from '../retry/index.js';
|
|
2
|
+
|
|
3
|
+
// Primary CRS host (Cloudflare R2)
|
|
4
|
+
const CRS_PRIMARY_HOST = 'https://crs.aztec-cdn.foundation';
|
|
5
|
+
// Fallback CRS host (AWS S3)
|
|
6
|
+
const CRS_FALLBACK_HOST = 'https://crs.aztec-labs.com';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Fetches data from primary URL, falling back to secondary on failure
|
|
10
|
+
* @internal Exported for testing
|
|
11
|
+
*/
|
|
12
|
+
export async function fetchWithFallback(
|
|
13
|
+
primaryUrl: string,
|
|
14
|
+
fallbackUrl: string,
|
|
15
|
+
options: RequestInit,
|
|
16
|
+
): Promise<Response> {
|
|
17
|
+
try {
|
|
18
|
+
const response = await fetch(primaryUrl, options);
|
|
19
|
+
if (response.ok || response.status === 206) {
|
|
20
|
+
return response;
|
|
21
|
+
}
|
|
22
|
+
throw new Error(`HTTP ${response.status}`);
|
|
23
|
+
} catch {
|
|
24
|
+
return await fetch(fallbackUrl, options);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
2
28
|
/**
|
|
3
29
|
* Downloader for CRS from the web or local.
|
|
4
30
|
*/
|
|
@@ -76,14 +102,14 @@ export class NetCrs {
|
|
|
76
102
|
}
|
|
77
103
|
|
|
78
104
|
const g1End = this.numPoints * 64 - 1;
|
|
105
|
+
const options: RequestInit = {
|
|
106
|
+
headers: {
|
|
107
|
+
Range: `bytes=0-${g1End}`,
|
|
108
|
+
},
|
|
109
|
+
cache: 'force-cache',
|
|
110
|
+
};
|
|
79
111
|
return await retry(
|
|
80
|
-
() =>
|
|
81
|
-
fetch('https://crs.aztec.network/g1.dat', {
|
|
82
|
-
headers: {
|
|
83
|
-
Range: `bytes=0-${g1End}`,
|
|
84
|
-
},
|
|
85
|
-
cache: 'force-cache',
|
|
86
|
-
}),
|
|
112
|
+
() => fetchWithFallback(`${CRS_PRIMARY_HOST}/g1.dat`, `${CRS_FALLBACK_HOST}/g1.dat`, options),
|
|
87
113
|
makeBackoff([5, 5, 5]),
|
|
88
114
|
);
|
|
89
115
|
}
|
|
@@ -92,11 +118,11 @@ export class NetCrs {
|
|
|
92
118
|
* Fetches the appropriate range of points from a remote source
|
|
93
119
|
*/
|
|
94
120
|
private async fetchG2Data(): Promise<Response> {
|
|
121
|
+
const options: RequestInit = {
|
|
122
|
+
cache: 'force-cache',
|
|
123
|
+
};
|
|
95
124
|
return await retry(
|
|
96
|
-
() =>
|
|
97
|
-
fetch('https://crs.aztec.network/g2.dat', {
|
|
98
|
-
cache: 'force-cache',
|
|
99
|
-
}),
|
|
125
|
+
() => fetchWithFallback(`${CRS_PRIMARY_HOST}/g2.dat`, `${CRS_FALLBACK_HOST}/g2.dat`, options),
|
|
100
126
|
makeBackoff([5, 5, 5]),
|
|
101
127
|
);
|
|
102
128
|
}
|
|
@@ -153,12 +179,17 @@ export class NetGrumpkinCrs {
|
|
|
153
179
|
}
|
|
154
180
|
|
|
155
181
|
const g1End = this.numPoints * 64 - 1;
|
|
156
|
-
|
|
157
|
-
return await fetch('https://crs.aztec.network/grumpkin_g1.dat', {
|
|
182
|
+
const options: RequestInit = {
|
|
158
183
|
headers: {
|
|
159
184
|
Range: `bytes=0-${g1End}`,
|
|
160
185
|
},
|
|
161
186
|
cache: 'force-cache',
|
|
162
|
-
}
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
return await fetchWithFallback(
|
|
190
|
+
`${CRS_PRIMARY_HOST}/grumpkin_g1.dat`,
|
|
191
|
+
`${CRS_FALLBACK_HOST}/grumpkin_g1.dat`,
|
|
192
|
+
options,
|
|
193
|
+
);
|
|
163
194
|
}
|
|
164
195
|
}
|