@aztec/sequencer-client 0.65.2 → 0.67.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/dest/client/sequencer-client.d.ts.map +1 -1
- package/dest/client/sequencer-client.js +3 -2
- package/dest/config.js +3 -3
- package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
- package/dest/global_variable_builder/global_builder.js +3 -4
- package/dest/publisher/config.d.ts +4 -4
- package/dest/publisher/config.d.ts.map +1 -1
- package/dest/publisher/config.js +3 -2
- package/dest/publisher/l1-publisher-metrics.d.ts.map +1 -1
- package/dest/publisher/l1-publisher-metrics.js +2 -8
- package/dest/publisher/l1-publisher.d.ts +7 -4
- package/dest/publisher/l1-publisher.d.ts.map +1 -1
- package/dest/publisher/l1-publisher.js +67 -50
- package/dest/publisher/utils.d.ts.map +1 -1
- package/dest/publisher/utils.js +2 -1
- package/dest/sequencer/metrics.d.ts.map +1 -1
- package/dest/sequencer/metrics.js +2 -8
- package/dest/sequencer/sequencer.d.ts +13 -4
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +124 -73
- package/dest/sequencer/utils.js +2 -2
- package/dest/tx_validator/gas_validator.js +3 -3
- package/dest/tx_validator/phases_validator.js +3 -3
- package/package.json +23 -19
- package/src/client/sequencer-client.ts +2 -2
- package/src/config.ts +2 -2
- package/src/global_variable_builder/global_builder.ts +3 -3
- package/src/publisher/config.ts +7 -4
- package/src/publisher/l1-publisher-metrics.ts +1 -7
- package/src/publisher/l1-publisher.ts +98 -64
- package/src/publisher/utils.ts +1 -0
- package/src/sequencer/metrics.ts +0 -7
- package/src/sequencer/sequencer.ts +152 -123
- package/src/sequencer/utils.ts +1 -1
- package/src/tx_validator/gas_validator.ts +2 -2
- package/src/tx_validator/phases_validator.ts +2 -2
- package/dest/block_builder/index.d.ts +0 -7
- package/dest/block_builder/index.d.ts.map +0 -1
- package/dest/block_builder/index.js +0 -3
- package/dest/block_builder/light.d.ts +0 -26
- package/dest/block_builder/light.d.ts.map +0 -1
- package/dest/block_builder/light.js +0 -58
- package/dest/block_builder/orchestrator.d.ts +0 -23
- package/dest/block_builder/orchestrator.d.ts.map +0 -1
- package/dest/block_builder/orchestrator.js +0 -33
- package/src/block_builder/index.ts +0 -7
- package/src/block_builder/light.ts +0 -92
- package/src/block_builder/orchestrator.ts +0 -43
package/dest/sequencer/utils.js
CHANGED
|
@@ -66,6 +66,6 @@ export function orderAttestations(attestations, orderAddresses) {
|
|
|
66
66
|
}
|
|
67
67
|
export function getSecondsIntoSlot(l1GenesisTime, aztecSlotDuration, slotNumber) {
|
|
68
68
|
const slotStartTimestamp = l1GenesisTime + slotNumber * aztecSlotDuration;
|
|
69
|
-
return Date.now() / 1000 - slotStartTimestamp;
|
|
69
|
+
return Number((Date.now() / 1000 - slotStartTimestamp).toFixed(3));
|
|
70
70
|
}
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VyL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU1RCxNQUFNLENBQU4sSUFBWSxjQXFDWDtBQXJDRCxXQUFZLGNBQWM7SUFDeEI7O09BRUc7SUFDSCxxQ0FBbUIsQ0FBQTtJQUNuQjs7T0FFRztJQUNILCtCQUFhLENBQUE7SUFDYjs7T0FFRztJQUNILGlEQUErQixDQUFBO0lBQy9COztPQUVHO0lBQ0gsbURBQWlDLENBQUE7SUFDakM7O09BRUc7SUFDSCxxREFBbUMsQ0FBQTtJQUNuQzs7T0FFRztJQUNILG1EQUFpQyxDQUFBO0lBQ2pDOztPQUVHO0lBQ0gseUVBQXVELENBQUE7SUFDdkQ7O09BRUc7SUFDSCx1RUFBcUQsQ0FBQTtJQUNyRDs7T0FFRztJQUNILHVEQUFxQyxDQUFBO0FBQ3ZDLENBQUMsRUFyQ1csY0FBYyxLQUFkLGNBQWMsUUFxQ3pCO0FBSUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLEtBQXFCO0lBQzFELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxZQUFnQyxFQUFFLGNBQTRCO0lBQzlGLHdEQUF3RDtJQUN4RCxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBNEIsQ0FBQztJQUUzRCxLQUFLLE1BQU0sV0FBVyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN2QyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDckQsQ0FBQztJQUNILENBQUM7SUFFRCx1RkFBdUY7SUFDdkYsTUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3ZELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QyxPQUFPLGNBQWMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsU0FBUyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzRSxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sbUJBQW1CLENBQUM7QUFDN0IsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxhQUFxQixFQUFFLGlCQUF5QixFQUFFLFVBQWtCO0lBQ3JHLE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxHQUFHLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQztJQUMxRSxPQUFPLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyRSxDQUFDIn0=
|
|
@@ -2,13 +2,13 @@ var _GasTxValidator_instances, _GasTxValidator_log, _GasTxValidator_publicDataSo
|
|
|
2
2
|
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
3
|
import { TxExecutionPhase } from '@aztec/circuit-types';
|
|
4
4
|
import { FunctionSelector } from '@aztec/circuits.js';
|
|
5
|
-
import {
|
|
5
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
6
6
|
import { computeFeePayerBalanceStorageSlot, getExecutionRequestsByPhase } from '@aztec/simulator';
|
|
7
7
|
export class GasTxValidator {
|
|
8
8
|
constructor(publicDataSource, feeJuiceAddress, enforceFees) {
|
|
9
9
|
_GasTxValidator_instances.add(this);
|
|
10
10
|
this.enforceFees = enforceFees;
|
|
11
|
-
_GasTxValidator_log.set(this,
|
|
11
|
+
_GasTxValidator_log.set(this, createLogger('sequencer:tx_validator:tx_gas'));
|
|
12
12
|
_GasTxValidator_publicDataSource.set(this, void 0);
|
|
13
13
|
_GasTxValidator_feeJuiceAddress.set(this, void 0);
|
|
14
14
|
__classPrivateFieldSet(this, _GasTxValidator_publicDataSource, publicDataSource, "f");
|
|
@@ -66,4 +66,4 @@ _GasTxValidator_log = new WeakMap(), _GasTxValidator_publicDataSource = new Weak
|
|
|
66
66
|
}
|
|
67
67
|
return true;
|
|
68
68
|
};
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FzX3ZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eF92YWxpZGF0b3IvZ2FzX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBVyxnQkFBZ0IsRUFBb0IsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRixPQUFPLEVBQThCLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBT2xHLE1BQU0sT0FBTyxjQUFjO0lBS3pCLFlBQVksZ0JBQW1DLEVBQUUsZUFBNkIsRUFBUyxXQUFvQjs7UUFBcEIsZ0JBQVcsR0FBWCxXQUFXLENBQVM7UUFKM0csOEJBQU8sWUFBWSxDQUFDLCtCQUErQixDQUFDLEVBQUM7UUFDckQsbURBQXFDO1FBQ3JDLGtEQUErQjtRQUc3Qix1QkFBQSxJQUFJLG9DQUFxQixnQkFBZ0IsTUFBQSxDQUFDO1FBQzFDLHVCQUFBLElBQUksbUNBQW9CLGVBQWUsTUFBQSxDQUFDO0lBQzFDLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQVM7UUFDekIsTUFBTSxRQUFRLEdBQVMsRUFBRSxDQUFDO1FBQzFCLE1BQU0sVUFBVSxHQUFTLEVBQUUsQ0FBQztRQUU1QixLQUFLLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksTUFBTSx1QkFBQSxJQUFJLGdFQUFlLE1BQW5CLElBQUksRUFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDbEMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQztR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
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
var _PhasesTxValidator_log;
|
|
2
2
|
import { __classPrivateFieldGet } from "tslib";
|
|
3
3
|
import { Tx, TxExecutionPhase, } from '@aztec/circuit-types';
|
|
4
|
-
import {
|
|
4
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
5
5
|
import { ContractsDataSourcePublicDB, getExecutionRequestsByPhase } from '@aztec/simulator';
|
|
6
6
|
export class PhasesTxValidator {
|
|
7
7
|
constructor(contracts, setupAllowList) {
|
|
8
8
|
this.setupAllowList = setupAllowList;
|
|
9
|
-
_PhasesTxValidator_log.set(this,
|
|
9
|
+
_PhasesTxValidator_log.set(this, createLogger('sequencer:tx_validator:tx_phases'));
|
|
10
10
|
this.contractDataSource = new ContractsDataSourcePublicDB(contracts);
|
|
11
11
|
}
|
|
12
12
|
async validateTxs(txs) {
|
|
@@ -78,4 +78,4 @@ export class PhasesTxValidator {
|
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
_PhasesTxValidator_log = new WeakMap();
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2VzX3ZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eF92YWxpZGF0b3IvcGhhc2VzX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFHTCxFQUFFLEVBQ0YsZ0JBQWdCLEdBRWpCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTVGLE1BQU0sT0FBTyxpQkFBaUI7SUFJNUIsWUFBWSxTQUE2QixFQUFVLGNBQWdDO1FBQWhDLG1CQUFjLEdBQWQsY0FBYyxDQUFrQjtRQUhuRixpQ0FBTyxZQUFZLENBQUMsa0NBQWtDLENBQUMsRUFBQztRQUl0RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSwyQkFBMkIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFTO1FBQ3pCLE1BQU0sUUFBUSxHQUFTLEVBQUUsQ0FBQztRQUMxQixNQUFNLFVBQVUsR0FBUyxFQUFFLENBQUM7UUFFNUIsS0FBSyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNyQix3RkFBd0Y7WUFDeEYsbUdBQW1HO1lBQ25HLCtEQUErRDtZQUMvRCxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFbEQsSUFBSSxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QixDQUFDO1lBRUQsTUFBTSxJQUFJ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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/sequencer-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.67.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": "./dest/index.js",
|
|
6
6
|
"typedocOptions": {
|
|
@@ -24,24 +24,24 @@
|
|
|
24
24
|
"test:integration:run": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --no-cache --config jest.integration.config.json"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@aztec/aztec.js": "0.
|
|
28
|
-
"@aztec/bb-prover": "0.
|
|
29
|
-
"@aztec/circuit-types": "0.
|
|
30
|
-
"@aztec/circuits.js": "0.
|
|
31
|
-
"@aztec/ethereum": "0.
|
|
32
|
-
"@aztec/foundation": "0.
|
|
33
|
-
"@aztec/l1-artifacts": "0.
|
|
34
|
-
"@aztec/merkle-tree": "0.
|
|
35
|
-
"@aztec/noir-contracts.js": "0.
|
|
36
|
-
"@aztec/noir-protocol-circuits-types": "0.
|
|
37
|
-
"@aztec/p2p": "0.
|
|
38
|
-
"@aztec/protocol-contracts": "0.
|
|
39
|
-
"@aztec/prover-client": "0.
|
|
40
|
-
"@aztec/simulator": "0.
|
|
41
|
-
"@aztec/telemetry-client": "0.
|
|
42
|
-
"@aztec/types": "0.
|
|
43
|
-
"@aztec/validator-client": "0.
|
|
44
|
-
"@aztec/world-state": "0.
|
|
27
|
+
"@aztec/aztec.js": "0.67.0",
|
|
28
|
+
"@aztec/bb-prover": "0.67.0",
|
|
29
|
+
"@aztec/circuit-types": "0.67.0",
|
|
30
|
+
"@aztec/circuits.js": "0.67.0",
|
|
31
|
+
"@aztec/ethereum": "0.67.0",
|
|
32
|
+
"@aztec/foundation": "0.67.0",
|
|
33
|
+
"@aztec/l1-artifacts": "0.67.0",
|
|
34
|
+
"@aztec/merkle-tree": "0.67.0",
|
|
35
|
+
"@aztec/noir-contracts.js": "0.67.0",
|
|
36
|
+
"@aztec/noir-protocol-circuits-types": "0.67.0",
|
|
37
|
+
"@aztec/p2p": "0.67.0",
|
|
38
|
+
"@aztec/protocol-contracts": "0.67.0",
|
|
39
|
+
"@aztec/prover-client": "0.67.0",
|
|
40
|
+
"@aztec/simulator": "0.67.0",
|
|
41
|
+
"@aztec/telemetry-client": "0.67.0",
|
|
42
|
+
"@aztec/types": "0.67.0",
|
|
43
|
+
"@aztec/validator-client": "0.67.0",
|
|
44
|
+
"@aztec/world-state": "0.67.0",
|
|
45
45
|
"@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
|
|
46
46
|
"@noir-lang/types": "portal:../../noir/packages/types",
|
|
47
47
|
"lodash.chunk": "^4.2.0",
|
|
@@ -109,6 +109,10 @@
|
|
|
109
109
|
"summaryThreshold": 9999
|
|
110
110
|
}
|
|
111
111
|
]
|
|
112
|
+
],
|
|
113
|
+
"testTimeout": 30000,
|
|
114
|
+
"setupFiles": [
|
|
115
|
+
"../../foundation/src/jest/setup.mjs"
|
|
112
116
|
]
|
|
113
117
|
}
|
|
114
118
|
}
|
|
@@ -2,11 +2,11 @@ import { type L1ToL2MessageSource, type L2BlockSource, type WorldStateSynchroniz
|
|
|
2
2
|
import { type ContractDataSource } from '@aztec/circuits.js';
|
|
3
3
|
import { type EthAddress } from '@aztec/foundation/eth-address';
|
|
4
4
|
import { type P2P } from '@aztec/p2p';
|
|
5
|
+
import { LightweightBlockBuilderFactory } from '@aztec/prover-client/block-builder';
|
|
5
6
|
import { PublicProcessorFactory } from '@aztec/simulator';
|
|
6
7
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
7
8
|
import { type ValidatorClient } from '@aztec/validator-client';
|
|
8
9
|
|
|
9
|
-
import { LightweightBlockBuilderFactory } from '../block_builder/index.js';
|
|
10
10
|
import { type SequencerClientConfig } from '../config.js';
|
|
11
11
|
import { GlobalVariableBuilder } from '../global_variable_builder/index.js';
|
|
12
12
|
import { L1Publisher } from '../publisher/index.js';
|
|
@@ -81,7 +81,7 @@ export class SequencerClient {
|
|
|
81
81
|
telemetryClient,
|
|
82
82
|
config,
|
|
83
83
|
);
|
|
84
|
-
|
|
84
|
+
await validatorClient?.start();
|
|
85
85
|
await sequencer.start();
|
|
86
86
|
return new SequencerClient(sequencer);
|
|
87
87
|
}
|
package/src/config.ts
CHANGED
|
@@ -189,12 +189,12 @@ export function parseSequencerAllowList(value: string): AllowedElement[] {
|
|
|
189
189
|
} else if (typeString === 'C') {
|
|
190
190
|
if (selector) {
|
|
191
191
|
entries.push({
|
|
192
|
-
classId: Fr.
|
|
192
|
+
classId: Fr.fromHexString(identifierString),
|
|
193
193
|
selector,
|
|
194
194
|
});
|
|
195
195
|
} else {
|
|
196
196
|
entries.push({
|
|
197
|
-
classId: Fr.
|
|
197
|
+
classId: Fr.fromHexString(identifierString),
|
|
198
198
|
});
|
|
199
199
|
}
|
|
200
200
|
}
|
|
@@ -2,7 +2,7 @@ import { type GlobalVariableBuilder as GlobalVariableBuilderInterface } from '@a
|
|
|
2
2
|
import { type AztecAddress, type EthAddress, GasFees, GlobalVariables } from '@aztec/circuits.js';
|
|
3
3
|
import { type L1ContractsConfig, type L1ReaderConfig, createEthereumChain } from '@aztec/ethereum';
|
|
4
4
|
import { Fr } from '@aztec/foundation/fields';
|
|
5
|
-
import {
|
|
5
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
6
6
|
import { RollupAbi } from '@aztec/l1-artifacts';
|
|
7
7
|
|
|
8
8
|
import {
|
|
@@ -20,7 +20,7 @@ import type * as chains from 'viem/chains';
|
|
|
20
20
|
* Simple global variables builder.
|
|
21
21
|
*/
|
|
22
22
|
export class GlobalVariableBuilder implements GlobalVariableBuilderInterface {
|
|
23
|
-
private log =
|
|
23
|
+
private log = createLogger('sequencer:global_variable_builder');
|
|
24
24
|
|
|
25
25
|
private rollupContract: GetContractReturnType<typeof RollupAbi, PublicClient<HttpTransport, chains.Chain>>;
|
|
26
26
|
private publicClient: PublicClient<HttpTransport, chains.Chain>;
|
|
@@ -103,7 +103,7 @@ export class GlobalVariableBuilder implements GlobalVariableBuilderInterface {
|
|
|
103
103
|
feeRecipient,
|
|
104
104
|
gasFees,
|
|
105
105
|
);
|
|
106
|
-
|
|
106
|
+
|
|
107
107
|
return globalVariables;
|
|
108
108
|
}
|
|
109
109
|
}
|
package/src/publisher/config.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type L1ReaderConfig, NULL_KEY } from '@aztec/ethereum';
|
|
1
|
+
import { type L1ReaderConfig, type L1TxUtilsConfig, NULL_KEY, l1TxUtilsConfigMappings } from '@aztec/ethereum';
|
|
2
2
|
import { type ConfigMappingsType, getConfigFromMappings, numberConfigHelper } from '@aztec/foundation/config';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -19,12 +19,12 @@ export type TxSenderConfig = L1ReaderConfig & {
|
|
|
19
19
|
/**
|
|
20
20
|
* Configuration of the L1Publisher.
|
|
21
21
|
*/
|
|
22
|
-
export
|
|
22
|
+
export type PublisherConfig = L1TxUtilsConfig & {
|
|
23
23
|
/**
|
|
24
24
|
* The interval to wait between publish retries.
|
|
25
25
|
*/
|
|
26
26
|
l1PublishRetryIntervalMS: number;
|
|
27
|
-
}
|
|
27
|
+
};
|
|
28
28
|
|
|
29
29
|
export const getTxSenderConfigMappings: (
|
|
30
30
|
scope: 'PROVER' | 'SEQ',
|
|
@@ -62,13 +62,16 @@ export function getTxSenderConfigFromEnv(scope: 'PROVER' | 'SEQ'): Omit<TxSender
|
|
|
62
62
|
return getConfigFromMappings(getTxSenderConfigMappings(scope));
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
export const getPublisherConfigMappings: (
|
|
65
|
+
export const getPublisherConfigMappings: (
|
|
66
|
+
scope: 'PROVER' | 'SEQ',
|
|
67
|
+
) => ConfigMappingsType<PublisherConfig & L1TxUtilsConfig> = scope => ({
|
|
66
68
|
l1PublishRetryIntervalMS: {
|
|
67
69
|
env: `${scope}_PUBLISH_RETRY_INTERVAL_MS`,
|
|
68
70
|
parseEnv: (val: string) => +val,
|
|
69
71
|
defaultValue: 1000,
|
|
70
72
|
description: 'The interval to wait between publish retries.',
|
|
71
73
|
},
|
|
74
|
+
...l1TxUtilsConfigMappings,
|
|
72
75
|
});
|
|
73
76
|
|
|
74
77
|
export function getPublisherConfigFromEnv(scope: 'PROVER' | 'SEQ'): PublisherConfig {
|
|
@@ -38,9 +38,6 @@ export class L1PublisherMetrics {
|
|
|
38
38
|
description: 'The duration of transaction processing',
|
|
39
39
|
unit: 'ms',
|
|
40
40
|
valueType: ValueType.INT,
|
|
41
|
-
advice: {
|
|
42
|
-
explicitBucketBoundaries: [10, 50, 100, 200, 500, 1000, 2000, 5000, 10000],
|
|
43
|
-
},
|
|
44
41
|
});
|
|
45
42
|
|
|
46
43
|
this.txGas = meter.createHistogram(Metrics.L1_PUBLISHER_TX_GAS, {
|
|
@@ -51,11 +48,8 @@ export class L1PublisherMetrics {
|
|
|
51
48
|
|
|
52
49
|
this.txCalldataSize = meter.createHistogram(Metrics.L1_PUBLISHER_TX_CALLDATA_SIZE, {
|
|
53
50
|
description: 'The size of the calldata in transactions',
|
|
54
|
-
unit: '
|
|
51
|
+
unit: 'By',
|
|
55
52
|
valueType: ValueType.INT,
|
|
56
|
-
advice: {
|
|
57
|
-
explicitBucketBoundaries: [0, 100, 200, 500, 1000, 2000, 5000, 10000],
|
|
58
|
-
},
|
|
59
53
|
});
|
|
60
54
|
|
|
61
55
|
this.txCalldataGas = meter.createHistogram(Metrics.L1_PUBLISHER_TX_CALLDATA_GAS, {
|
|
@@ -11,18 +11,24 @@ import { type L1PublishBlockStats, type L1PublishProofStats } from '@aztec/circu
|
|
|
11
11
|
import {
|
|
12
12
|
AGGREGATION_OBJECT_LENGTH,
|
|
13
13
|
AZTEC_MAX_EPOCH_DURATION,
|
|
14
|
+
type BlockHeader,
|
|
14
15
|
EthAddress,
|
|
15
16
|
type FeeRecipient,
|
|
16
|
-
type Header,
|
|
17
17
|
type Proof,
|
|
18
18
|
type RootRollupPublicInputs,
|
|
19
19
|
} from '@aztec/circuits.js';
|
|
20
|
-
import {
|
|
20
|
+
import {
|
|
21
|
+
type EthereumChain,
|
|
22
|
+
type L1ContractsConfig,
|
|
23
|
+
L1TxUtils,
|
|
24
|
+
type L1TxUtilsConfig,
|
|
25
|
+
createEthereumChain,
|
|
26
|
+
} from '@aztec/ethereum';
|
|
21
27
|
import { makeTuple } from '@aztec/foundation/array';
|
|
22
28
|
import { areArraysEqual, compactArray, times } from '@aztec/foundation/collection';
|
|
23
29
|
import { type Signature } from '@aztec/foundation/eth-signature';
|
|
24
30
|
import { Fr } from '@aztec/foundation/fields';
|
|
25
|
-
import {
|
|
31
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
26
32
|
import { type Tuple, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
27
33
|
import { InterruptibleSleep } from '@aztec/foundation/sleep';
|
|
28
34
|
import { Timer } from '@aztec/foundation/timer';
|
|
@@ -44,6 +50,7 @@ import {
|
|
|
44
50
|
type PublicActions,
|
|
45
51
|
type PublicClient,
|
|
46
52
|
type PublicRpcSchema,
|
|
53
|
+
type TransactionReceipt,
|
|
47
54
|
type WalletActions,
|
|
48
55
|
type WalletClient,
|
|
49
56
|
type WalletRpcSchema,
|
|
@@ -142,7 +149,8 @@ export class L1Publisher {
|
|
|
142
149
|
private payload: EthAddress = EthAddress.ZERO;
|
|
143
150
|
private myLastVote: bigint = 0n;
|
|
144
151
|
|
|
145
|
-
protected log =
|
|
152
|
+
protected log = createLogger('sequencer:publisher');
|
|
153
|
+
protected governanceLog = createLogger('sequencer:publisher:governance');
|
|
146
154
|
|
|
147
155
|
protected rollupContract: GetContractReturnType<
|
|
148
156
|
typeof RollupAbi,
|
|
@@ -161,8 +169,10 @@ export class L1Publisher {
|
|
|
161
169
|
public static PROPOSE_GAS_GUESS: bigint = 12_000_000n;
|
|
162
170
|
public static PROPOSE_AND_CLAIM_GAS_GUESS: bigint = this.PROPOSE_GAS_GUESS + 100_000n;
|
|
163
171
|
|
|
172
|
+
private readonly l1TxUtils: L1TxUtils;
|
|
173
|
+
|
|
164
174
|
constructor(
|
|
165
|
-
config: TxSenderConfig & PublisherConfig & Pick<L1ContractsConfig, 'ethereumSlotDuration'
|
|
175
|
+
config: TxSenderConfig & PublisherConfig & Pick<L1ContractsConfig, 'ethereumSlotDuration'> & L1TxUtilsConfig,
|
|
166
176
|
client: TelemetryClient,
|
|
167
177
|
) {
|
|
168
178
|
this.sleepTimeMs = config?.l1PublishRetryIntervalMS ?? 60_000;
|
|
@@ -195,6 +205,12 @@ export class L1Publisher {
|
|
|
195
205
|
client: this.walletClient,
|
|
196
206
|
});
|
|
197
207
|
}
|
|
208
|
+
|
|
209
|
+
this.l1TxUtils = new L1TxUtils(this.publicClient, this.walletClient, this.log, config);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
get publisherAddress() {
|
|
213
|
+
return this.account.address;
|
|
198
214
|
}
|
|
199
215
|
|
|
200
216
|
protected createWalletClient(
|
|
@@ -296,8 +312,13 @@ export class L1Publisher {
|
|
|
296
312
|
}
|
|
297
313
|
|
|
298
314
|
public async getProofClaim(): Promise<EpochProofClaim | undefined> {
|
|
299
|
-
const
|
|
300
|
-
|
|
315
|
+
const {
|
|
316
|
+
epochToProve,
|
|
317
|
+
basisPointFee,
|
|
318
|
+
bondAmount,
|
|
319
|
+
bondProvider: bondProviderHex,
|
|
320
|
+
proposerClaimant: proposerClaimantHex,
|
|
321
|
+
} = await this.rollupContract.read.getProofClaim();
|
|
301
322
|
|
|
302
323
|
const bondProvider = EthAddress.fromString(bondProviderHex);
|
|
303
324
|
const proposerClaimant = EthAddress.fromString(proposerClaimantHex);
|
|
@@ -322,7 +343,7 @@ export class L1Publisher {
|
|
|
322
343
|
await this.rollupContract.read.validateEpochProofRightClaimAtTime(args, { account: this.account });
|
|
323
344
|
} catch (err) {
|
|
324
345
|
const errorName = tryGetCustomErrorName(err);
|
|
325
|
-
this.log.warn(`Proof quote validation failed: ${errorName}
|
|
346
|
+
this.log.warn(`Proof quote validation failed: ${errorName}`, quote);
|
|
326
347
|
return undefined;
|
|
327
348
|
}
|
|
328
349
|
return quote;
|
|
@@ -338,7 +359,7 @@ export class L1Publisher {
|
|
|
338
359
|
*
|
|
339
360
|
*/
|
|
340
361
|
public async validateBlockForSubmission(
|
|
341
|
-
header:
|
|
362
|
+
header: BlockHeader,
|
|
342
363
|
attestationData: { digest: Buffer; signatures: Signature[] } = {
|
|
343
364
|
digest: Buffer.alloc(32),
|
|
344
365
|
signatures: [],
|
|
@@ -412,7 +433,7 @@ export class L1Publisher {
|
|
|
412
433
|
this.governanceProposerContract.read.computeRound([slotNumber]),
|
|
413
434
|
]);
|
|
414
435
|
|
|
415
|
-
if (proposer
|
|
436
|
+
if (proposer.toLowerCase() !== this.account.address.toLowerCase()) {
|
|
416
437
|
return false;
|
|
417
438
|
}
|
|
418
439
|
|
|
@@ -430,14 +451,14 @@ export class L1Publisher {
|
|
|
430
451
|
const cachedMyLastVote = this.myLastVote;
|
|
431
452
|
this.myLastVote = slotNumber;
|
|
432
453
|
|
|
454
|
+
this.governanceLog.verbose(`Casting vote for ${this.payload}`);
|
|
455
|
+
|
|
433
456
|
let txHash;
|
|
434
457
|
try {
|
|
435
|
-
txHash = await this.governanceProposerContract.write.vote([this.payload.toString()], {
|
|
436
|
-
account: this.account,
|
|
437
|
-
});
|
|
458
|
+
txHash = await this.governanceProposerContract.write.vote([this.payload.toString()], { account: this.account });
|
|
438
459
|
} catch (err) {
|
|
439
460
|
const msg = prettyLogViemErrorMsg(err);
|
|
440
|
-
this.
|
|
461
|
+
this.governanceLog.error(`Failed to vote`, msg);
|
|
441
462
|
this.myLastVote = cachedMyLastVote;
|
|
442
463
|
return false;
|
|
443
464
|
}
|
|
@@ -445,14 +466,13 @@ export class L1Publisher {
|
|
|
445
466
|
if (txHash) {
|
|
446
467
|
const receipt = await this.getTransactionReceipt(txHash);
|
|
447
468
|
if (!receipt) {
|
|
448
|
-
this.
|
|
469
|
+
this.governanceLog.warn(`Failed to get receipt for tx ${txHash}`);
|
|
449
470
|
this.myLastVote = cachedMyLastVote;
|
|
450
471
|
return false;
|
|
451
472
|
}
|
|
452
473
|
}
|
|
453
474
|
|
|
454
|
-
this.
|
|
455
|
-
|
|
475
|
+
this.governanceLog.info(`Cast vote for ${this.payload}`);
|
|
456
476
|
return true;
|
|
457
477
|
}
|
|
458
478
|
|
|
@@ -502,37 +522,31 @@ export class L1Publisher {
|
|
|
502
522
|
signatures: attestations ?? [],
|
|
503
523
|
});
|
|
504
524
|
|
|
505
|
-
this.log.
|
|
506
|
-
|
|
507
|
-
const tx = proofQuote
|
|
525
|
+
this.log.debug(`Submitting propose transaction`);
|
|
526
|
+
const result = proofQuote
|
|
508
527
|
? await this.sendProposeAndClaimTx(proposeTxArgs, proofQuote)
|
|
509
528
|
: await this.sendProposeTx(proposeTxArgs);
|
|
510
529
|
|
|
511
|
-
if (!
|
|
530
|
+
if (!result?.receipt) {
|
|
512
531
|
this.log.info(`Failed to publish block ${block.number} to L1`, ctx);
|
|
513
532
|
return false;
|
|
514
533
|
}
|
|
515
534
|
|
|
516
|
-
const {
|
|
517
|
-
|
|
518
|
-
const receipt = await this.getTransactionReceipt(txHash);
|
|
519
|
-
if (!receipt) {
|
|
520
|
-
this.log.info(`Failed to get receipt for tx ${txHash}`, ctx);
|
|
521
|
-
return false;
|
|
522
|
-
}
|
|
535
|
+
const { receipt, args, functionName } = result;
|
|
523
536
|
|
|
524
537
|
// Tx was mined successfully
|
|
525
|
-
if (receipt.status) {
|
|
526
|
-
const tx = await this.getTransactionStats(
|
|
538
|
+
if (receipt.status === 'success') {
|
|
539
|
+
const tx = await this.getTransactionStats(receipt.transactionHash);
|
|
527
540
|
const stats: L1PublishBlockStats = {
|
|
528
|
-
|
|
541
|
+
gasPrice: receipt.effectiveGasPrice,
|
|
542
|
+
gasUsed: receipt.gasUsed,
|
|
543
|
+
transactionHash: receipt.transactionHash,
|
|
529
544
|
...pick(tx!, 'calldataGas', 'calldataSize', 'sender'),
|
|
530
545
|
...block.getStats(),
|
|
531
546
|
eventName: 'rollup-published-to-l1',
|
|
532
547
|
};
|
|
533
|
-
this.log.
|
|
548
|
+
this.log.verbose(`Published L2 block to L1 rollup contract`, { ...stats, ...ctx });
|
|
534
549
|
this.metrics.recordProcessBlockTx(timer.ms(), stats);
|
|
535
|
-
|
|
536
550
|
return true;
|
|
537
551
|
}
|
|
538
552
|
|
|
@@ -541,7 +555,6 @@ export class L1Publisher {
|
|
|
541
555
|
const errorMsg = await this.tryGetErrorFromRevertedTx({
|
|
542
556
|
args,
|
|
543
557
|
functionName,
|
|
544
|
-
gasLimit,
|
|
545
558
|
abi: RollupAbi,
|
|
546
559
|
address: this.rollupContract.address,
|
|
547
560
|
blockNumber: receipt.blockNumber,
|
|
@@ -557,7 +570,6 @@ export class L1Publisher {
|
|
|
557
570
|
private async tryGetErrorFromRevertedTx(args: {
|
|
558
571
|
args: any[];
|
|
559
572
|
functionName: string;
|
|
560
|
-
gasLimit: bigint;
|
|
561
573
|
abi: any;
|
|
562
574
|
address: Hex;
|
|
563
575
|
blockNumber: bigint | undefined;
|
|
@@ -633,7 +645,7 @@ export class L1Publisher {
|
|
|
633
645
|
const { fromBlock, toBlock, publicInputs, proof } = args;
|
|
634
646
|
|
|
635
647
|
// Check that the block numbers match the expected epoch to be proven
|
|
636
|
-
const
|
|
648
|
+
const { pendingBlockNumber: pending, provenBlockNumber: proven } = await this.rollupContract.read.getTips();
|
|
637
649
|
if (proven !== BigInt(fromBlock) - 1n) {
|
|
638
650
|
throw new Error(`Cannot submit epoch proof for ${fromBlock}-${toBlock} as proven block is ${proven}`);
|
|
639
651
|
}
|
|
@@ -675,7 +687,7 @@ export class L1Publisher {
|
|
|
675
687
|
: proof.extractAggregationObject();
|
|
676
688
|
const argsPublicInputs = [...publicInputs.toFields(), ...aggregationObject];
|
|
677
689
|
|
|
678
|
-
if (!areArraysEqual(rollupPublicInputs.map(Fr.
|
|
690
|
+
if (!areArraysEqual(rollupPublicInputs.map(Fr.fromHexString), argsPublicInputs, (a, b) => a.equals(b))) {
|
|
679
691
|
const fmt = (inputs: Fr[] | readonly string[]) => inputs.map(x => x.toString()).join(', ');
|
|
680
692
|
throw new Error(
|
|
681
693
|
`Root rollup public inputs mismatch:\nRollup: ${fmt(rollupPublicInputs)}\nComputed:${fmt(argsPublicInputs)}`,
|
|
@@ -720,17 +732,25 @@ export class L1Publisher {
|
|
|
720
732
|
] as const;
|
|
721
733
|
|
|
722
734
|
this.log.info(`SubmitEpochProof proofSize=${args.proof.withoutPublicInputs().length} bytes`);
|
|
723
|
-
|
|
724
|
-
|
|
735
|
+
|
|
736
|
+
const txReceipt = await this.l1TxUtils.sendAndMonitorTransaction({
|
|
737
|
+
to: this.rollupContract.address,
|
|
738
|
+
data: encodeFunctionData({
|
|
739
|
+
abi: this.rollupContract.abi,
|
|
740
|
+
functionName: 'submitEpochRootProof',
|
|
741
|
+
args: txArgs,
|
|
742
|
+
}),
|
|
743
|
+
});
|
|
744
|
+
|
|
745
|
+
return txReceipt.transactionHash;
|
|
725
746
|
} catch (err) {
|
|
726
747
|
this.log.error(`Rollup submit epoch proof failed`, err);
|
|
727
748
|
return undefined;
|
|
728
749
|
}
|
|
729
750
|
}
|
|
730
751
|
|
|
731
|
-
private async prepareProposeTx(encodedData: L1ProcessArgs
|
|
732
|
-
|
|
733
|
-
const computeTxsEffectsHashGas = await this.publicClient.estimateGas({
|
|
752
|
+
private async prepareProposeTx(encodedData: L1ProcessArgs) {
|
|
753
|
+
const computeTxsEffectsHashGas = await this.l1TxUtils.estimateGas(this.account, {
|
|
734
754
|
to: this.rollupContract.address,
|
|
735
755
|
data: encodeFunctionData({
|
|
736
756
|
abi: this.rollupContract.abi,
|
|
@@ -744,7 +764,7 @@ export class L1Publisher {
|
|
|
744
764
|
// we will fail estimation in the case where we are simulating for the
|
|
745
765
|
// first ethereum block within our slot (as current time is not in the
|
|
746
766
|
// slot yet).
|
|
747
|
-
const gasGuesstimate = computeTxsEffectsHashGas +
|
|
767
|
+
const gasGuesstimate = computeTxsEffectsHashGas + L1Publisher.PROPOSE_GAS_GUESS;
|
|
748
768
|
|
|
749
769
|
const attestations = encodedData.attestations
|
|
750
770
|
? encodedData.attestations.map(attest => attest.toViemSignature())
|
|
@@ -766,7 +786,7 @@ export class L1Publisher {
|
|
|
766
786
|
`0x${encodedData.body.toString('hex')}`,
|
|
767
787
|
] as const;
|
|
768
788
|
|
|
769
|
-
return { args, gasGuesstimate };
|
|
789
|
+
return { args, gas: gasGuesstimate };
|
|
770
790
|
}
|
|
771
791
|
|
|
772
792
|
private getSubmitEpochProofArgs(args: {
|
|
@@ -797,21 +817,29 @@ export class L1Publisher {
|
|
|
797
817
|
|
|
798
818
|
private async sendProposeTx(
|
|
799
819
|
encodedData: L1ProcessArgs,
|
|
800
|
-
): Promise<{
|
|
820
|
+
): Promise<{ receipt: TransactionReceipt; args: any; functionName: string } | undefined> {
|
|
801
821
|
if (this.interrupted) {
|
|
802
822
|
return undefined;
|
|
803
823
|
}
|
|
804
824
|
try {
|
|
805
|
-
const { args,
|
|
806
|
-
|
|
825
|
+
const { args, gas } = await this.prepareProposeTx(encodedData);
|
|
826
|
+
const receipt = await this.l1TxUtils.sendAndMonitorTransaction(
|
|
827
|
+
{
|
|
828
|
+
to: this.rollupContract.address,
|
|
829
|
+
data: encodeFunctionData({
|
|
830
|
+
abi: this.rollupContract.abi,
|
|
831
|
+
functionName: 'propose',
|
|
832
|
+
args,
|
|
833
|
+
}),
|
|
834
|
+
},
|
|
835
|
+
{
|
|
836
|
+
fixedGas: gas,
|
|
837
|
+
},
|
|
838
|
+
);
|
|
807
839
|
return {
|
|
808
|
-
|
|
809
|
-
account: this.account,
|
|
810
|
-
gas: gasGuesstimate,
|
|
811
|
-
}),
|
|
840
|
+
receipt,
|
|
812
841
|
args,
|
|
813
842
|
functionName: 'propose',
|
|
814
|
-
gasLimit: gasGuesstimate,
|
|
815
843
|
};
|
|
816
844
|
} catch (err) {
|
|
817
845
|
prettyLogViemError(err, this.log);
|
|
@@ -823,30 +851,36 @@ export class L1Publisher {
|
|
|
823
851
|
private async sendProposeAndClaimTx(
|
|
824
852
|
encodedData: L1ProcessArgs,
|
|
825
853
|
quote: EpochProofQuote,
|
|
826
|
-
): Promise<{
|
|
854
|
+
): Promise<{ receipt: TransactionReceipt; args: any; functionName: string } | undefined> {
|
|
827
855
|
if (this.interrupted) {
|
|
828
856
|
return undefined;
|
|
829
857
|
}
|
|
830
858
|
try {
|
|
831
|
-
const { args, gasGuesstimate } = await this.prepareProposeTx(
|
|
832
|
-
encodedData,
|
|
833
|
-
L1Publisher.PROPOSE_AND_CLAIM_GAS_GUESS,
|
|
834
|
-
);
|
|
835
859
|
this.log.info(`ProposeAndClaim`);
|
|
836
860
|
this.log.info(inspect(quote.payload));
|
|
837
861
|
|
|
862
|
+
const { args, gas } = await this.prepareProposeTx(encodedData);
|
|
863
|
+
const receipt = await this.l1TxUtils.sendAndMonitorTransaction(
|
|
864
|
+
{
|
|
865
|
+
to: this.rollupContract.address,
|
|
866
|
+
data: encodeFunctionData({
|
|
867
|
+
abi: this.rollupContract.abi,
|
|
868
|
+
functionName: 'proposeAndClaim',
|
|
869
|
+
args: [...args, quote.toViemArgs()],
|
|
870
|
+
}),
|
|
871
|
+
},
|
|
872
|
+
{ fixedGas: gas },
|
|
873
|
+
);
|
|
874
|
+
|
|
838
875
|
return {
|
|
839
|
-
|
|
840
|
-
account: this.account,
|
|
841
|
-
gas: gasGuesstimate,
|
|
842
|
-
}),
|
|
843
|
-
functionName: 'proposeAndClaim',
|
|
876
|
+
receipt,
|
|
844
877
|
args,
|
|
845
|
-
|
|
878
|
+
functionName: 'proposeAndClaim',
|
|
846
879
|
};
|
|
847
880
|
} catch (err) {
|
|
848
881
|
prettyLogViemError(err, this.log);
|
|
849
|
-
|
|
882
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
883
|
+
this.log.error(`Rollup publish failed`, errorMessage);
|
|
850
884
|
return undefined;
|
|
851
885
|
}
|
|
852
886
|
}
|
package/src/publisher/utils.ts
CHANGED