@aztec/sequencer-client 0.69.1 → 0.70.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 +2 -0
- package/dest/client/sequencer-client.d.ts.map +1 -1
- package/dest/client/sequencer-client.js +3 -3
- package/dest/publisher/index.d.ts +0 -1
- package/dest/publisher/index.d.ts.map +1 -1
- package/dest/publisher/index.js +1 -2
- package/dest/publisher/l1-publisher.d.ts +9 -3
- package/dest/publisher/l1-publisher.d.ts.map +1 -1
- package/dest/publisher/l1-publisher.js +63 -77
- package/dest/sequencer/metrics.d.ts +2 -1
- package/dest/sequencer/metrics.d.ts.map +1 -1
- package/dest/sequencer/metrics.js +8 -2
- package/dest/sequencer/sequencer.d.ts +17 -16
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +57 -19
- package/dest/test/index.d.ts +18 -0
- package/dest/test/index.d.ts.map +1 -0
- package/dest/test/index.js +8 -0
- package/dest/{publisher → test}/test-l1-publisher.d.ts +1 -1
- package/dest/test/test-l1-publisher.d.ts.map +1 -0
- package/dest/test/test-l1-publisher.js +11 -0
- package/dest/tx_validator/archive_cache.d.ts +14 -0
- package/dest/tx_validator/archive_cache.d.ts.map +1 -0
- package/dest/tx_validator/archive_cache.js +22 -0
- package/dest/tx_validator/gas_validator.js +2 -2
- package/dest/tx_validator/phases_validator.js +2 -2
- package/dest/tx_validator/tx_validator_factory.d.ts.map +1 -1
- package/dest/tx_validator/tx_validator_factory.js +9 -6
- package/package.json +22 -20
- package/src/client/sequencer-client.ts +5 -2
- package/src/publisher/index.ts +0 -1
- package/src/publisher/l1-publisher.ts +84 -82
- package/src/sequencer/metrics.ts +11 -1
- package/src/sequencer/sequencer.ts +83 -34
- package/src/test/index.ts +23 -0
- package/src/{publisher → test}/test-l1-publisher.ts +1 -1
- package/src/tx_validator/archive_cache.ts +27 -0
- package/src/tx_validator/gas_validator.ts +1 -1
- package/src/tx_validator/phases_validator.ts +1 -1
- package/src/tx_validator/tx_validator_factory.ts +8 -1
- package/dest/publisher/test-l1-publisher.d.ts.map +0 -1
- package/dest/publisher/test-l1-publisher.js +0 -11
- package/dest/publisher/utils.d.ts +0 -2
- package/dest/publisher/utils.d.ts.map +0 -1
- package/dest/publisher/utils.js +0 -13
- package/src/publisher/utils.ts +0 -14
|
@@ -3,7 +3,7 @@ import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
|
3
3
|
import { TxExecutionPhase } from '@aztec/circuit-types';
|
|
4
4
|
import { FunctionSelector } from '@aztec/circuits.js';
|
|
5
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
6
|
-
import { computeFeePayerBalanceStorageSlot, getExecutionRequestsByPhase } from '@aztec/simulator';
|
|
6
|
+
import { computeFeePayerBalanceStorageSlot, getExecutionRequestsByPhase } from '@aztec/simulator/server';
|
|
7
7
|
export class GasTxValidator {
|
|
8
8
|
constructor(publicDataSource, feeJuiceAddress, enforceFees, gasFees) {
|
|
9
9
|
_GasTxValidator_instances.add(this);
|
|
@@ -70,4 +70,4 @@ _GasTxValidator_log = new WeakMap(), _GasTxValidator_publicDataSource = new Weak
|
|
|
70
70
|
}
|
|
71
71
|
return { result: 'valid' };
|
|
72
72
|
};
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FzX3ZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eF92YWxpZGF0b3IvZ2FzX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBVyxnQkFBZ0IsRUFBNkMsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RyxPQUFPLEVBQThCLGdCQUFnQixFQUFnQixNQUFNLG9CQUFvQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQU96RyxNQUFNLE9BQU8sY0FBYztJQU96QixZQUNFLGdCQUFtQyxFQUNuQyxlQUE2QixFQUM3QixXQUFvQixFQUNwQixPQUFnQjs7UUFWbEIsOEJBQU8sWUFBWSxDQUFDLCtCQUErQixDQUFDLEVBQUM7UUFDckQsbURBQXFDO1FBQ3JDLGtEQUErQjtRQUMvQiw4Q0FBc0I7UUFDdEIsMENBQWtCO1FBUWhCLHVCQUFBLElBQUksb0NBQXFCLGdCQUFnQixNQUFBLENBQUM7UUFDMUMsdUJBQUEsSUFBSSxtQ0FBb0IsZUFBZSxNQUFBLENBQUM7UUFDeEMsdUJBQUEsSUFBSSwrQkFBZ0IsV0FBVyxNQUFBLENBQUM7UUFDaEMsdUJBQUEsSUFBSSwyQkFBWSxPQUFPLE1BQUEsQ0FBQztJQUMxQixDQUFDO0lBRUQsVUFBVSxDQUFDLEVBQU07UUFDZixJQUFJLHVCQUFBLElBQUksNkRBQVksTUFBaEIsSUFBSSxFQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDekIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RixDQUFDO1FBQ0QsT0FBTyx1QkFBQSxJQUFJLGdFQUFlLE1BQW5CLElBQUksRUFBZ0IsRUFB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
|
|
@@ -2,7 +2,7 @@ var _PhasesTxValidator_log;
|
|
|
2
2
|
import { __classPrivateFieldGet } from "tslib";
|
|
3
3
|
import { Tx, TxExecutionPhase, } from '@aztec/circuit-types';
|
|
4
4
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
|
-
import { ContractsDataSourcePublicDB, getExecutionRequestsByPhase } from '@aztec/simulator';
|
|
5
|
+
import { ContractsDataSourcePublicDB, getExecutionRequestsByPhase } from '@aztec/simulator/server';
|
|
6
6
|
export class PhasesTxValidator {
|
|
7
7
|
constructor(contracts, setupAllowList) {
|
|
8
8
|
this.setupAllowList = setupAllowList;
|
|
@@ -69,4 +69,4 @@ export class PhasesTxValidator {
|
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
_PhasesTxValidator_log = new WeakMap();
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2VzX3ZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eF92YWxpZGF0b3IvcGhhc2VzX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFHTCxFQUFFLEVBQ0YsZ0JBQWdCLEdBR2pCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRW5HLE1BQU0sT0FBTyxpQkFBaUI7SUFJNUIsWUFBWSxTQUE2QixFQUFVLGNBQWdDO1FBQWhDLG1CQUFjLEdBQWQsY0FBYyxDQUFrQjtRQUhuRixpQ0FBTyxZQUFZLENBQUMsa0NBQWtDLENBQUMsRUFBQztRQUl0RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSwyQkFBMkIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFNO1FBQ3JCLElBQUksQ0FBQztZQUNILHdGQUF3RjtZQUN4RixtR0FBbUc7WUFDbkcsK0RBQStEO1lBQy9ELE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUVsRCxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDdkIsdUJBQUEsSUFBSSw4QkFBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLDBFQUEwRSxDQUFDLENBQUM7Z0JBQ2hILE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDN0IsQ0FBQztZQUVELE1BQU0sUUFBUSxHQUFHLDJCQUEyQixDQUFDLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6RSxLQUFL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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx_validator_factory.d.ts","sourceRoot":"","sources":["../../src/tx_validator/tx_validator_factory.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,EAC7B,KAAK,WAAW,EAChB,KAAK,EAAE,EACP,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAqB,KAAK,kBAAkB,EAAM,KAAK,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"tx_validator_factory.d.ts","sourceRoot":"","sources":["../../src/tx_validator/tx_validator_factory.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,EAC7B,KAAK,WAAW,EAChB,KAAK,EAAE,EACP,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAqB,KAAK,kBAAkB,EAAM,KAAK,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAcxH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,wBAAgB,8BAA8B,CAC5C,EAAE,EAAE,wBAAwB,EAC5B,kBAAkB,EAAE,kBAAkB,EACtC,QAAQ,EAAE,6BAA6B,GAAG,SAAS,EACnD,IAAI,EAAE;IACJ,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,cAAc,EAAE,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;CAClB,GACA,WAAW,CAAC,EAAE,CAAC,CAgBjB;AAED,wBAAgB,gCAAgC,CAC9C,EAAE,EAAE,wBAAwB,EAC5B,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,OAAO,EACpB,cAAc,EAAE,cAAc,EAAE,GAC/B;IACD,mBAAmB,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IACrC,oBAAoB,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAC/C,cAAc,EAAE,cAAc,CAAC;CAChC,CAkBA"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Fr } from '@aztec/circuits.js';
|
|
2
|
-
import { AggregateTxValidator, DataTxValidator, DoubleSpendTxValidator, MetadataTxValidator, TxProofValidator, } from '@aztec/p2p';
|
|
2
|
+
import { AggregateTxValidator, BlockHeaderTxValidator, DataTxValidator, DoubleSpendTxValidator, MetadataTxValidator, TxProofValidator, } from '@aztec/p2p';
|
|
3
3
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
4
|
-
import { readPublicState } from '@aztec/simulator';
|
|
4
|
+
import { readPublicState } from '@aztec/simulator/server';
|
|
5
|
+
import { ArchiveCache } from './archive_cache.js';
|
|
5
6
|
import { GasTxValidator } from './gas_validator.js';
|
|
6
7
|
import { NullifierCache } from './nullifier_cache.js';
|
|
7
8
|
import { PhasesTxValidator } from './phases_validator.js';
|
|
@@ -13,6 +14,7 @@ export function createValidatorForAcceptingTxs(db, contractDataSource, verifier,
|
|
|
13
14
|
new DoubleSpendTxValidator(new NullifierCache(db)),
|
|
14
15
|
new PhasesTxValidator(contractDataSource, setupAllowList),
|
|
15
16
|
new GasTxValidator(new DatabasePublicStateSource(db), ProtocolContractAddress.FeeJuice, enforceFees, gasFees),
|
|
17
|
+
new BlockHeaderTxValidator(new ArchiveCache(db)),
|
|
16
18
|
];
|
|
17
19
|
if (verifier) {
|
|
18
20
|
validators.push(new TxProofValidator(verifier));
|
|
@@ -21,9 +23,10 @@ export function createValidatorForAcceptingTxs(db, contractDataSource, verifier,
|
|
|
21
23
|
}
|
|
22
24
|
export function createValidatorsForBlockBuilding(db, contractDataSource, globalVariables, enforceFees, setupAllowList) {
|
|
23
25
|
const nullifierCache = new NullifierCache(db);
|
|
26
|
+
const archiveCache = new ArchiveCache(db);
|
|
24
27
|
const publicStateSource = new DatabasePublicStateSource(db);
|
|
25
28
|
return {
|
|
26
|
-
preprocessValidator: preprocessValidator(nullifierCache, publicStateSource, contractDataSource, enforceFees, globalVariables, setupAllowList),
|
|
29
|
+
preprocessValidator: preprocessValidator(nullifierCache, archiveCache, publicStateSource, contractDataSource, enforceFees, globalVariables, setupAllowList),
|
|
27
30
|
postprocessValidator: postprocessValidator(nullifierCache),
|
|
28
31
|
nullifierCache,
|
|
29
32
|
};
|
|
@@ -36,11 +39,11 @@ class DatabasePublicStateSource {
|
|
|
36
39
|
return readPublicState(this.db, contractAddress, slot);
|
|
37
40
|
}
|
|
38
41
|
}
|
|
39
|
-
function preprocessValidator(nullifierCache, publicStateSource, contractDataSource, enforceFees, globalVariables, setupAllowList) {
|
|
42
|
+
function preprocessValidator(nullifierCache, archiveCache, publicStateSource, contractDataSource, enforceFees, globalVariables, setupAllowList) {
|
|
40
43
|
// We don't include the TxProofValidator nor the DataTxValidator here because they are already checked by the time we get to block building.
|
|
41
|
-
return new AggregateTxValidator(new MetadataTxValidator(globalVariables.chainId, globalVariables.blockNumber), new DoubleSpendTxValidator(nullifierCache), new PhasesTxValidator(contractDataSource, setupAllowList), new GasTxValidator(publicStateSource, ProtocolContractAddress.FeeJuice, enforceFees, globalVariables.gasFees));
|
|
44
|
+
return new AggregateTxValidator(new MetadataTxValidator(globalVariables.chainId, globalVariables.blockNumber), new DoubleSpendTxValidator(nullifierCache), new PhasesTxValidator(contractDataSource, setupAllowList), new GasTxValidator(publicStateSource, ProtocolContractAddress.FeeJuice, enforceFees, globalVariables.gasFees), new BlockHeaderTxValidator(archiveCache));
|
|
42
45
|
}
|
|
43
46
|
function postprocessValidator(nullifierCache) {
|
|
44
47
|
return new DoubleSpendTxValidator(nullifierCache);
|
|
45
48
|
}
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfdmFsaWRhdG9yX2ZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHhfdmFsaWRhdG9yL3R4X3ZhbGlkYXRvcl9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFBOEMsRUFBRSxFQUFzQyxNQUFNLG9CQUFvQixDQUFDO0FBQ3hILE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixzQkFBc0IsRUFDdEIsbUJBQW1CLEVBQ25CLGdCQUFnQixHQUNqQixNQUFNLFlBQVksQ0FBQztBQUNwQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQTBCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE1BQU0sVUFBVSw4QkFBOEIsQ0FDNUMsRUFBNEIsRUFDNUIsa0JBQXNDLEVBQ3RDLFFBQW1ELEVBQ25ELElBTUM7SUFFRCxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztJQUM5RSxNQUFNLFVBQVUsR0FBc0I7UUFDcEMsSUFBSSxlQUFlLEVBQUU7UUFDckIsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvRCxJQUFJLHNCQUFzQixDQUFDLElBQUksY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELElBQUksaUJBQWlCLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxDQUFDO1FBQ3pELElBQUksY0FBYyxDQUFDLElBQUkseUJBQXlCLENBQUMsRUFBRSxDQUFDLEVBQUUsdUJBQXVCLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUM7UUFDN0csSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNqRCxDQUFDO0lBRUYsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNiLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxPQUFPLElBQUksb0JBQW9CLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGdDQUFnQyxDQUM5QyxFQUE0QixFQUM1QixrQkFBc0MsRUFDdEMsZUFBZ0MsRUFDaEMsV0FBb0IsRUFDcEIsY0FBZ0M7SUFNaEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLHlCQUF5QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRTVELE9BQU87UUFDTCxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FDdEMsY0FBYyxFQUNkLFlBQVksRUFDWixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLFdBQVcsRUFDWCxlQUFlLEVBQ2YsY0FBYyxDQUNmO1FBQ0Qsb0JBQW9CLEVBQUUsb0JBQW9CLENBQUMsY0FBYyxDQUFDO1FBQzFELGNBQWM7S0FDZixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0seUJBQXlCO0lBQzdCLFlBQW9CLEVBQTRCO1FBQTVCLE9BQUUsR0FBRixFQUFFLENBQTBCO0lBQUcsQ0FBQztJQUVwRCxXQUFXLENBQUMsZUFBNkIsRUFBRSxJQUFRO1FBQ2pELE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pELENBQUM7Q0FDRjtBQUVELFNBQVMsbUJBQW1CLENBQzFCLGNBQThCLEVBQzlCLFlBQTBCLEVBQzFCLGlCQUFvQyxFQUNwQyxrQkFBc0MsRUFDdEMsV0FBb0IsRUFDcEIsZUFBZ0MsRUFDaEMsY0FBZ0M7SUFFaEMsNElBQTRJO0lBQzVJLE9BQU8sSUFBSSxvQkFBb0IsQ0FDN0IsSUFBSSxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxXQUFXLENBQUMsRUFDN0UsSUFBSSxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsRUFDMUMsSUFBSSxpQkFBaUIsQ0FBQyxrQkFBa0IsRUFBRSxjQUFjLENBQUMsRUFDekQsSUFBSSxjQUFjLENBQUMsaUJBQWlCLEVBQUUsdUJBQXVCLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLEVBQzdHLElBQUksc0JBQXNCLENBQUMsWUFBWSxDQUFDLENBQ3pDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxjQUE4QjtJQUMxRCxPQUFPLElBQUksc0JBQXNCLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDcEQsQ0FBQyJ9
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/sequencer-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.70.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
7
|
-
"./config": "./dest/config.js"
|
|
7
|
+
"./config": "./dest/config.js",
|
|
8
|
+
"./test": "./dest/test/index.js"
|
|
8
9
|
},
|
|
9
10
|
"typedocOptions": {
|
|
10
11
|
"entryPoints": [
|
|
@@ -27,24 +28,25 @@
|
|
|
27
28
|
"test:integration:run": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --no-cache --config jest.integration.config.json"
|
|
28
29
|
},
|
|
29
30
|
"dependencies": {
|
|
30
|
-
"@aztec/aztec.js": "0.
|
|
31
|
-
"@aztec/bb-prover": "0.
|
|
32
|
-
"@aztec/
|
|
33
|
-
"@aztec/
|
|
34
|
-
"@aztec/
|
|
35
|
-
"@aztec/
|
|
36
|
-
"@aztec/
|
|
37
|
-
"@aztec/
|
|
38
|
-
"@aztec/
|
|
39
|
-
"@aztec/noir-
|
|
40
|
-
"@aztec/
|
|
41
|
-
"@aztec/
|
|
42
|
-
"@aztec/
|
|
43
|
-
"@aztec/
|
|
44
|
-
"@aztec/
|
|
45
|
-
"@aztec/
|
|
46
|
-
"@aztec/
|
|
47
|
-
"@aztec/
|
|
31
|
+
"@aztec/aztec.js": "0.70.0",
|
|
32
|
+
"@aztec/bb-prover": "0.70.0",
|
|
33
|
+
"@aztec/blob-sink": "0.70.0",
|
|
34
|
+
"@aztec/circuit-types": "0.70.0",
|
|
35
|
+
"@aztec/circuits.js": "0.70.0",
|
|
36
|
+
"@aztec/ethereum": "0.70.0",
|
|
37
|
+
"@aztec/foundation": "0.70.0",
|
|
38
|
+
"@aztec/l1-artifacts": "0.70.0",
|
|
39
|
+
"@aztec/merkle-tree": "0.70.0",
|
|
40
|
+
"@aztec/noir-contracts.js": "0.70.0",
|
|
41
|
+
"@aztec/noir-protocol-circuits-types": "0.70.0",
|
|
42
|
+
"@aztec/p2p": "0.70.0",
|
|
43
|
+
"@aztec/protocol-contracts": "0.70.0",
|
|
44
|
+
"@aztec/prover-client": "0.70.0",
|
|
45
|
+
"@aztec/simulator": "0.70.0",
|
|
46
|
+
"@aztec/telemetry-client": "0.70.0",
|
|
47
|
+
"@aztec/types": "0.70.0",
|
|
48
|
+
"@aztec/validator-client": "0.70.0",
|
|
49
|
+
"@aztec/world-state": "0.70.0",
|
|
48
50
|
"@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
|
|
49
51
|
"@noir-lang/types": "portal:../../noir/packages/types",
|
|
50
52
|
"lodash.chunk": "^4.2.0",
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type BlobSinkClientInterface } from '@aztec/blob-sink/client';
|
|
1
2
|
import { type L1ToL2MessageSource, type L2BlockSource, type WorldStateSynchronizer } from '@aztec/circuit-types';
|
|
2
3
|
import { type ContractDataSource } from '@aztec/circuits.js';
|
|
3
4
|
import { isAnvilTestChain } from '@aztec/ethereum';
|
|
@@ -5,7 +6,7 @@ import { type EthAddress } from '@aztec/foundation/eth-address';
|
|
|
5
6
|
import { type DateProvider } from '@aztec/foundation/timer';
|
|
6
7
|
import { type P2P } from '@aztec/p2p';
|
|
7
8
|
import { LightweightBlockBuilderFactory } from '@aztec/prover-client/block-builder';
|
|
8
|
-
import { PublicProcessorFactory } from '@aztec/simulator';
|
|
9
|
+
import { PublicProcessorFactory } from '@aztec/simulator/server';
|
|
9
10
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
10
11
|
import { type ValidatorClient } from '@aztec/validator-client';
|
|
11
12
|
|
|
@@ -46,6 +47,7 @@ export class SequencerClient {
|
|
|
46
47
|
l1ToL2MessageSource: L1ToL2MessageSource;
|
|
47
48
|
telemetry: TelemetryClient;
|
|
48
49
|
publisher?: L1Publisher;
|
|
50
|
+
blobSinkClient?: BlobSinkClientInterface;
|
|
49
51
|
dateProvider: DateProvider;
|
|
50
52
|
},
|
|
51
53
|
) {
|
|
@@ -59,7 +61,8 @@ export class SequencerClient {
|
|
|
59
61
|
l1ToL2MessageSource,
|
|
60
62
|
telemetry: telemetryClient,
|
|
61
63
|
} = deps;
|
|
62
|
-
const publisher =
|
|
64
|
+
const publisher =
|
|
65
|
+
deps.publisher ?? new L1Publisher(config, { telemetry: telemetryClient, blobSinkClient: deps.blobSinkClient });
|
|
63
66
|
const globalsBuilder = new GlobalVariableBuilder(config);
|
|
64
67
|
|
|
65
68
|
const publicProcessorFactory = new PublicProcessorFactory(contractDataSource, deps.dateProvider, telemetryClient);
|
package/src/publisher/index.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type BlobSinkClientInterface, createBlobSinkClient } from '@aztec/blob-sink/client';
|
|
1
2
|
import {
|
|
2
3
|
ConsensusPayload,
|
|
3
4
|
type EpochProofClaim,
|
|
@@ -16,7 +17,14 @@ import {
|
|
|
16
17
|
type Proof,
|
|
17
18
|
} from '@aztec/circuits.js';
|
|
18
19
|
import { type FeeRecipient, type RootRollupPublicInputs } from '@aztec/circuits.js/rollup';
|
|
19
|
-
import {
|
|
20
|
+
import {
|
|
21
|
+
type EthereumChain,
|
|
22
|
+
type GasPrice,
|
|
23
|
+
type L1ContractsConfig,
|
|
24
|
+
L1TxUtils,
|
|
25
|
+
createEthereumChain,
|
|
26
|
+
formatViemError,
|
|
27
|
+
} from '@aztec/ethereum';
|
|
20
28
|
import { makeTuple } from '@aztec/foundation/array';
|
|
21
29
|
import { toHex } from '@aztec/foundation/bigint-buffer';
|
|
22
30
|
import { Blob } from '@aztec/foundation/blob';
|
|
@@ -29,6 +37,7 @@ import { InterruptibleSleep } from '@aztec/foundation/sleep';
|
|
|
29
37
|
import { Timer } from '@aztec/foundation/timer';
|
|
30
38
|
import { EmpireBaseAbi, RollupAbi, SlasherAbi } from '@aztec/l1-artifacts';
|
|
31
39
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
40
|
+
import { NoopTelemetryClient } from '@aztec/telemetry-client/noop';
|
|
32
41
|
|
|
33
42
|
import pick from 'lodash.pick';
|
|
34
43
|
import {
|
|
@@ -63,7 +72,6 @@ import { privateKeyToAccount } from 'viem/accounts';
|
|
|
63
72
|
|
|
64
73
|
import { type PublisherConfig, type TxSenderConfig } from './config.js';
|
|
65
74
|
import { L1PublisherMetrics } from './l1-publisher-metrics.js';
|
|
66
|
-
import { prettyLogViemErrorMsg } from './utils.js';
|
|
67
75
|
|
|
68
76
|
/**
|
|
69
77
|
* Stats for a sent transaction.
|
|
@@ -117,6 +125,14 @@ type L1ProcessArgs = {
|
|
|
117
125
|
attestations?: Signature[];
|
|
118
126
|
};
|
|
119
127
|
|
|
128
|
+
type L1ProcessReturnType = {
|
|
129
|
+
receipt: TransactionReceipt | undefined;
|
|
130
|
+
args: any;
|
|
131
|
+
functionName: string;
|
|
132
|
+
data: Hex;
|
|
133
|
+
gasPrice: GasPrice;
|
|
134
|
+
};
|
|
135
|
+
|
|
120
136
|
/** Arguments to the submitEpochProof method of the rollup contract */
|
|
121
137
|
export type L1SubmitEpochProofArgs = {
|
|
122
138
|
epochSize: number;
|
|
@@ -177,8 +193,7 @@ export class L1Publisher {
|
|
|
177
193
|
protected account: PrivateKeyAccount;
|
|
178
194
|
protected ethereumSlotDuration: bigint;
|
|
179
195
|
|
|
180
|
-
private
|
|
181
|
-
|
|
196
|
+
private blobSinkClient: BlobSinkClientInterface;
|
|
182
197
|
// @note - with blobs, the below estimate seems too large.
|
|
183
198
|
// Total used for full block from int_l1_pub e2e test: 1m (of which 86k is 1x blob)
|
|
184
199
|
// Total used for emptier block from above test: 429k (of which 84k is 1x blob)
|
|
@@ -189,12 +204,15 @@ export class L1Publisher {
|
|
|
189
204
|
|
|
190
205
|
constructor(
|
|
191
206
|
config: TxSenderConfig & PublisherConfig & Pick<L1ContractsConfig, 'ethereumSlotDuration'>,
|
|
192
|
-
|
|
207
|
+
deps: { telemetry?: TelemetryClient; blobSinkClient?: BlobSinkClientInterface } = {},
|
|
193
208
|
) {
|
|
194
209
|
this.sleepTimeMs = config?.l1PublishRetryIntervalMS ?? 60_000;
|
|
195
210
|
this.ethereumSlotDuration = BigInt(config.ethereumSlotDuration);
|
|
196
|
-
|
|
197
|
-
|
|
211
|
+
|
|
212
|
+
const telemetry = deps.telemetry ?? new NoopTelemetryClient();
|
|
213
|
+
this.blobSinkClient = deps.blobSinkClient ?? createBlobSinkClient(config.blobSinkUrl);
|
|
214
|
+
|
|
215
|
+
this.metrics = new L1PublisherMetrics(telemetry, 'L1Publisher');
|
|
198
216
|
|
|
199
217
|
const { l1RpcUrl: rpcUrl, l1ChainId: chainId, publisherPrivateKey, l1Contracts } = config;
|
|
200
218
|
const chain = createEthereumChain(rpcUrl, chainId);
|
|
@@ -528,7 +546,7 @@ export class L1Publisher {
|
|
|
528
546
|
account: this.account,
|
|
529
547
|
});
|
|
530
548
|
} catch (err) {
|
|
531
|
-
const msg =
|
|
549
|
+
const msg = formatViemError(err);
|
|
532
550
|
logger.error(`Failed to vote`, msg);
|
|
533
551
|
this.myLastVotes[voteType] = cachedMyLastVote;
|
|
534
552
|
return false;
|
|
@@ -557,6 +575,7 @@ export class L1Publisher {
|
|
|
557
575
|
attestations?: Signature[],
|
|
558
576
|
txHashes?: TxHash[],
|
|
559
577
|
proofQuote?: EpochProofQuote,
|
|
578
|
+
opts: { txTimeoutAt?: Date } = {},
|
|
560
579
|
): Promise<boolean> {
|
|
561
580
|
const ctx = {
|
|
562
581
|
blockNumber: block.number,
|
|
@@ -598,15 +617,15 @@ export class L1Publisher {
|
|
|
598
617
|
|
|
599
618
|
this.log.debug(`Submitting propose transaction`);
|
|
600
619
|
const result = proofQuote
|
|
601
|
-
? await this.sendProposeAndClaimTx(proposeTxArgs, proofQuote)
|
|
602
|
-
: await this.sendProposeTx(proposeTxArgs);
|
|
620
|
+
? await this.sendProposeAndClaimTx(proposeTxArgs, proofQuote, opts)
|
|
621
|
+
: await this.sendProposeTx(proposeTxArgs, opts);
|
|
603
622
|
|
|
604
623
|
if (!result?.receipt) {
|
|
605
624
|
this.log.info(`Failed to publish block ${block.number} to L1`, ctx);
|
|
606
625
|
return false;
|
|
607
626
|
}
|
|
608
627
|
|
|
609
|
-
const { receipt, args, functionName, data } = result;
|
|
628
|
+
const { receipt, args, functionName, data, gasPrice } = result;
|
|
610
629
|
|
|
611
630
|
// Tx was mined successfully
|
|
612
631
|
if (receipt.status === 'success') {
|
|
@@ -645,7 +664,7 @@ export class L1Publisher {
|
|
|
645
664
|
{
|
|
646
665
|
blobs: proposeTxArgs.blobs.map(b => b.dataWithZeros),
|
|
647
666
|
kzg,
|
|
648
|
-
maxFeePerBlobGas: 10000000000n,
|
|
667
|
+
maxFeePerBlobGas: gasPrice.maxFeePerBlobGas ?? 10000000000n,
|
|
649
668
|
},
|
|
650
669
|
);
|
|
651
670
|
this.log.error(`Rollup process tx reverted. ${errorMsg}`, undefined, {
|
|
@@ -659,11 +678,10 @@ export class L1Publisher {
|
|
|
659
678
|
/** Calls claimEpochProofRight in the Rollup contract to submit a chosen prover quote for the previous epoch. */
|
|
660
679
|
public async claimEpochProofRight(proofQuote: EpochProofQuote) {
|
|
661
680
|
const timer = new Timer();
|
|
662
|
-
|
|
663
|
-
let receipt;
|
|
681
|
+
let result;
|
|
664
682
|
try {
|
|
665
683
|
this.log.debug(`Submitting claimEpochProofRight transaction`);
|
|
666
|
-
|
|
684
|
+
result = await this.l1TxUtils.sendAndMonitorTransaction({
|
|
667
685
|
to: this.rollupContract.address,
|
|
668
686
|
data: encodeFunctionData({
|
|
669
687
|
abi: RollupAbi,
|
|
@@ -672,12 +690,14 @@ export class L1Publisher {
|
|
|
672
690
|
}),
|
|
673
691
|
});
|
|
674
692
|
} catch (err) {
|
|
675
|
-
this.log.error(`Failed to claim epoch proof right
|
|
693
|
+
this.log.error(`Failed to claim epoch proof right`, err, {
|
|
676
694
|
proofQuote: proofQuote.toInspect(),
|
|
677
695
|
});
|
|
678
696
|
return false;
|
|
679
697
|
}
|
|
680
698
|
|
|
699
|
+
const { receipt } = result;
|
|
700
|
+
|
|
681
701
|
if (receipt.status === 'success') {
|
|
682
702
|
const tx = await this.getTransactionStats(receipt.transactionHash);
|
|
683
703
|
const stats: L1PublishStats = {
|
|
@@ -900,35 +920,42 @@ export class L1Publisher {
|
|
|
900
920
|
publicInputs: RootRollupPublicInputs;
|
|
901
921
|
proof: Proof;
|
|
902
922
|
}): Promise<string | undefined> {
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
const argsArray = this.getSubmitEpochProofArgs(args);
|
|
923
|
+
const proofHex: Hex = `0x${args.proof.withoutPublicInputs().toString('hex')}`;
|
|
924
|
+
const argsArray = this.getSubmitEpochProofArgs(args);
|
|
906
925
|
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
this.log.info(`SubmitEpochProof proofSize=${args.proof.withoutPublicInputs().length} bytes`);
|
|
926
|
+
const txArgs = [
|
|
927
|
+
{
|
|
928
|
+
epochSize: argsArray[0],
|
|
929
|
+
args: argsArray[1],
|
|
930
|
+
fees: argsArray[2],
|
|
931
|
+
blobPublicInputs: argsArray[3],
|
|
932
|
+
aggregationObject: argsArray[4],
|
|
933
|
+
proof: proofHex,
|
|
934
|
+
},
|
|
935
|
+
] as const;
|
|
919
936
|
|
|
920
|
-
|
|
937
|
+
this.log.info(`SubmitEpochProof proofSize=${args.proof.withoutPublicInputs().length} bytes`);
|
|
938
|
+
const data = encodeFunctionData({
|
|
939
|
+
abi: this.rollupContract.abi,
|
|
940
|
+
functionName: 'submitEpochRootProof',
|
|
941
|
+
args: txArgs,
|
|
942
|
+
});
|
|
943
|
+
try {
|
|
944
|
+
const { receipt } = await this.l1TxUtils.sendAndMonitorTransaction({
|
|
921
945
|
to: this.rollupContract.address,
|
|
922
|
-
data
|
|
923
|
-
abi: this.rollupContract.abi,
|
|
924
|
-
functionName: 'submitEpochRootProof',
|
|
925
|
-
args: txArgs,
|
|
926
|
-
}),
|
|
946
|
+
data,
|
|
927
947
|
});
|
|
928
948
|
|
|
929
|
-
return
|
|
949
|
+
return receipt.transactionHash;
|
|
930
950
|
} catch (err) {
|
|
931
951
|
this.log.error(`Rollup submit epoch proof failed`, err);
|
|
952
|
+
const errorMsg = await this.tryGetErrorFromRevertedTx(data, {
|
|
953
|
+
args: [...txArgs],
|
|
954
|
+
functionName: 'submitEpochRootProof',
|
|
955
|
+
abi: this.rollupContract.abi,
|
|
956
|
+
address: this.rollupContract.address,
|
|
957
|
+
});
|
|
958
|
+
this.log.error(`Rollup submit epoch proof tx reverted. ${errorMsg}`);
|
|
932
959
|
return undefined;
|
|
933
960
|
}
|
|
934
961
|
}
|
|
@@ -949,7 +976,6 @@ export class L1Publisher {
|
|
|
949
976
|
{
|
|
950
977
|
blobs: encodedData.blobs.map(b => b.dataWithZeros),
|
|
951
978
|
kzg,
|
|
952
|
-
maxFeePerBlobGas: 10000000000n, //This is 10 gwei, taken from DEFAULT_MAX_FEE_PER_GAS
|
|
953
979
|
},
|
|
954
980
|
);
|
|
955
981
|
|
|
@@ -1016,7 +1042,8 @@ export class L1Publisher {
|
|
|
1016
1042
|
|
|
1017
1043
|
private async sendProposeTx(
|
|
1018
1044
|
encodedData: L1ProcessArgs,
|
|
1019
|
-
|
|
1045
|
+
opts: { txTimeoutAt?: Date } = {},
|
|
1046
|
+
): Promise<L1ProcessReturnType | undefined> {
|
|
1020
1047
|
if (this.interrupted) {
|
|
1021
1048
|
return undefined;
|
|
1022
1049
|
}
|
|
@@ -1028,28 +1055,29 @@ export class L1Publisher {
|
|
|
1028
1055
|
functionName: 'propose',
|
|
1029
1056
|
args,
|
|
1030
1057
|
});
|
|
1031
|
-
const
|
|
1058
|
+
const result = await this.l1TxUtils.sendAndMonitorTransaction(
|
|
1032
1059
|
{
|
|
1033
1060
|
to: this.rollupContract.address,
|
|
1034
1061
|
data,
|
|
1035
1062
|
},
|
|
1036
1063
|
{
|
|
1037
1064
|
fixedGas: gas,
|
|
1065
|
+
...opts,
|
|
1038
1066
|
},
|
|
1039
1067
|
{
|
|
1040
1068
|
blobs: encodedData.blobs.map(b => b.dataWithZeros),
|
|
1041
1069
|
kzg,
|
|
1042
|
-
maxFeePerBlobGas: 10000000000n, //This is 10 gwei, taken from DEFAULT_MAX_FEE_PER_GAS
|
|
1043
1070
|
},
|
|
1044
1071
|
);
|
|
1045
1072
|
return {
|
|
1046
|
-
receipt,
|
|
1073
|
+
receipt: result.receipt,
|
|
1074
|
+
gasPrice: result.gasPrice,
|
|
1047
1075
|
args,
|
|
1048
1076
|
functionName: 'propose',
|
|
1049
1077
|
data,
|
|
1050
1078
|
};
|
|
1051
1079
|
} catch (err) {
|
|
1052
|
-
this.log.error(`Rollup publish failed
|
|
1080
|
+
this.log.error(`Rollup publish failed.`, err);
|
|
1053
1081
|
return undefined;
|
|
1054
1082
|
}
|
|
1055
1083
|
}
|
|
@@ -1057,7 +1085,8 @@ export class L1Publisher {
|
|
|
1057
1085
|
private async sendProposeAndClaimTx(
|
|
1058
1086
|
encodedData: L1ProcessArgs,
|
|
1059
1087
|
quote: EpochProofQuote,
|
|
1060
|
-
|
|
1088
|
+
opts: { txTimeoutAt?: Date } = {},
|
|
1089
|
+
): Promise<L1ProcessReturnType | undefined> {
|
|
1061
1090
|
if (this.interrupted) {
|
|
1062
1091
|
return undefined;
|
|
1063
1092
|
}
|
|
@@ -1069,27 +1098,30 @@ export class L1Publisher {
|
|
|
1069
1098
|
functionName: 'proposeAndClaim',
|
|
1070
1099
|
args: [...args, quote.toViemArgs()],
|
|
1071
1100
|
});
|
|
1072
|
-
const
|
|
1101
|
+
const result = await this.l1TxUtils.sendAndMonitorTransaction(
|
|
1073
1102
|
{
|
|
1074
1103
|
to: this.rollupContract.address,
|
|
1075
1104
|
data,
|
|
1076
1105
|
},
|
|
1077
|
-
{
|
|
1106
|
+
{
|
|
1107
|
+
fixedGas: gas,
|
|
1108
|
+
...opts,
|
|
1109
|
+
},
|
|
1078
1110
|
{
|
|
1079
1111
|
blobs: encodedData.blobs.map(b => b.dataWithZeros),
|
|
1080
1112
|
kzg,
|
|
1081
|
-
maxFeePerBlobGas: 10000000000n, //This is 10 gwei, taken from DEFAULT_MAX_FEE_PER_GAS
|
|
1082
1113
|
},
|
|
1083
1114
|
);
|
|
1084
1115
|
|
|
1085
1116
|
return {
|
|
1086
|
-
receipt,
|
|
1117
|
+
receipt: result.receipt,
|
|
1118
|
+
gasPrice: result.gasPrice,
|
|
1087
1119
|
args: [...args, quote.toViemArgs()],
|
|
1088
1120
|
functionName: 'proposeAndClaim',
|
|
1089
1121
|
data,
|
|
1090
1122
|
};
|
|
1091
1123
|
} catch (err) {
|
|
1092
|
-
this.log.error(`Rollup publish failed
|
|
1124
|
+
this.log.error(`Rollup publish failed.`, err);
|
|
1093
1125
|
return undefined;
|
|
1094
1126
|
}
|
|
1095
1127
|
}
|
|
@@ -1143,38 +1175,8 @@ export class L1Publisher {
|
|
|
1143
1175
|
* In the future this will move to be the beacon block id - which takes a bit more work
|
|
1144
1176
|
* to calculate and will need to be mocked in e2e tests
|
|
1145
1177
|
*/
|
|
1146
|
-
protected
|
|
1147
|
-
|
|
1148
|
-
// When in reality they will not, but for testing purposes this is fine
|
|
1149
|
-
if (!this.blobSinkUrl) {
|
|
1150
|
-
this.log.verbose('No blob sink url configured');
|
|
1151
|
-
return false;
|
|
1152
|
-
}
|
|
1153
|
-
|
|
1154
|
-
this.log.verbose(`Sending ${blobs.length} blobs to blob sink`);
|
|
1155
|
-
try {
|
|
1156
|
-
const res = await fetch(`${this.blobSinkUrl}/blob_sidecar`, {
|
|
1157
|
-
method: 'POST',
|
|
1158
|
-
headers: {
|
|
1159
|
-
'Content-Type': 'application/json',
|
|
1160
|
-
},
|
|
1161
|
-
body: JSON.stringify({
|
|
1162
|
-
// eslint-disable-next-line camelcase
|
|
1163
|
-
block_id: blockHash,
|
|
1164
|
-
blobs: blobs.map((b, i) => ({ blob: b.toBuffer(), index: i })),
|
|
1165
|
-
}),
|
|
1166
|
-
});
|
|
1167
|
-
|
|
1168
|
-
if (res.ok) {
|
|
1169
|
-
return true;
|
|
1170
|
-
}
|
|
1171
|
-
|
|
1172
|
-
this.log.error('Failed to send blobs to blob sink', res.status);
|
|
1173
|
-
return false;
|
|
1174
|
-
} catch (err) {
|
|
1175
|
-
this.log.error(`Error sending blobs to blob sink`, err);
|
|
1176
|
-
return false;
|
|
1177
|
-
}
|
|
1178
|
+
protected sendBlobsToBlobSink(blockHash: string, blobs: Blob[]): Promise<boolean> {
|
|
1179
|
+
return this.blobSinkClient.sendBlobsToBlobSink(blockHash, blobs);
|
|
1178
1180
|
}
|
|
1179
1181
|
}
|
|
1180
1182
|
|
package/src/sequencer/metrics.ts
CHANGED
|
@@ -16,6 +16,7 @@ export class SequencerMetrics {
|
|
|
16
16
|
|
|
17
17
|
private blockCounter: UpDownCounter;
|
|
18
18
|
private blockBuildDuration: Histogram;
|
|
19
|
+
private blockBuildManaPerSecond: Gauge;
|
|
19
20
|
private stateTransitionBufferDuration: Histogram;
|
|
20
21
|
private currentBlockNumber: Gauge;
|
|
21
22
|
private currentBlockSize: Gauge;
|
|
@@ -28,11 +29,19 @@ export class SequencerMetrics {
|
|
|
28
29
|
this.tracer = client.getTracer(name);
|
|
29
30
|
|
|
30
31
|
this.blockCounter = meter.createUpDownCounter(Metrics.SEQUENCER_BLOCK_COUNT);
|
|
32
|
+
|
|
31
33
|
this.blockBuildDuration = meter.createHistogram(Metrics.SEQUENCER_BLOCK_BUILD_DURATION, {
|
|
32
34
|
unit: 'ms',
|
|
33
35
|
description: 'Duration to build a block',
|
|
34
36
|
valueType: ValueType.INT,
|
|
35
37
|
});
|
|
38
|
+
|
|
39
|
+
this.blockBuildManaPerSecond = meter.createGauge(Metrics.SEQUENCER_BLOCK_BUILD_MANA_PER_SECOND, {
|
|
40
|
+
unit: 'mana/s',
|
|
41
|
+
description: 'Mana per second when building a block',
|
|
42
|
+
valueType: ValueType.INT,
|
|
43
|
+
});
|
|
44
|
+
|
|
36
45
|
this.stateTransitionBufferDuration = meter.createHistogram(Metrics.SEQUENCER_STATE_TRANSITION_BUFFER_DURATION, {
|
|
37
46
|
unit: 'ms',
|
|
38
47
|
description:
|
|
@@ -96,11 +105,12 @@ export class SequencerMetrics {
|
|
|
96
105
|
this.setCurrentBlock(0, 0);
|
|
97
106
|
}
|
|
98
107
|
|
|
99
|
-
recordPublishedBlock(buildDurationMs: number) {
|
|
108
|
+
recordPublishedBlock(buildDurationMs: number, totalMana: number) {
|
|
100
109
|
this.blockCounter.add(1, {
|
|
101
110
|
[Attributes.STATUS]: 'published',
|
|
102
111
|
});
|
|
103
112
|
this.blockBuildDuration.record(Math.ceil(buildDurationMs));
|
|
113
|
+
this.blockBuildManaPerSecond.record(Math.ceil((totalMana * 1000) / buildDurationMs));
|
|
104
114
|
this.setCurrentBlock(0, 0);
|
|
105
115
|
}
|
|
106
116
|
|