@aztec/sequencer-client 5.0.0-nightly.20260704 → 5.0.0-nightly.20260705
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/dest/global_variable_builder/fee_predictor.d.ts +1 -1
- package/dest/global_variable_builder/fee_predictor.d.ts.map +1 -1
- package/dest/global_variable_builder/fee_predictor.js +11 -1
- package/dest/global_variable_builder/fee_provider.d.ts +1 -1
- package/dest/global_variable_builder/fee_provider.d.ts.map +1 -1
- package/dest/global_variable_builder/fee_provider.js +15 -2
- package/package.json +27 -27
- package/src/global_variable_builder/fee_predictor.ts +11 -1
- package/src/global_variable_builder/fee_provider.ts +19 -2
|
@@ -34,4 +34,4 @@ export declare class FeePredictor {
|
|
|
34
34
|
private getAssumedManaUsed;
|
|
35
35
|
private computeGasFees;
|
|
36
36
|
}
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlX3ByZWRpY3Rvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dsb2JhbF92YXJpYWJsZV9idWlsZGVyL2ZlZV9wcmVkaWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvRCxLQUFLLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR2xILE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTVELE9BQU8sRUFFTCxPQUFPLEVBRVAsaUJBQWlCLEVBR2xCLE1BQU0sbUJBQW1CLENBQUM7QUFlM0I7Ozs7O0dBS0c7QUFDSCxxQkFBYSxZQUFZO0lBU3JCLE9BQU8sQ0FBQyxRQUFRLENBQUMsY0FBYztJQUMvQixPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVk7SUFDN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZO0lBVi9CLE9BQU8sQ0FBQyxXQUFXLENBQXNDO0lBQ3pELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBcUI7SUFFaEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQVM7SUFDdEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQVM7SUFDdkMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBUztJQUU5QyxZQUNtQixjQUFjLEVBQUUsY0FBYyxFQUM5QixZQUFZLEVBQUU7UUFBRSxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUFFLFNBQVMsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtTQUFFLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0tBQUUsRUFDcEYsWUFBWSxFQUFFLFlBQVksRUFDM0MsTUFBTSxFQUFFO1FBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQztRQUFDLGFBQWEsRUFBRSxNQUFNLENBQUM7UUFBQyxvQkFBb0IsRUFBRSxNQUFNLENBQUE7S0FBRSxFQUt0RjtJQUVELHlFQUF5RTtJQUNuRSxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBRzFFO1lBR2EsUUFBUTtZQW1CUixVQUFVO0lBaUR4Qix3RkFBd0Y7SUFDeEYsT0FBTyxDQUFDLGtCQUFrQjtJQXVCMUIsT0FBTyxDQUFDLGtCQUFrQjtJQVcxQixPQUFPLENBQUMsY0FBYztDQW1CdkIifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fee_predictor.d.ts","sourceRoot":"","sources":["../../src/global_variable_builder/fee_predictor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoD,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGlH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAEL,OAAO,EAEP,iBAAiB,EAGlB,MAAM,mBAAmB,CAAC;AAe3B;;;;;GAKG;AACH,qBAAa,YAAY;IASrB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAV/B,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,mBAAmB,CAAqB;IAEhD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAE9C,YACmB,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE;QAAE,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE;YAAE,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;KAAE,EACpF,YAAY,EAAE,YAAY,EAC3C,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAA;KAAE,EAKtF;IAED,yEAAyE;IACnE,mBAAmB,CAAC,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAG1E;YAGa,QAAQ;
|
|
1
|
+
{"version":3,"file":"fee_predictor.d.ts","sourceRoot":"","sources":["../../src/global_variable_builder/fee_predictor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoD,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGlH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAEL,OAAO,EAEP,iBAAiB,EAGlB,MAAM,mBAAmB,CAAC;AAe3B;;;;;GAKG;AACH,qBAAa,YAAY;IASrB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAV/B,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,mBAAmB,CAAqB;IAEhD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAE9C,YACmB,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE;QAAE,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE;YAAE,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;KAAE,EACpF,YAAY,EAAE,YAAY,EAC3C,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAA;KAAE,EAKtF;IAED,yEAAyE;IACnE,mBAAmB,CAAC,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAG1E;YAGa,QAAQ;YAmBR,UAAU;IAiDxB,wFAAwF;IACxF,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,cAAc;CAmBvB"}
|
|
@@ -35,7 +35,17 @@ import { FEE_ORACLE_LAG, GasFees, MIN_ETH_PER_FEE_ASSET, ManaUsageEstimate, comp
|
|
|
35
35
|
});
|
|
36
36
|
if (this.cachedL1BlockNumber === undefined || blockNumber > this.cachedL1BlockNumber) {
|
|
37
37
|
this.cachedL1BlockNumber = blockNumber;
|
|
38
|
-
|
|
38
|
+
// Reset the cached block number on failure so a transient L1 RPC error does not leave a
|
|
39
|
+
// rejected promise cached for this block, which would replay the same rejection on every
|
|
40
|
+
// subsequent call until the next L1 block arrives. Only clear it if it still points at the
|
|
41
|
+
// block this attempt was for, so a stale rejection from an older block cannot wipe a marker
|
|
42
|
+
// a newer call already advanced (which would also defeat the monotonic block-number guard).
|
|
43
|
+
this.cachedState = this.fetchState(blockNumber).catch((err)=>{
|
|
44
|
+
if (this.cachedL1BlockNumber === blockNumber) {
|
|
45
|
+
this.cachedL1BlockNumber = undefined;
|
|
46
|
+
}
|
|
47
|
+
throw err;
|
|
48
|
+
});
|
|
39
49
|
}
|
|
40
50
|
return this.cachedState;
|
|
41
51
|
}
|
|
@@ -18,4 +18,4 @@ export declare class FeeProviderImpl implements FeeProvider {
|
|
|
18
18
|
getCurrentMinFees(): Promise<GasFees>;
|
|
19
19
|
getPredictedMinFees(manaUsage?: ManaUsageEstimate): Promise<GasFees[]>;
|
|
20
20
|
}
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlX3Byb3ZpZGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2xvYmFsX3ZhcmlhYmxlX2J1aWxkZXIvZmVlX3Byb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFOUQsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR3BELE9BQU8sS0FBSyxFQUFFLDJCQUEyQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkUsOEVBQThFO0FBQzlFLHFCQUFhLGVBQWdCLFlBQVcsV0FBVztJQVUvQyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVk7SUFDN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZO0lBVi9CLE9BQU8sQ0FBQyxjQUFjLENBQXdEO0lBQzlFLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBaUM7SUFFN0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQWlCO0lBQ2hELE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFlO0lBQzVDLE9BQU8sQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQVM7SUFDOUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQVM7SUFFdkMsWUFDbUIsWUFBWSxFQUFFLFlBQVksRUFDMUIsWUFBWSxFQUFFLGdCQUFnQixFQUMvQyxNQUFNLEVBQUUsMkJBQTJCLEVBV3BDO1lBTWEscUJBQXFCO0lBa0J0QixpQkFBaUIsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBMkJqRDtJQUVZLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxFQUFFLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQU9sRjtDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fee_provider.d.ts","sourceRoot":"","sources":["../../src/global_variable_builder/fee_provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAEvE,8EAA8E;AAC9E,qBAAa,eAAgB,YAAW,WAAW;IAU/C,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAV/B,OAAO,CAAC,cAAc,CAAwD;IAC9E,OAAO,CAAC,oBAAoB,CAAiC;IAE7D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC,YACmB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,gBAAgB,EAC/C,MAAM,EAAE,2BAA2B,EAWpC;YAMa,qBAAqB;IAkBtB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"fee_provider.d.ts","sourceRoot":"","sources":["../../src/global_variable_builder/fee_provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAEvE,8EAA8E;AAC9E,qBAAa,eAAgB,YAAW,WAAW;IAU/C,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAV/B,OAAO,CAAC,cAAc,CAAwD;IAC9E,OAAO,CAAC,oBAAoB,CAAiC;IAE7D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC,YACmB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,gBAAgB,EAC/C,MAAM,EAAE,2BAA2B,EAWpC;YAMa,qBAAqB;IAkBtB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CA2BjD;IAEY,mBAAmB,CAAC,SAAS,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAOlF;CACF"}
|
|
@@ -47,10 +47,23 @@ import { FeePredictor } from './fee_predictor.js';
|
|
|
47
47
|
const blockNumber = await this.publicClient.getBlockNumber({
|
|
48
48
|
cacheTime: 0
|
|
49
49
|
});
|
|
50
|
-
// If the L1 block number has changed then chain a new promise to get the current min fees
|
|
50
|
+
// If the L1 block number has changed then chain a new promise to get the current min fees.
|
|
51
|
+
// We chain off the previous promise's settlement (via a swallowing catch) rather than its
|
|
52
|
+
// fulfillment, so a prior rejection does not short-circuit the new computation. If the new
|
|
53
|
+
// computation fails (e.g. a transient L1 RPC error), reset the cached block number so the
|
|
54
|
+
// next call recomputes instead of permanently replaying the rejected promise — otherwise a
|
|
55
|
+
// single transient failure would wedge fee estimation until the next L1 block arrives. Only
|
|
56
|
+
// clear it if it still points at the block this attempt was for, so a stale rejection from an
|
|
57
|
+
// older block cannot wipe a marker a newer call already advanced (which would also defeat the
|
|
58
|
+
// monotonic block-number guard).
|
|
51
59
|
if (this.currentL1BlockNumber === undefined || blockNumber > this.currentL1BlockNumber) {
|
|
52
60
|
this.currentL1BlockNumber = blockNumber;
|
|
53
|
-
this.currentMinFees = this.currentMinFees.then(()=>this.computeCurrentMinFees())
|
|
61
|
+
this.currentMinFees = this.currentMinFees.catch(()=>undefined).then(()=>this.computeCurrentMinFees().catch((err)=>{
|
|
62
|
+
if (this.currentL1BlockNumber === blockNumber) {
|
|
63
|
+
this.currentL1BlockNumber = undefined;
|
|
64
|
+
}
|
|
65
|
+
throw err;
|
|
66
|
+
}));
|
|
54
67
|
}
|
|
55
68
|
return this.currentMinFees;
|
|
56
69
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/sequencer-client",
|
|
3
|
-
"version": "5.0.0-nightly.
|
|
3
|
+
"version": "5.0.0-nightly.20260705",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -27,37 +27,37 @@
|
|
|
27
27
|
"test:integration:run": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --no-cache --config jest.integration.config.json"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@aztec/aztec.js": "5.0.0-nightly.
|
|
31
|
-
"@aztec/bb-prover": "5.0.0-nightly.
|
|
32
|
-
"@aztec/blob-client": "5.0.0-nightly.
|
|
33
|
-
"@aztec/blob-lib": "5.0.0-nightly.
|
|
34
|
-
"@aztec/constants": "5.0.0-nightly.
|
|
35
|
-
"@aztec/epoch-cache": "5.0.0-nightly.
|
|
36
|
-
"@aztec/ethereum": "5.0.0-nightly.
|
|
37
|
-
"@aztec/foundation": "5.0.0-nightly.
|
|
38
|
-
"@aztec/l1-artifacts": "5.0.0-nightly.
|
|
39
|
-
"@aztec/node-keystore": "5.0.0-nightly.
|
|
40
|
-
"@aztec/noir-acvm_js": "5.0.0-nightly.
|
|
41
|
-
"@aztec/noir-contracts.js": "5.0.0-nightly.
|
|
42
|
-
"@aztec/noir-protocol-circuits-types": "5.0.0-nightly.
|
|
43
|
-
"@aztec/noir-types": "5.0.0-nightly.
|
|
44
|
-
"@aztec/p2p": "5.0.0-nightly.
|
|
45
|
-
"@aztec/protocol-contracts": "5.0.0-nightly.
|
|
46
|
-
"@aztec/prover-client": "5.0.0-nightly.
|
|
47
|
-
"@aztec/simulator": "5.0.0-nightly.
|
|
48
|
-
"@aztec/slasher": "5.0.0-nightly.
|
|
49
|
-
"@aztec/stdlib": "5.0.0-nightly.
|
|
50
|
-
"@aztec/telemetry-client": "5.0.0-nightly.
|
|
51
|
-
"@aztec/validator-client": "5.0.0-nightly.
|
|
52
|
-
"@aztec/validator-ha-signer": "5.0.0-nightly.
|
|
53
|
-
"@aztec/world-state": "5.0.0-nightly.
|
|
30
|
+
"@aztec/aztec.js": "5.0.0-nightly.20260705",
|
|
31
|
+
"@aztec/bb-prover": "5.0.0-nightly.20260705",
|
|
32
|
+
"@aztec/blob-client": "5.0.0-nightly.20260705",
|
|
33
|
+
"@aztec/blob-lib": "5.0.0-nightly.20260705",
|
|
34
|
+
"@aztec/constants": "5.0.0-nightly.20260705",
|
|
35
|
+
"@aztec/epoch-cache": "5.0.0-nightly.20260705",
|
|
36
|
+
"@aztec/ethereum": "5.0.0-nightly.20260705",
|
|
37
|
+
"@aztec/foundation": "5.0.0-nightly.20260705",
|
|
38
|
+
"@aztec/l1-artifacts": "5.0.0-nightly.20260705",
|
|
39
|
+
"@aztec/node-keystore": "5.0.0-nightly.20260705",
|
|
40
|
+
"@aztec/noir-acvm_js": "5.0.0-nightly.20260705",
|
|
41
|
+
"@aztec/noir-contracts.js": "5.0.0-nightly.20260705",
|
|
42
|
+
"@aztec/noir-protocol-circuits-types": "5.0.0-nightly.20260705",
|
|
43
|
+
"@aztec/noir-types": "5.0.0-nightly.20260705",
|
|
44
|
+
"@aztec/p2p": "5.0.0-nightly.20260705",
|
|
45
|
+
"@aztec/protocol-contracts": "5.0.0-nightly.20260705",
|
|
46
|
+
"@aztec/prover-client": "5.0.0-nightly.20260705",
|
|
47
|
+
"@aztec/simulator": "5.0.0-nightly.20260705",
|
|
48
|
+
"@aztec/slasher": "5.0.0-nightly.20260705",
|
|
49
|
+
"@aztec/stdlib": "5.0.0-nightly.20260705",
|
|
50
|
+
"@aztec/telemetry-client": "5.0.0-nightly.20260705",
|
|
51
|
+
"@aztec/validator-client": "5.0.0-nightly.20260705",
|
|
52
|
+
"@aztec/validator-ha-signer": "5.0.0-nightly.20260705",
|
|
53
|
+
"@aztec/world-state": "5.0.0-nightly.20260705",
|
|
54
54
|
"lodash.chunk": "^4.2.0",
|
|
55
55
|
"tslib": "^2.4.0",
|
|
56
56
|
"viem": "npm:@aztec/viem@2.38.2"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
|
-
"@aztec/archiver": "5.0.0-nightly.
|
|
60
|
-
"@aztec/kv-store": "5.0.0-nightly.
|
|
59
|
+
"@aztec/archiver": "5.0.0-nightly.20260705",
|
|
60
|
+
"@aztec/kv-store": "5.0.0-nightly.20260705",
|
|
61
61
|
"@electric-sql/pglite": "^0.3.14",
|
|
62
62
|
"@jest/globals": "^30.0.0",
|
|
63
63
|
"@types/jest": "^30.0.0",
|
|
@@ -61,7 +61,17 @@ export class FeePredictor {
|
|
|
61
61
|
const blockNumber = await this.publicClient.getBlockNumber({ cacheTime: 0 });
|
|
62
62
|
if (this.cachedL1BlockNumber === undefined || blockNumber > this.cachedL1BlockNumber) {
|
|
63
63
|
this.cachedL1BlockNumber = blockNumber;
|
|
64
|
-
|
|
64
|
+
// Reset the cached block number on failure so a transient L1 RPC error does not leave a
|
|
65
|
+
// rejected promise cached for this block, which would replay the same rejection on every
|
|
66
|
+
// subsequent call until the next L1 block arrives. Only clear it if it still points at the
|
|
67
|
+
// block this attempt was for, so a stale rejection from an older block cannot wipe a marker
|
|
68
|
+
// a newer call already advanced (which would also defeat the monotonic block-number guard).
|
|
69
|
+
this.cachedState = this.fetchState(blockNumber).catch(err => {
|
|
70
|
+
if (this.cachedL1BlockNumber === blockNumber) {
|
|
71
|
+
this.cachedL1BlockNumber = undefined;
|
|
72
|
+
}
|
|
73
|
+
throw err;
|
|
74
|
+
});
|
|
65
75
|
}
|
|
66
76
|
return this.cachedState!;
|
|
67
77
|
}
|
|
@@ -61,10 +61,27 @@ export class FeeProviderImpl implements FeeProvider {
|
|
|
61
61
|
// Get the current block number
|
|
62
62
|
const blockNumber = await this.publicClient.getBlockNumber({ cacheTime: 0 });
|
|
63
63
|
|
|
64
|
-
// If the L1 block number has changed then chain a new promise to get the current min fees
|
|
64
|
+
// If the L1 block number has changed then chain a new promise to get the current min fees.
|
|
65
|
+
// We chain off the previous promise's settlement (via a swallowing catch) rather than its
|
|
66
|
+
// fulfillment, so a prior rejection does not short-circuit the new computation. If the new
|
|
67
|
+
// computation fails (e.g. a transient L1 RPC error), reset the cached block number so the
|
|
68
|
+
// next call recomputes instead of permanently replaying the rejected promise — otherwise a
|
|
69
|
+
// single transient failure would wedge fee estimation until the next L1 block arrives. Only
|
|
70
|
+
// clear it if it still points at the block this attempt was for, so a stale rejection from an
|
|
71
|
+
// older block cannot wipe a marker a newer call already advanced (which would also defeat the
|
|
72
|
+
// monotonic block-number guard).
|
|
65
73
|
if (this.currentL1BlockNumber === undefined || blockNumber > this.currentL1BlockNumber) {
|
|
66
74
|
this.currentL1BlockNumber = blockNumber;
|
|
67
|
-
this.currentMinFees = this.currentMinFees
|
|
75
|
+
this.currentMinFees = this.currentMinFees
|
|
76
|
+
.catch(() => undefined)
|
|
77
|
+
.then(() =>
|
|
78
|
+
this.computeCurrentMinFees().catch(err => {
|
|
79
|
+
if (this.currentL1BlockNumber === blockNumber) {
|
|
80
|
+
this.currentL1BlockNumber = undefined;
|
|
81
|
+
}
|
|
82
|
+
throw err;
|
|
83
|
+
}),
|
|
84
|
+
);
|
|
68
85
|
}
|
|
69
86
|
return this.currentMinFees;
|
|
70
87
|
}
|