@aztec/sequencer-client 0.7.10 → 0.8.7
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/README.md +1 -1
- package/dest/client/sequencer-client.d.ts +3 -3
- package/dest/client/sequencer-client.d.ts.map +1 -1
- package/dest/client/sequencer-client.js +6 -6
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +14 -7
- package/dest/global_variable_builder/config.d.ts +5 -5
- package/dest/global_variable_builder/config.d.ts.map +1 -1
- package/dest/global_variable_builder/viem-reader.js +3 -3
- package/dest/publisher/config.d.ts +6 -2
- package/dest/publisher/config.d.ts.map +1 -1
- package/dest/publisher/index.d.ts +27 -0
- package/dest/publisher/index.d.ts.map +1 -1
- package/dest/publisher/index.js +1 -1
- package/dest/publisher/l1-publisher.d.ts +26 -11
- package/dest/publisher/l1-publisher.d.ts.map +1 -1
- package/dest/publisher/l1-publisher.js +18 -4
- package/dest/publisher/viem-tx-sender.d.ts +2 -1
- package/dest/publisher/viem-tx-sender.d.ts.map +1 -1
- package/dest/publisher/viem-tx-sender.js +27 -7
- package/dest/sequencer/public_processor.d.ts +4 -2
- package/dest/sequencer/public_processor.d.ts.map +1 -1
- package/dest/sequencer/public_processor.js +11 -5
- package/dest/sequencer/sequencer.d.ts +13 -9
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +53 -34
- package/dest/simulator/index.d.ts +0 -1
- package/dest/simulator/index.d.ts.map +1 -1
- package/dest/simulator/index.js +2 -2
- package/dest/simulator/public_executor.d.ts +28 -4
- package/dest/simulator/public_executor.d.ts.map +1 -1
- package/dest/simulator/public_executor.js +46 -7
- package/dest/simulator/public_kernel.d.ts +1 -0
- package/dest/simulator/public_kernel.d.ts.map +1 -1
- package/dest/simulator/public_kernel.js +26 -5
- package/dest/simulator/rollup.d.ts +2 -8
- package/dest/simulator/rollup.d.ts.map +1 -1
- package/dest/simulator/rollup.js +37 -18
- package/package.json +70 -11
- package/src/client/sequencer-client.ts +7 -6
- package/src/config.ts +14 -5
- package/src/global_variable_builder/config.ts +6 -5
- package/src/global_variable_builder/viem-reader.ts +2 -2
- package/src/publisher/config.ts +7 -2
- package/src/publisher/index.ts +28 -0
- package/src/publisher/l1-publisher.ts +46 -13
- package/src/publisher/viem-tx-sender.ts +33 -13
- package/src/sequencer/public_processor.ts +13 -4
- package/src/sequencer/sequencer.ts +59 -45
- package/src/simulator/index.ts +0 -2
- package/src/simulator/public_executor.ts +53 -7
- package/src/simulator/public_kernel.ts +24 -4
- package/src/simulator/rollup.ts +38 -21
- package/.eslintrc.cjs +0 -1
- package/.tsbuildinfo +0 -1
- package/dest/block_builder/solo_block_builder.test.d.ts +0 -3
- package/dest/block_builder/solo_block_builder.test.d.ts.map +0 -1
- package/dest/block_builder/solo_block_builder.test.js +0 -277
- package/dest/publisher/l1-publisher.test.d.ts +0 -2
- package/dest/publisher/l1-publisher.test.d.ts.map +0 -1
- package/dest/publisher/l1-publisher.test.js +0 -58
- package/dest/sequencer/public_processor.test.d.ts +0 -2
- package/dest/sequencer/public_processor.test.d.ts.map +0 -1
- package/dest/sequencer/public_processor.test.js +0 -164
- package/dest/sequencer/sequencer.test.d.ts +0 -2
- package/dest/sequencer/sequencer.test.d.ts.map +0 -1
- package/dest/sequencer/sequencer.test.js +0 -99
- package/jest.integration.config.json +0 -13
- package/src/block_builder/solo_block_builder.test.ts +0 -425
- package/src/publisher/l1-publisher.test.ts +0 -79
- package/src/sequencer/public_processor.test.ts +0 -265
- package/src/sequencer/sequencer.test.ts +0 -160
- package/tsconfig.json +0 -38
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
The sequencer is a module responsible for creating and publishing new rollup blocks. This involves fetching txs from the P2P pool, ordering them, executing any public functions, running them through the rollup circuits, assembling the L2 block, and posting it to the L1 rollup contract along with any contract deployment public data.
|
|
4
4
|
|
|
5
|
-
The client itself is implemented as a continuous loop. After being started, it polls the P2P pool for new txs, assembles a new block if any is found, and goes back to sleep. On every new block assembled, it modifies the world state database to reflect the txs processed, but these changes are only committed once the world state
|
|
5
|
+
The client itself is implemented as a continuous loop. After being started, it polls the P2P pool for new txs, assembles a new block if any is found, and goes back to sleep. On every new block assembled, it modifies the world state database to reflect the txs processed, but these changes are only committed once the world state synchronizer sees the new block on L1.
|
|
6
6
|
|
|
7
7
|
## Components
|
|
8
8
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { P2P } from '@aztec/p2p';
|
|
2
2
|
import { ContractDataSource, L1ToL2MessageSource, L2BlockSource } from '@aztec/types';
|
|
3
|
-
import {
|
|
3
|
+
import { WorldStateSynchronizer } from '@aztec/world-state';
|
|
4
4
|
import { SequencerClientConfig } from '../config.js';
|
|
5
5
|
import { Sequencer } from '../index.js';
|
|
6
6
|
/**
|
|
@@ -13,13 +13,13 @@ export declare class SequencerClient {
|
|
|
13
13
|
* Initializes and starts a new instance.
|
|
14
14
|
* @param config - Configuration for the sequencer, publisher, and L1 tx sender.
|
|
15
15
|
* @param p2pClient - P2P client that provides the txs to be sequenced.
|
|
16
|
-
* @param
|
|
16
|
+
* @param worldStateSynchronizer - Provides access to world state.
|
|
17
17
|
* @param contractDataSource - Provides access to contract bytecode for public executions.
|
|
18
18
|
* @param l2BlockSource - Provides information about the previously published blocks.
|
|
19
19
|
* @param l1ToL2MessageSource - Provides access to L1 to L2 messages.
|
|
20
20
|
* @returns A new running instance.
|
|
21
21
|
*/
|
|
22
|
-
static new(config: SequencerClientConfig, p2pClient: P2P,
|
|
22
|
+
static new(config: SequencerClientConfig, p2pClient: P2P, worldStateSynchronizer: WorldStateSynchronizer, contractDataSource: ContractDataSource, l2BlockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource): Promise<SequencerClient>;
|
|
23
23
|
/**
|
|
24
24
|
* Stops the sequencer from processing new txs.
|
|
25
25
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequencer-client.d.ts","sourceRoot":"","sources":["../../src/client/sequencer-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAG5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,SAAS,EAAuC,MAAM,aAAa,CAAC;AAK7E;;GAEG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAExC;;;;;;;;;OASG;WACiB,GAAG,CACrB,MAAM,EAAE,qBAAqB,EAC7B,SAAS,EAAE,GAAG,EACd,sBAAsB,EAAE,sBAAsB,EAC9C,kBAAkB,EAAE,kBAAkB,EACtC,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,mBAAmB;
|
|
1
|
+
{"version":3,"file":"sequencer-client.d.ts","sourceRoot":"","sources":["../../src/client/sequencer-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAG5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,SAAS,EAAuC,MAAM,aAAa,CAAC;AAK7E;;GAEG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAExC;;;;;;;;;OASG;WACiB,GAAG,CACrB,MAAM,EAAE,qBAAqB,EAC7B,SAAS,EAAE,GAAG,EACd,sBAAsB,EAAE,sBAAsB,EAC9C,kBAAkB,EAAE,kBAAkB,EACtC,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,mBAAmB;IAgC1C;;OAEG;IACU,IAAI;IAIjB;;OAEG;IACI,OAAO;CAGf"}
|
|
@@ -15,19 +15,19 @@ export class SequencerClient {
|
|
|
15
15
|
* Initializes and starts a new instance.
|
|
16
16
|
* @param config - Configuration for the sequencer, publisher, and L1 tx sender.
|
|
17
17
|
* @param p2pClient - P2P client that provides the txs to be sequenced.
|
|
18
|
-
* @param
|
|
18
|
+
* @param worldStateSynchronizer - Provides access to world state.
|
|
19
19
|
* @param contractDataSource - Provides access to contract bytecode for public executions.
|
|
20
20
|
* @param l2BlockSource - Provides information about the previously published blocks.
|
|
21
21
|
* @param l1ToL2MessageSource - Provides access to L1 to L2 messages.
|
|
22
22
|
* @returns A new running instance.
|
|
23
23
|
*/
|
|
24
|
-
static async new(config, p2pClient,
|
|
24
|
+
static async new(config, p2pClient, worldStateSynchronizer, contractDataSource, l2BlockSource, l1ToL2MessageSource) {
|
|
25
25
|
const publisher = getL1Publisher(config);
|
|
26
26
|
const globalsBuilder = getGlobalVariableBuilder(config);
|
|
27
|
-
const merkleTreeDb =
|
|
28
|
-
const blockBuilder = new SoloBlockBuilder(merkleTreeDb, getVerificationKeys(),
|
|
27
|
+
const merkleTreeDb = worldStateSynchronizer.getLatest();
|
|
28
|
+
const blockBuilder = new SoloBlockBuilder(merkleTreeDb, getVerificationKeys(), new WasmRollupCircuitSimulator(), new EmptyRollupProver());
|
|
29
29
|
const publicProcessorFactory = new PublicProcessorFactory(merkleTreeDb, contractDataSource, l1ToL2MessageSource);
|
|
30
|
-
const sequencer = new Sequencer(publisher, globalsBuilder, p2pClient,
|
|
30
|
+
const sequencer = new Sequencer(publisher, globalsBuilder, p2pClient, worldStateSynchronizer, blockBuilder, l2BlockSource, l1ToL2MessageSource, contractDataSource, publicProcessorFactory, config);
|
|
31
31
|
await sequencer.start();
|
|
32
32
|
return new SequencerClient(sequencer);
|
|
33
33
|
}
|
|
@@ -44,4 +44,4 @@ export class SequencerClient {
|
|
|
44
44
|
this.sequencer.restart();
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvc2VxdWVuY2VyLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUUxRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVwRTs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBQzFCLFlBQW9CLFNBQW9CO1FBQXBCLGNBQVMsR0FBVCxTQUFTLENBQVc7SUFBRyxDQUFDO0lBRTVDOzs7Ozs7Ozs7T0FTRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUNyQixNQUE2QixFQUM3QixTQUFjLEVBQ2Qsc0JBQThDLEVBQzlDLGtCQUFzQyxFQUN0QyxhQUE0QixFQUM1QixtQkFBd0M7UUFFeEMsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sY0FBYyxHQUFHLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELE1BQU0sWUFBWSxHQUFHLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRXhELE1BQU0sWUFBWSxHQUFHLElBQUksZ0JBQWdCLENBQ3ZDLFlBQVksRUFDWixtQkFBbUIsRUFBRSxFQUNyQixJQUFJLDBCQUEwQixFQUFFLEVBQ2hDLElBQUksaUJBQWlCLEVBQUUsQ0FDeEIsQ0FBQztRQUVGLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUVqSCxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FDN0IsU0FBUyxFQUNULGNBQWMsRUFDZCxTQUFTLEVBQ1Qsc0JBQXNCLEVBQ3RCLFlBQVksRUFDWixhQUFhLEVBQ2IsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsTUFBTSxDQUNQLENBQUM7UUFFRixNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QixPQUFPLElBQUksZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxJQUFJO1FBQ2YsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU87UUFDWixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FDRiJ9
|
package/dest/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,eAAe,GAAG,cAAc,GAAG,eAAe,GAAG,kBAAkB,CAAC;AAE5G;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,qBAAqB,CAgDxD"}
|
package/dest/config.js
CHANGED
|
@@ -3,10 +3,21 @@ import { EthAddress } from '@aztec/foundation/eth-address';
|
|
|
3
3
|
* Creates an instance of SequencerClientConfig out of environment variables using sensible defaults for integration testing if not set.
|
|
4
4
|
*/
|
|
5
5
|
export function getConfigEnvVars() {
|
|
6
|
-
const { SEQ_PUBLISHER_PRIVATE_KEY, ETHEREUM_HOST, CHAIN_ID, VERSION, API_KEY, SEQ_REQUIRED_CONFS, SEQ_PUBLISH_RETRY_INTERVAL_MS, SEQ_TX_POLLING_INTERVAL_MS, SEQ_MAX_TX_PER_BLOCK, SEQ_MIN_TX_PER_BLOCK, ROLLUP_CONTRACT_ADDRESS, INBOX_CONTRACT_ADDRESS, CONTRACT_DEPLOYMENT_EMITTER_ADDRESS, } = process.env;
|
|
6
|
+
const { SEQ_PUBLISHER_PRIVATE_KEY, ETHEREUM_HOST, CHAIN_ID, VERSION, API_KEY, SEQ_REQUIRED_CONFS, SEQ_PUBLISH_RETRY_INTERVAL_MS, SEQ_TX_POLLING_INTERVAL_MS, SEQ_MAX_TX_PER_BLOCK, SEQ_MIN_TX_PER_BLOCK, ROLLUP_CONTRACT_ADDRESS, REGISTRY_CONTRACT_ADDRESS, INBOX_CONTRACT_ADDRESS, CONTRACT_DEPLOYMENT_EMITTER_ADDRESS, } = process.env;
|
|
7
7
|
const publisherPrivateKey = `0x${SEQ_PUBLISHER_PRIVATE_KEY
|
|
8
8
|
? SEQ_PUBLISHER_PRIVATE_KEY.replace('0x', '')
|
|
9
9
|
: '0000000000000000000000000000000000000000000000000000000000000000'}`;
|
|
10
|
+
// Populate the relevant addresses for use by the sequencer
|
|
11
|
+
const addresses = {
|
|
12
|
+
rollupAddress: ROLLUP_CONTRACT_ADDRESS ? EthAddress.fromString(ROLLUP_CONTRACT_ADDRESS) : EthAddress.ZERO,
|
|
13
|
+
registryAddress: REGISTRY_CONTRACT_ADDRESS ? EthAddress.fromString(REGISTRY_CONTRACT_ADDRESS) : EthAddress.ZERO,
|
|
14
|
+
inboxAddress: INBOX_CONTRACT_ADDRESS ? EthAddress.fromString(INBOX_CONTRACT_ADDRESS) : EthAddress.ZERO,
|
|
15
|
+
outboxAddress: EthAddress.ZERO,
|
|
16
|
+
contractDeploymentEmitterAddress: CONTRACT_DEPLOYMENT_EMITTER_ADDRESS
|
|
17
|
+
? EthAddress.fromString(CONTRACT_DEPLOYMENT_EMITTER_ADDRESS)
|
|
18
|
+
: EthAddress.ZERO,
|
|
19
|
+
decoderHelperAddress: EthAddress.ZERO,
|
|
20
|
+
};
|
|
10
21
|
return {
|
|
11
22
|
rpcUrl: ETHEREUM_HOST ? ETHEREUM_HOST : '',
|
|
12
23
|
chainId: CHAIN_ID ? +CHAIN_ID : 31337,
|
|
@@ -15,14 +26,10 @@ export function getConfigEnvVars() {
|
|
|
15
26
|
requiredConfirmations: SEQ_REQUIRED_CONFS ? +SEQ_REQUIRED_CONFS : 1,
|
|
16
27
|
l1BlockPublishRetryIntervalMS: SEQ_PUBLISH_RETRY_INTERVAL_MS ? +SEQ_PUBLISH_RETRY_INTERVAL_MS : 1000,
|
|
17
28
|
transactionPollingIntervalMS: SEQ_TX_POLLING_INTERVAL_MS ? +SEQ_TX_POLLING_INTERVAL_MS : 1000,
|
|
18
|
-
|
|
19
|
-
inboxContract: INBOX_CONTRACT_ADDRESS ? EthAddress.fromString(INBOX_CONTRACT_ADDRESS) : EthAddress.ZERO,
|
|
20
|
-
contractDeploymentEmitterContract: CONTRACT_DEPLOYMENT_EMITTER_ADDRESS
|
|
21
|
-
? EthAddress.fromString(CONTRACT_DEPLOYMENT_EMITTER_ADDRESS)
|
|
22
|
-
: EthAddress.ZERO,
|
|
29
|
+
l1Contracts: addresses,
|
|
23
30
|
publisherPrivateKey,
|
|
24
31
|
maxTxsPerBlock: SEQ_MAX_TX_PER_BLOCK ? +SEQ_MAX_TX_PER_BLOCK : 32,
|
|
25
32
|
minTxsPerBlock: SEQ_MIN_TX_PER_BLOCK ? +SEQ_MIN_TX_PER_BLOCK : 1,
|
|
26
33
|
};
|
|
27
34
|
}
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFXM0Q7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCO0lBQzlCLE1BQU0sRUFDSix5QkFBeUIsRUFDekIsYUFBYSxFQUNiLFFBQVEsRUFDUixPQUFPLEVBQ1AsT0FBTyxFQUNQLGtCQUFrQixFQUNsQiw2QkFBNkIsRUFDN0IsMEJBQTBCLEVBQzFCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6QixzQkFBc0IsRUFDdEIsbUNBQW1DLEdBQ3BDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUVoQixNQUFNLG1CQUFtQixHQUFrQixLQUN6Qyx5QkFBeUI7UUFDdkIsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQzdDLENBQUMsQ0FBQyxrRUFDTixFQUFFLENBQUM7SUFDSCwyREFBMkQ7SUFDM0QsTUFBTSxTQUFTLEdBQXdCO1FBQ3JDLGFBQWEsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSTtRQUN6RyxlQUFlLEVBQUUseUJBQXlCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUk7UUFDL0csWUFBWSxFQUFFLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJO1FBQ3RHLGFBQWEsRUFBRSxVQUFVLENBQUMsSUFBSTtRQUM5QixnQ0FBZ0MsRUFBRSxtQ0FBbUM7WUFDbkUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsbUNBQW1DLENBQUM7WUFDNUQsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJO1FBQ25CLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxJQUFJO0tBQ3RDLENBQUM7SUFFRixPQUFPO1FBQ0wsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQzFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLO1FBQ3JDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sRUFBRSxPQUFPO1FBQ2YscUJBQXFCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsNkJBQTZCLEVBQUUsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLElBQUs7UUFDckcsNEJBQTRCLEVBQUUsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLElBQUs7UUFDOUYsV0FBVyxFQUFFLFNBQVM7UUFDdEIsbUJBQW1CO1FBQ25CLGNBQWMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNqRSxjQUFjLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakUsQ0FBQztBQUNKLENBQUMifQ==
|
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { L1ContractAddresses } from '@aztec/ethereum';
|
|
2
2
|
/**
|
|
3
3
|
* Configuration of the L1GlobalReader.
|
|
4
4
|
*/
|
|
5
5
|
export interface GlobalReaderConfig {
|
|
6
|
-
/**
|
|
7
|
-
* Rollup contract address.
|
|
8
|
-
*/
|
|
9
|
-
rollupContract: EthAddress;
|
|
10
6
|
/**
|
|
11
7
|
* The RPC Url of the ethereum host.
|
|
12
8
|
*/
|
|
@@ -15,5 +11,9 @@ export interface GlobalReaderConfig {
|
|
|
15
11
|
* The API key of the ethereum host.
|
|
16
12
|
*/
|
|
17
13
|
apiKey?: string;
|
|
14
|
+
/**
|
|
15
|
+
* The deployed l1 contract addresses
|
|
16
|
+
*/
|
|
17
|
+
l1Contracts: L1ContractAddresses;
|
|
18
18
|
}
|
|
19
19
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/global_variable_builder/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/global_variable_builder/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,WAAW,EAAE,mBAAmB,CAAC;CAClC"}
|
|
@@ -6,14 +6,14 @@ import { createPublicClient, getAddress, getContract, http, } from 'viem';
|
|
|
6
6
|
*/
|
|
7
7
|
export class ViemReader {
|
|
8
8
|
constructor(config) {
|
|
9
|
-
const { rpcUrl, apiKey,
|
|
9
|
+
const { rpcUrl, apiKey, l1Contracts } = config;
|
|
10
10
|
const chain = createEthereumChain(rpcUrl, apiKey);
|
|
11
11
|
this.publicClient = createPublicClient({
|
|
12
12
|
chain: chain.chainInfo,
|
|
13
13
|
transport: http(chain.rpcUrl),
|
|
14
14
|
});
|
|
15
15
|
this.rollupContract = getContract({
|
|
16
|
-
address: getAddress(
|
|
16
|
+
address: getAddress(l1Contracts.rollupAddress.toString()),
|
|
17
17
|
abi: RollupAbi,
|
|
18
18
|
publicClient: this.publicClient,
|
|
19
19
|
});
|
|
@@ -34,4 +34,4 @@ export class ViemReader {
|
|
|
34
34
|
return BigInt(await this.rollupContract.read.lastWarpedBlockTs());
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmllbS1yZWFkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2xvYmFsX3ZhcmlhYmxlX2J1aWxkZXIvdmllbS1yZWFkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWhELE9BQU8sRUFJTCxrQkFBa0IsRUFDbEIsVUFBVSxFQUNWLFdBQVcsRUFDWCxJQUFJLEdBQ0wsTUFBTSxNQUFNLENBQUM7QUFNZDs7R0FFRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBSXJCLFlBQVksTUFBMEI7UUFDcEMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBRS9DLE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVsRCxJQUFJLENBQUMsWUFBWSxHQUFHLGtCQUFrQixDQUFDO1lBQ3JDLEtBQUssRUFBRSxLQUFLLENBQUMsU0FBUztZQUN0QixTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7U0FDOUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUM7WUFDaEMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3pELEdBQUcsRUFBRSxTQUFTO1lBQ2QsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQ2hDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsZ0JBQWdCO1FBQzNCLE9BQU8sTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVU7UUFDckIsT0FBTyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFTSxLQUFLLENBQUMsVUFBVTtRQUNyQixPQUFPLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU0sS0FBSyxDQUFDLGdCQUFnQjtRQUMzQixPQUFPLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFTSxLQUFLLENBQUMsb0JBQW9CO1FBQy9CLE9BQU8sTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7Q0FDRiJ9
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { L1ContractAddresses } from '@aztec/ethereum';
|
|
2
2
|
/**
|
|
3
3
|
* The configuration of the rollup transaction publisher.
|
|
4
4
|
*/
|
|
5
|
-
export interface TxSenderConfig
|
|
5
|
+
export interface TxSenderConfig {
|
|
6
6
|
/**
|
|
7
7
|
* The private key to be used by the publisher.
|
|
8
8
|
*/
|
|
@@ -19,6 +19,10 @@ export interface TxSenderConfig extends L1Addresses {
|
|
|
19
19
|
* The number of confirmations required.
|
|
20
20
|
*/
|
|
21
21
|
requiredConfirmations: number;
|
|
22
|
+
/**
|
|
23
|
+
* The deployed l1 contract addresses
|
|
24
|
+
*/
|
|
25
|
+
l1Contracts: L1ContractAddresses;
|
|
22
26
|
}
|
|
23
27
|
/**
|
|
24
28
|
* Configuration of the L1Publisher.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/publisher/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/publisher/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,mBAAmB,EAAE,KAAK,MAAM,EAAE,CAAC;IAEnC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,qBAAqB,EAAE,MAAM,CAAC;IAE9B;;OAEG;IACH,WAAW,EAAE,mBAAmB,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,6BAA6B,EAAE,MAAM,CAAC;CACvC"}
|
|
@@ -2,6 +2,33 @@ import { PublisherConfig, TxSenderConfig } from './config.js';
|
|
|
2
2
|
import { L1Publisher } from './l1-publisher.js';
|
|
3
3
|
export { L1Publisher } from './l1-publisher.js';
|
|
4
4
|
export { PublisherConfig } from './config.js';
|
|
5
|
+
/** Stats logged for each L1 rollup publish tx.*/
|
|
6
|
+
export type L1PublishStats = {
|
|
7
|
+
/** Name of the event for metrics purposes */
|
|
8
|
+
eventName: 'rollup-published-to-l1';
|
|
9
|
+
/** Effective gas price of the tx. */
|
|
10
|
+
gasPrice: bigint;
|
|
11
|
+
/** Effective gas used in the tx. */
|
|
12
|
+
gasUsed: bigint;
|
|
13
|
+
/** Hash of the L1 tx. */
|
|
14
|
+
transactionHash: string;
|
|
15
|
+
/** Gas cost of the calldata. */
|
|
16
|
+
calldataGas: number;
|
|
17
|
+
/** Size in bytes of the calldata. */
|
|
18
|
+
calldataSize: number;
|
|
19
|
+
/** Number of txs in the L2 block. */
|
|
20
|
+
txCount: number;
|
|
21
|
+
/** Number of the L2 block. */
|
|
22
|
+
blockNumber: number;
|
|
23
|
+
/** Number of encrypted logs. */
|
|
24
|
+
encryptedLogCount: number;
|
|
25
|
+
/** Number of unencrypted logs. */
|
|
26
|
+
unencryptedLogCount: number;
|
|
27
|
+
/** Serialised size of encrypted logs. */
|
|
28
|
+
encryptedLogSize: number;
|
|
29
|
+
/** Serialised size of unencrypted logs. */
|
|
30
|
+
unencryptedLogSize: number;
|
|
31
|
+
};
|
|
5
32
|
/**
|
|
6
33
|
* Returns a new instance of the L1Publisher.
|
|
7
34
|
* @param config - Configuration to initialize the new instance.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/publisher/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,cAAc,GAAG,WAAW,CAEpF"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/publisher/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,iDAAiD;AACjD,MAAM,MAAM,cAAc,GAAG;IAC3B,6CAA6C;IAC7C,SAAS,EAAE,wBAAwB,CAAC;IACpC,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kCAAkC;IAClC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,yCAAyC;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,cAAc,GAAG,WAAW,CAEpF"}
|
package/dest/publisher/index.js
CHANGED
|
@@ -8,4 +8,4 @@ export { L1Publisher } from './l1-publisher.js';
|
|
|
8
8
|
export function getL1Publisher(config) {
|
|
9
9
|
return new L1Publisher(new ViemTxSender(config), config);
|
|
10
10
|
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGlzaGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBK0JoRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQXdDO0lBQ3JFLE9BQU8sSUFBSSxXQUFXLENBQUMsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDM0QsQ0FBQyJ9
|
|
@@ -2,18 +2,29 @@
|
|
|
2
2
|
import { ExtendedContractData, L2Block } from '@aztec/types';
|
|
3
3
|
import { L2BlockReceiver } from '../receiver.js';
|
|
4
4
|
import { PublisherConfig } from './config.js';
|
|
5
|
+
/**
|
|
6
|
+
* Stats for a sent transaction.
|
|
7
|
+
*/
|
|
8
|
+
export type TransactionStats = {
|
|
9
|
+
/** Hash of the transaction. */
|
|
10
|
+
transactionHash: string;
|
|
11
|
+
/** Size in bytes of the tx calldata */
|
|
12
|
+
calldataSize: number;
|
|
13
|
+
/** Gas required to pay for the calldata inclusion (depends on size and number of zeros) */
|
|
14
|
+
calldataGas: number;
|
|
15
|
+
};
|
|
5
16
|
/**
|
|
6
17
|
* Minimal information from a tx receipt returned by an L1PublisherTxSender.
|
|
7
18
|
*/
|
|
8
19
|
export type MinimalTransactionReceipt = {
|
|
9
|
-
/**
|
|
10
|
-
* True if the tx was successful, false if reverted.
|
|
11
|
-
*/
|
|
20
|
+
/** True if the tx was successful, false if reverted. */
|
|
12
21
|
status: boolean;
|
|
13
|
-
/**
|
|
14
|
-
* Hash of the transaction.
|
|
15
|
-
*/
|
|
22
|
+
/** Hash of the transaction. */
|
|
16
23
|
transactionHash: string;
|
|
24
|
+
/** Effective gas used by the tx */
|
|
25
|
+
gasUsed: bigint;
|
|
26
|
+
/** Effective gas price paid by the tx */
|
|
27
|
+
gasPrice: bigint;
|
|
17
28
|
};
|
|
18
29
|
/**
|
|
19
30
|
* Pushes txs to the L1 chain and waits for their completion.
|
|
@@ -33,10 +44,7 @@ export interface L1PublisherTxSender {
|
|
|
33
44
|
* @param publicKeys - The public keys of the deployed contract
|
|
34
45
|
* @param newExtendedContractData - Data to publish.
|
|
35
46
|
* @returns The hash of the mined tx.
|
|
36
|
-
* @remarks Partial addresses, public keys and contract data has to be in the same order.
|
|
37
|
-
* @remarks See the link bellow for more info on partial address and public key:
|
|
38
|
-
* https://github.com/AztecProtocol/aztec-packages/blob/master/docs/docs/concepts/foundation/accounts/keys.md#addresses-partial-addresses-and-public-keys
|
|
39
|
-
* TODO: replace the link above with the link to deployed docs
|
|
47
|
+
* @remarks Partial addresses, public keys and contract data has to be in the same order. Read more {@link https://docs.aztec.network/concepts/foundation/accounts/keys#addresses-partial-addresses-and-public-keys | here}.
|
|
40
48
|
*/
|
|
41
49
|
sendEmitContractDeploymentTx(l2BlockNum: number, l2BlockHash: Buffer, newExtendedContractData: ExtendedContractData[]): Promise<(string | undefined)[]>;
|
|
42
50
|
/**
|
|
@@ -45,6 +53,11 @@ export interface L1PublisherTxSender {
|
|
|
45
53
|
* @returns Undefined if the tx hasn't been mined yet, the receipt otherwise.
|
|
46
54
|
*/
|
|
47
55
|
getTransactionReceipt(txHash: string): Promise<MinimalTransactionReceipt | undefined>;
|
|
56
|
+
/**
|
|
57
|
+
* Returns info on a tx by calling eth_getTransaction.
|
|
58
|
+
* @param txHash - Hash of the tx to look for.
|
|
59
|
+
*/
|
|
60
|
+
getTransactionStats(txHash: string): Promise<TransactionStats | undefined>;
|
|
48
61
|
}
|
|
49
62
|
/**
|
|
50
63
|
* Encoded block data and proof ready to be pushed to the L1 contract.
|
|
@@ -92,9 +105,11 @@ export declare class L1Publisher implements L2BlockReceiver {
|
|
|
92
105
|
* Calling `interrupt` will cause any in progress call to `publishRollup` to return `false` asap.
|
|
93
106
|
* Be warned, the call may return false even if the tx subsequently gets successfully mined.
|
|
94
107
|
* In practice this shouldn't matter, as we'll only ever be calling `interrupt` when we know it's going to fail.
|
|
95
|
-
* A call to `
|
|
108
|
+
* A call to `restart` is required before you can continue publishing.
|
|
96
109
|
*/
|
|
97
110
|
interrupt(): void;
|
|
111
|
+
/** Restarts the publisher after calling `interrupt`. */
|
|
112
|
+
restart(): void;
|
|
98
113
|
private checkFeeDistributorBalance;
|
|
99
114
|
private checkNextL2BlockNum;
|
|
100
115
|
private sendProcessTx;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"l1-publisher.d.ts","sourceRoot":"","sources":["../../src/publisher/l1-publisher.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"l1-publisher.d.ts","sourceRoot":"","sources":["../../src/publisher/l1-publisher.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAI7D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,+BAA+B;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,uCAAuC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,4FAA4F;IAC5F,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,wDAAwD;IACxD,MAAM,EAAE,OAAO,CAAC;IAChB,+BAA+B;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,aAAa,CAAC,WAAW,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAEvE;;;;;;;;;OASG;IACH,4BAA4B,CAC1B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,uBAAuB,EAAE,oBAAoB,EAAE,GAC9C,OAAO,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IAEnC;;;;OAIG;IACH,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC,CAAC;IAEtF;;;OAGG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;CAC5E;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAYF;;;;;;;GAOG;AACH,qBAAa,WAAY,YAAW,eAAe;IAMrC,OAAO,CAAC,QAAQ;IAL5B,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,GAAG,CAAkD;gBAEzC,QAAQ,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,eAAe;IAI3E;;;;OAIG;IACU,cAAc,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IA4CnE;;;;;;OAMG;IACU,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,oBAAoB,EAAE;IAoCjH;;;;;OAKG;IACI,SAAS;IAKhB,wDAAwD;IACjD,OAAO;YAOA,0BAA0B;IAMxC,OAAO,CAAC,mBAAmB;YAIb,aAAa;YAWb,yBAAyB;YAezB,qBAAqB;cAWnB,kBAAkB;CAGnC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
2
2
|
import { InterruptableSleep } from '@aztec/foundation/sleep';
|
|
3
|
+
import pick from 'lodash.pick';
|
|
3
4
|
/**
|
|
4
5
|
* Helper function to filter out undefined items from an array.
|
|
5
6
|
* Also asserts the resulting array is of type <T>.
|
|
@@ -46,8 +47,17 @@ export class L1Publisher {
|
|
|
46
47
|
if (!receipt)
|
|
47
48
|
break;
|
|
48
49
|
// Tx was mined successfully
|
|
49
|
-
if (receipt.status)
|
|
50
|
+
if (receipt.status) {
|
|
51
|
+
const tx = await this.txSender.getTransactionStats(txHash);
|
|
52
|
+
const stats = {
|
|
53
|
+
...pick(receipt, 'gasPrice', 'gasUsed', 'transactionHash'),
|
|
54
|
+
...pick(tx, 'calldataGas', 'calldataSize'),
|
|
55
|
+
...l2BlockData.getStats(),
|
|
56
|
+
eventName: 'rollup-published-to-l1',
|
|
57
|
+
};
|
|
58
|
+
this.log.info(`Published L2 block to L1 rollup contract`, stats);
|
|
50
59
|
return true;
|
|
60
|
+
}
|
|
51
61
|
// Check if someone else incremented the block number
|
|
52
62
|
if (!(await this.checkNextL2BlockNum(l2BlockData.number))) {
|
|
53
63
|
this.log('Publish failed. Contract changed underfoot.');
|
|
@@ -99,12 +109,16 @@ export class L1Publisher {
|
|
|
99
109
|
* Calling `interrupt` will cause any in progress call to `publishRollup` to return `false` asap.
|
|
100
110
|
* Be warned, the call may return false even if the tx subsequently gets successfully mined.
|
|
101
111
|
* In practice this shouldn't matter, as we'll only ever be calling `interrupt` when we know it's going to fail.
|
|
102
|
-
* A call to `
|
|
112
|
+
* A call to `restart` is required before you can continue publishing.
|
|
103
113
|
*/
|
|
104
114
|
interrupt() {
|
|
105
115
|
this.interrupted = true;
|
|
106
116
|
this.interruptableSleep.interrupt();
|
|
107
117
|
}
|
|
118
|
+
/** Restarts the publisher after calling `interrupt`. */
|
|
119
|
+
restart() {
|
|
120
|
+
this.interrupted = false;
|
|
121
|
+
}
|
|
108
122
|
// TODO: Check fee distributor has at least 0.5 ETH.
|
|
109
123
|
// Related to https://github.com/AztecProtocol/aztec-packages/issues/1588
|
|
110
124
|
// eslint-disable-next-line require-await
|
|
@@ -122,7 +136,7 @@ export class L1Publisher {
|
|
|
122
136
|
return await this.txSender.sendProcessTx(encodedData);
|
|
123
137
|
}
|
|
124
138
|
catch (err) {
|
|
125
|
-
this.log(`
|
|
139
|
+
this.log.error(`Rollup publish failed`, err);
|
|
126
140
|
return undefined;
|
|
127
141
|
}
|
|
128
142
|
}
|
|
@@ -153,4 +167,4 @@ export class L1Publisher {
|
|
|
153
167
|
await this.interruptableSleep.sleep(this.sleepTimeMs);
|
|
154
168
|
}
|
|
155
169
|
}
|
|
156
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDEtcHVibGlzaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1Ymxpc2hlci9sMS1wdWJsaXNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHN0QsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBdUYvQjs7Ozs7R0FLRztBQUNILFNBQVMsY0FBYyxDQUFJLElBQW1CO0lBQzVDLE9BQU8sSUFBSSxLQUFLLFNBQVMsQ0FBQztBQUM1QixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBTyxXQUFXO0lBTXRCLFlBQW9CLFFBQTZCLEVBQUUsTUFBd0I7UUFBdkQsYUFBUSxHQUFSLFFBQVEsQ0FBcUI7UUFMekMsdUJBQWtCLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBRTlDLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLFFBQUcsR0FBRyxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBRzNELElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxFQUFFLDZCQUE2QixJQUFJLEtBQU0sQ0FBQztJQUNyRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxjQUFjLENBQUMsV0FBb0I7UUFDOUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixNQUFNLE1BQU0sR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFFdkQsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDeEIsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxFQUFFO2dCQUM5QyxJQUFJLENBQUMsR0FBRyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7Z0JBQ3BFLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQ2hDLFNBQVM7YUFDVjtZQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsTUFBTTtnQkFBRSxNQUFNO1lBRW5CLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxPQUFPO2dCQUFFLE1BQU07WUFFcEIsNEJBQTRCO1lBQzVCLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDbEIsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMzRCxNQUFNLEtBQUssR0FBbUI7b0JBQzVCLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixDQUFDO29CQUMxRCxHQUFHLElBQUksQ0FBQyxFQUFHLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQztvQkFDM0MsR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFO29CQUN6QixTQUFTLEVBQUUsd0JBQXdCO2lCQUNwQyxDQUFDO2dCQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNqRSxPQUFPLElBQUksQ0FBQzthQUNiO1lBRUQscURBQXFEO1lBQ3JELElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO2dCQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7Z0JBQ3hELE1BQU07YUFDUDtZQUVELElBQUksQ0FBQyxHQUFHLENBQUMsOEJBQThCLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDakM7UUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLDREQUE0RCxDQUFDLENBQUM7UUFDdkUsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksS0FBSyxDQUFDLHNCQUFzQixDQUFDLFVBQWtCLEVBQUUsV0FBbUIsRUFBRSxZQUFvQztRQUMvRyxJQUFJLGFBQWEsR0FBMkIsRUFBRSxDQUFDO1FBQy9DLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUMsRUFBRTtnQkFDOUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO2dCQUNwRSxNQUFNLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUNoQyxTQUFTO2FBQ1Y7WUFFRCxNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUNoRSxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3BGLElBQUksQ0FBQyxRQUFRO2dCQUFFLE1BQU07WUFDckIsd0JBQXdCO1lBQ3hCLGFBQWEsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXBELE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDaEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDbEYsQ0FBQztZQUNGLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTTtnQkFBRSxNQUFNO1lBRTdCLGtDQUFrQztZQUNsQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssWUFBWSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUUzRixJQUFJLENBQUMsR0FBRyxDQUNOLDhCQUE4QixRQUFRO2lCQUNuQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7aUJBQ3ZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUM7aUJBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUNmLENBQUM7WUFDRixNQUFNLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQ2pDO1FBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO1FBQzlFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksU0FBUztRQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsd0RBQXdEO0lBQ2pELE9BQU87UUFDWixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQsb0RBQW9EO0lBQ3BELHlFQUF5RTtJQUN6RSx5Q0FBeUM7SUFDakMsS0FBSyxDQUFDLDBCQUEwQjtRQUN0QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCw4REFBOEQ7SUFDOUQseUVBQXlFO0lBQ2pFLG1CQUFtQixDQUFDLGFBQXFCO1FBQy9DLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU8sS0FBSyxDQUFDLGFBQWEsQ0FBQyxXQUEwQjtRQUNwRCxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUN4QixJQUFJO2dCQUNGLE9BQU8sTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUN2RDtZQUFDLE9BQU8sR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QyxPQUFPLFNBQVMsQ0FBQzthQUNsQjtTQUNGO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyx5QkFBeUIsQ0FDckMsVUFBa0IsRUFDbEIsV0FBbUIsRUFDbkIsdUJBQStDO1FBRS9DLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3hCLElBQUk7Z0JBQ0YsT0FBTyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsNEJBQTRCLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO2FBQzNHO1lBQUMsT0FBTyxHQUFHLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsbUNBQW1DLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3pELE1BQU0sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7YUFDakM7U0FDRjtJQUNILENBQUM7SUFFTyxLQUFLLENBQUMscUJBQXFCLENBQUMsTUFBYztRQUNoRCxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUN4QixJQUFJO2dCQUNGLE9BQU8sTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQzFEO1lBQUMsT0FBTyxHQUFHLEVBQUU7Z0JBQ1osa0RBQWtEO2dCQUNsRCxNQUFNLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQ2pDO1NBQ0Y7SUFDSCxDQUFDO0lBRVMsS0FBSyxDQUFDLGtCQUFrQjtRQUNoQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hELENBQUM7Q0FDRiJ9
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
2
|
import { ExtendedContractData } from '@aztec/types';
|
|
3
3
|
import { TxSenderConfig } from './config.js';
|
|
4
|
-
import { L1PublisherTxSender, MinimalTransactionReceipt, L1ProcessArgs as ProcessTxArgs } from './l1-publisher.js';
|
|
4
|
+
import { L1PublisherTxSender, MinimalTransactionReceipt, L1ProcessArgs as ProcessTxArgs, TransactionStats } from './l1-publisher.js';
|
|
5
5
|
/**
|
|
6
6
|
* Pushes transactions to the L1 rollup contract using viem.
|
|
7
7
|
*/
|
|
@@ -12,6 +12,7 @@ export declare class ViemTxSender implements L1PublisherTxSender {
|
|
|
12
12
|
private publicClient;
|
|
13
13
|
private account;
|
|
14
14
|
constructor(config: TxSenderConfig);
|
|
15
|
+
getTransactionStats(txHash: string): Promise<TransactionStats | undefined>;
|
|
15
16
|
/**
|
|
16
17
|
* Returns a tx receipt if the tx has been mined.
|
|
17
18
|
* @param txHash - Hash of the tx to look for.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viem-tx-sender.d.ts","sourceRoot":"","sources":["../../src/publisher/viem-tx-sender.ts"],"names":[],"mappings":";AAGA,OAAO,EAAsB,oBAAoB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"viem-tx-sender.d.ts","sourceRoot":"","sources":["../../src/publisher/viem-tx-sender.ts"],"names":[],"mappings":";AAGA,OAAO,EAAsB,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAkBxE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,aAAa,IAAI,aAAa,EAC9B,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,qBAAa,YAAa,YAAW,mBAAmB;IACtD,OAAO,CAAC,cAAc,CAIpB;IACF,OAAO,CAAC,iCAAiC,CAIvC;IAEF,OAAO,CAAC,GAAG,CAAuD;IAClE,OAAO,CAAC,YAAY,CAA4C;IAChE,OAAO,CAAC,OAAO,CAAoB;gBAEvB,MAAM,EAAE,cAAc;IA6B5B,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAWhF;;;;OAIG;IACG,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC;IAkB3F;;;;OAIG;IACG,aAAa,CAAC,WAAW,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAa5E;;;;;;OAMG;IACG,4BAA4B,CAChC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,uBAAuB,EAAE,oBAAoB,EAAE,GAC9C,OAAO,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IA6BlC;;;;OAIG;IACH,OAAO,CAAC,QAAQ;CASjB"}
|
|
@@ -2,7 +2,7 @@ import { createEthereumChain } from '@aztec/ethereum';
|
|
|
2
2
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
3
3
|
import { ContractDeploymentEmitterAbi, RollupAbi } from '@aztec/l1-artifacts';
|
|
4
4
|
import { BLOB_SIZE_IN_BYTES } from '@aztec/types';
|
|
5
|
-
import { createPublicClient, createWalletClient, getAddress, getContract, http, } from 'viem';
|
|
5
|
+
import { createPublicClient, createWalletClient, getAddress, getContract, hexToBytes, http, } from 'viem';
|
|
6
6
|
import { privateKeyToAccount } from 'viem/accounts';
|
|
7
7
|
import * as chains from 'viem/chains';
|
|
8
8
|
/**
|
|
@@ -11,7 +11,7 @@ import * as chains from 'viem/chains';
|
|
|
11
11
|
export class ViemTxSender {
|
|
12
12
|
constructor(config) {
|
|
13
13
|
this.log = createDebugLogger('aztec:sequencer:viem-tx-sender');
|
|
14
|
-
const { rpcUrl, apiKey, publisherPrivateKey,
|
|
14
|
+
const { rpcUrl, apiKey, publisherPrivateKey, l1Contracts } = config;
|
|
15
15
|
const chain = createEthereumChain(rpcUrl, apiKey);
|
|
16
16
|
this.account = privateKeyToAccount(publisherPrivateKey);
|
|
17
17
|
const walletClient = createWalletClient({
|
|
@@ -24,18 +24,29 @@ export class ViemTxSender {
|
|
|
24
24
|
transport: http(chain.rpcUrl),
|
|
25
25
|
});
|
|
26
26
|
this.rollupContract = getContract({
|
|
27
|
-
address: getAddress(
|
|
27
|
+
address: getAddress(l1Contracts.rollupAddress.toString()),
|
|
28
28
|
abi: RollupAbi,
|
|
29
29
|
publicClient: this.publicClient,
|
|
30
30
|
walletClient,
|
|
31
31
|
});
|
|
32
32
|
this.contractDeploymentEmitterContract = getContract({
|
|
33
|
-
address: getAddress(
|
|
33
|
+
address: getAddress(l1Contracts.contractDeploymentEmitterAddress.toString()),
|
|
34
34
|
abi: ContractDeploymentEmitterAbi,
|
|
35
35
|
publicClient: this.publicClient,
|
|
36
36
|
walletClient,
|
|
37
37
|
});
|
|
38
38
|
}
|
|
39
|
+
async getTransactionStats(txHash) {
|
|
40
|
+
const tx = await this.publicClient.getTransaction({ hash: txHash });
|
|
41
|
+
if (!tx)
|
|
42
|
+
return undefined;
|
|
43
|
+
const calldata = hexToBytes(tx.input);
|
|
44
|
+
return {
|
|
45
|
+
transactionHash: tx.hash,
|
|
46
|
+
calldataSize: calldata.length,
|
|
47
|
+
calldataGas: getCalldataGasUsage(calldata),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
39
50
|
/**
|
|
40
51
|
* Returns a tx receipt if the tx has been mined.
|
|
41
52
|
* @param txHash - Hash of the tx to look for.
|
|
@@ -45,14 +56,15 @@ export class ViemTxSender {
|
|
|
45
56
|
const receipt = await this.publicClient.getTransactionReceipt({
|
|
46
57
|
hash: txHash,
|
|
47
58
|
});
|
|
48
|
-
// TODO: check for confirmations
|
|
49
59
|
if (receipt) {
|
|
50
60
|
return {
|
|
51
61
|
status: receipt.status === 'success',
|
|
52
62
|
transactionHash: txHash,
|
|
63
|
+
gasUsed: receipt.gasUsed,
|
|
64
|
+
gasPrice: receipt.effectiveGasPrice,
|
|
53
65
|
};
|
|
54
66
|
}
|
|
55
|
-
this.log(
|
|
67
|
+
this.log(`Receipt not found for tx hash ${txHash}`);
|
|
56
68
|
return undefined;
|
|
57
69
|
}
|
|
58
70
|
/**
|
|
@@ -118,4 +130,12 @@ export class ViemTxSender {
|
|
|
118
130
|
throw new Error(`Chain with id ${chainId} not found`);
|
|
119
131
|
}
|
|
120
132
|
}
|
|
121
|
-
|
|
133
|
+
/**
|
|
134
|
+
* Returns cost of calldata usage in Ethereum.
|
|
135
|
+
* @param data - Calldata.
|
|
136
|
+
* @returns 4 for each zero byte, 16 for each nonzero.
|
|
137
|
+
*/
|
|
138
|
+
function getCalldataGasUsage(data) {
|
|
139
|
+
return data.filter(byte => byte === 0).length * 4 + data.filter(byte => byte !== 0).length * 16;
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmllbS10eC1zZW5kZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGlzaGVyL3ZpZW0tdHgtc2VuZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQXdCLE1BQU0sY0FBYyxDQUFDO0FBRXhFLE9BQU8sRUFNTCxrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLFVBQVUsRUFDVixXQUFXLEVBQ1gsVUFBVSxFQUNWLElBQUksR0FDTCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBcUIsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxLQUFLLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFVdEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQWdCdkIsWUFBWSxNQUFzQjtRQUoxQixRQUFHLEdBQUcsaUJBQWlCLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUtoRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDcEUsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxPQUFPLEdBQUcsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN4RCxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQztZQUN0QyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsS0FBSyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQ3RCLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FB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
|
|
@@ -5,6 +5,7 @@ import { ContractDataSource, FunctionL2Logs, L1ToL2MessageSource, Tx } from '@az
|
|
|
5
5
|
import { MerkleTreeOperations } from '@aztec/world-state';
|
|
6
6
|
import { PublicProver } from '../prover/index.js';
|
|
7
7
|
import { PublicKernelCircuitSimulator } from '../simulator/index.js';
|
|
8
|
+
import { ContractsDataSourcePublicDB } from '../simulator/public_executor.js';
|
|
8
9
|
import { FailedTx, ProcessedTx } from './processed_tx.js';
|
|
9
10
|
/**
|
|
10
11
|
* Creates new instances of PublicProcessor given the provided merkle tree db and contract data source.
|
|
@@ -18,6 +19,7 @@ export declare class PublicProcessorFactory {
|
|
|
18
19
|
* Creates a new instance of a PublicProcessor.
|
|
19
20
|
* @param prevGlobalVariables - The global variables for the previous block, used to calculate the prev global variables hash.
|
|
20
21
|
* @param globalVariables - The global variables for the block being processed.
|
|
22
|
+
* @param newContracts - Provides access to contract bytecode for public executions.
|
|
21
23
|
* @returns A new instance of a PublicProcessor.
|
|
22
24
|
*/
|
|
23
25
|
create(prevGlobalVariables: GlobalVariables, globalVariables: GlobalVariables): Promise<PublicProcessor>;
|
|
@@ -31,11 +33,11 @@ export declare class PublicProcessor {
|
|
|
31
33
|
protected publicExecutor: PublicExecutor;
|
|
32
34
|
protected publicKernel: PublicKernelCircuitSimulator;
|
|
33
35
|
protected publicProver: PublicProver;
|
|
34
|
-
protected contractDataSource: ContractDataSource;
|
|
35
36
|
protected globalVariables: GlobalVariables;
|
|
36
37
|
protected blockData: HistoricBlockData;
|
|
38
|
+
protected publicContractsDB: ContractsDataSourcePublicDB;
|
|
37
39
|
private log;
|
|
38
|
-
constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, publicProver: PublicProver,
|
|
40
|
+
constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, publicProver: PublicProver, globalVariables: GlobalVariables, blockData: HistoricBlockData, publicContractsDB: ContractsDataSourcePublicDB, log?: import("@aztec/foundation/log").DebugLogger);
|
|
39
41
|
/**
|
|
40
42
|
* Run each tx through the public circuit and the public kernel circuit if needed.
|
|
41
43
|
* @param txs - Txs to process.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public_processor.d.ts","sourceRoot":"","sources":["../../src/sequencer/public_processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,qBAAqB,EACrB,cAAc,EAIf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAML,EAAE,EACF,eAAe,EACf,iBAAiB,EACjB,yBAAyB,EAIzB,qCAAqC,EAMrC,kBAAkB,EAClB,KAAK,EACL,cAAc,EACd,mBAAmB,EACnB,yBAAyB,EAIzB,wBAAwB,EAGzB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,KAAK,EAAuB,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,mBAAmB,EAAgB,EAAE,EAAE,MAAM,cAAc,CAAC;AACzG,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAI1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,4BAA4B,
|
|
1
|
+
{"version":3,"file":"public_processor.d.ts","sourceRoot":"","sources":["../../src/sequencer/public_processor.ts"],"names":[],"mappings":"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"}
|