@aztec/ethereum 0.0.0-test.1 → 0.0.1-commit.b655e406
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/account.d.ts +2 -0
- package/dest/account.d.ts.map +1 -0
- package/dest/account.js +4 -0
- package/dest/client.d.ts +5 -3
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +16 -2
- package/dest/config.d.ts +107 -16
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +456 -22
- package/dest/contracts/empire_base.d.ts +21 -6
- package/dest/contracts/empire_base.d.ts.map +1 -1
- package/dest/contracts/empire_base.js +75 -2
- package/dest/contracts/empire_slashing_proposer.d.ts +65 -0
- package/dest/contracts/empire_slashing_proposer.d.ts.map +1 -0
- package/dest/contracts/empire_slashing_proposer.js +194 -0
- package/dest/contracts/errors.d.ts +7 -0
- package/dest/contracts/errors.d.ts.map +1 -0
- package/dest/contracts/errors.js +12 -0
- package/dest/contracts/fee_asset_handler.d.ts +19 -0
- package/dest/contracts/fee_asset_handler.d.ts.map +1 -0
- package/dest/contracts/fee_asset_handler.js +57 -0
- package/dest/contracts/fee_juice.d.ts +5 -6
- package/dest/contracts/fee_juice.d.ts.map +1 -1
- package/dest/contracts/fee_juice.js +27 -20
- package/dest/contracts/governance.d.ts +36 -25
- package/dest/contracts/governance.d.ts.map +1 -1
- package/dest/contracts/governance.js +87 -84
- package/dest/contracts/governance_proposer.d.ts +13 -11
- package/dest/contracts/governance_proposer.d.ts.map +1 -1
- package/dest/contracts/governance_proposer.js +32 -18
- package/dest/contracts/gse.d.ts +32 -0
- package/dest/contracts/gse.d.ts.map +1 -0
- package/dest/contracts/gse.js +72 -0
- package/dest/contracts/inbox.d.ts +26 -0
- package/dest/contracts/inbox.d.ts.map +1 -0
- package/dest/contracts/inbox.js +45 -0
- package/dest/contracts/index.d.ts +8 -2
- package/dest/contracts/index.d.ts.map +1 -1
- package/dest/contracts/index.js +8 -2
- package/dest/contracts/multicall.d.ts +21 -0
- package/dest/contracts/multicall.d.ts.map +1 -0
- package/dest/contracts/multicall.js +156 -0
- package/dest/contracts/registry.d.ts +9 -4
- package/dest/contracts/registry.d.ts.map +1 -1
- package/dest/contracts/registry.js +44 -16
- package/dest/contracts/rollup.d.ts +202 -29
- package/dest/contracts/rollup.d.ts.map +1 -1
- package/dest/contracts/rollup.js +500 -55
- package/dest/contracts/slasher_contract.d.ts +44 -0
- package/dest/contracts/slasher_contract.d.ts.map +1 -0
- package/dest/contracts/slasher_contract.js +75 -0
- package/dest/contracts/tally_slashing_proposer.d.ts +138 -0
- package/dest/contracts/tally_slashing_proposer.d.ts.map +1 -0
- package/dest/contracts/tally_slashing_proposer.js +313 -0
- package/dest/contracts/utils.d.ts +3 -0
- package/dest/contracts/utils.d.ts.map +1 -0
- package/dest/contracts/utils.js +11 -0
- package/dest/deploy_l1_contracts.d.ts +128 -21112
- package/dest/deploy_l1_contracts.d.ts.map +1 -1
- package/dest/deploy_l1_contracts.js +1204 -418
- package/dest/eth-signer/eth-signer.d.ts +21 -0
- package/dest/eth-signer/eth-signer.d.ts.map +1 -0
- package/dest/eth-signer/eth-signer.js +5 -0
- package/dest/eth-signer/index.d.ts +2 -0
- package/dest/eth-signer/index.d.ts.map +1 -0
- package/dest/eth-signer/index.js +1 -0
- package/dest/index.d.ts +6 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +6 -2
- package/dest/l1_artifacts.d.ts +76184 -0
- package/dest/l1_artifacts.d.ts.map +1 -0
- package/dest/l1_artifacts.js +166 -0
- package/dest/l1_contract_addresses.d.ts +21 -1
- package/dest/l1_contract_addresses.d.ts.map +1 -1
- package/dest/l1_contract_addresses.js +22 -18
- package/dest/l1_reader.d.ts +1 -1
- package/dest/l1_reader.d.ts.map +1 -1
- package/dest/l1_reader.js +8 -8
- package/dest/l1_tx_utils/config.d.ts +59 -0
- package/dest/l1_tx_utils/config.d.ts.map +1 -0
- package/dest/l1_tx_utils/config.js +73 -0
- package/dest/l1_tx_utils/constants.d.ts +6 -0
- package/dest/l1_tx_utils/constants.d.ts.map +1 -0
- package/dest/l1_tx_utils/constants.js +14 -0
- package/dest/l1_tx_utils/factory.d.ts +24 -0
- package/dest/l1_tx_utils/factory.d.ts.map +1 -0
- package/dest/l1_tx_utils/factory.js +12 -0
- package/dest/l1_tx_utils/index.d.ts +10 -0
- package/dest/l1_tx_utils/index.d.ts.map +1 -0
- package/dest/l1_tx_utils/index.js +10 -0
- package/dest/l1_tx_utils/interfaces.d.ts +76 -0
- package/dest/l1_tx_utils/interfaces.d.ts.map +1 -0
- package/dest/l1_tx_utils/interfaces.js +4 -0
- package/dest/l1_tx_utils/l1_tx_utils.d.ts +95 -0
- package/dest/l1_tx_utils/l1_tx_utils.d.ts.map +1 -0
- package/dest/l1_tx_utils/l1_tx_utils.js +610 -0
- package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts +26 -0
- package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts.map +1 -0
- package/dest/l1_tx_utils/l1_tx_utils_with_blobs.js +26 -0
- package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts +94 -0
- package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts.map +1 -0
- package/dest/l1_tx_utils/readonly_l1_tx_utils.js +431 -0
- package/dest/l1_tx_utils/signer.d.ts +4 -0
- package/dest/l1_tx_utils/signer.d.ts.map +1 -0
- package/dest/l1_tx_utils/signer.js +16 -0
- package/dest/l1_tx_utils/types.d.ts +67 -0
- package/dest/l1_tx_utils/types.d.ts.map +1 -0
- package/dest/l1_tx_utils/types.js +26 -0
- package/dest/l1_tx_utils/utils.d.ts +4 -0
- package/dest/l1_tx_utils/utils.d.ts.map +1 -0
- package/dest/l1_tx_utils/utils.js +14 -0
- package/dest/l1_types.d.ts +6 -0
- package/dest/l1_types.d.ts.map +1 -0
- package/dest/l1_types.js +1 -0
- package/dest/publisher_manager.d.ts +15 -0
- package/dest/publisher_manager.d.ts.map +1 -0
- package/dest/publisher_manager.js +88 -0
- package/dest/queries.d.ts +3 -1
- package/dest/queries.d.ts.map +1 -1
- package/dest/queries.js +51 -12
- package/dest/test/chain_monitor.d.ts +72 -0
- package/dest/test/chain_monitor.d.ts.map +1 -0
- package/dest/test/chain_monitor.js +216 -0
- package/dest/test/delayed_tx_utils.d.ts +7 -2
- package/dest/test/delayed_tx_utils.d.ts.map +1 -1
- package/dest/test/delayed_tx_utils.js +13 -6
- package/dest/{eth_cheat_codes.d.ts → test/eth_cheat_codes.d.ts} +87 -13
- package/dest/test/eth_cheat_codes.d.ts.map +1 -0
- package/dest/test/eth_cheat_codes.js +552 -0
- package/dest/test/eth_cheat_codes_with_state.d.ts +1 -1
- package/dest/test/eth_cheat_codes_with_state.d.ts.map +1 -1
- package/dest/test/eth_cheat_codes_with_state.js +1 -1
- package/dest/test/index.d.ts +3 -0
- package/dest/test/index.d.ts.map +1 -1
- package/dest/test/index.js +3 -0
- package/dest/test/rollup_cheat_codes.d.ts +86 -0
- package/dest/test/rollup_cheat_codes.d.ts.map +1 -0
- package/dest/test/rollup_cheat_codes.js +268 -0
- package/dest/test/start_anvil.d.ts +5 -0
- package/dest/test/start_anvil.d.ts.map +1 -1
- package/dest/test/start_anvil.js +15 -7
- package/dest/test/tx_delayer.d.ts +17 -6
- package/dest/test/tx_delayer.d.ts.map +1 -1
- package/dest/test/tx_delayer.js +95 -19
- package/dest/test/upgrade_utils.d.ts +5 -4
- package/dest/test/upgrade_utils.d.ts.map +1 -1
- package/dest/test/upgrade_utils.js +23 -16
- package/dest/types.d.ts +6 -7
- package/dest/types.d.ts.map +1 -1
- package/dest/types.js +3 -1
- package/dest/utils.d.ts +1 -0
- package/dest/utils.d.ts.map +1 -1
- package/dest/utils.js +43 -88
- package/dest/zkPassportVerifierAddress.d.ts +15 -0
- package/dest/zkPassportVerifierAddress.d.ts.map +1 -0
- package/dest/zkPassportVerifierAddress.js +11 -0
- package/package.json +24 -16
- package/src/account.ts +5 -0
- package/src/client.ts +42 -4
- package/src/config.ts +584 -31
- package/src/contracts/empire_base.ts +75 -6
- package/src/contracts/empire_slashing_proposer.ts +259 -0
- package/src/contracts/errors.ts +13 -0
- package/src/contracts/fee_asset_handler.ts +63 -0
- package/src/contracts/fee_juice.ts +29 -15
- package/src/contracts/governance.ts +80 -77
- package/src/contracts/governance_proposer.ts +60 -24
- package/src/contracts/gse.ts +88 -0
- package/src/contracts/inbox.ts +63 -0
- package/src/contracts/index.ts +8 -2
- package/src/contracts/multicall.ts +155 -0
- package/src/contracts/registry.ts +51 -26
- package/src/contracts/rollup.ts +585 -56
- package/src/contracts/slasher_contract.ts +89 -0
- package/src/contracts/tally_slashing_proposer.ts +315 -0
- package/src/contracts/utils.ts +14 -0
- package/src/deploy_l1_contracts.ts +1467 -566
- package/src/eth-signer/eth-signer.ts +25 -0
- package/src/eth-signer/index.ts +1 -0
- package/src/index.ts +6 -2
- package/src/l1_artifacts.ts +254 -0
- package/src/l1_contract_addresses.ts +32 -19
- package/src/l1_reader.ts +9 -9
- package/src/l1_tx_utils/README.md +177 -0
- package/src/l1_tx_utils/config.ts +140 -0
- package/src/l1_tx_utils/constants.ts +18 -0
- package/src/l1_tx_utils/factory.ts +64 -0
- package/src/l1_tx_utils/index.ts +12 -0
- package/src/l1_tx_utils/interfaces.ts +86 -0
- package/src/l1_tx_utils/l1_tx_utils.ts +718 -0
- package/src/l1_tx_utils/l1_tx_utils_with_blobs.ts +77 -0
- package/src/l1_tx_utils/readonly_l1_tx_utils.ts +559 -0
- package/src/l1_tx_utils/signer.ts +28 -0
- package/src/l1_tx_utils/types.ts +85 -0
- package/src/l1_tx_utils/utils.ts +16 -0
- package/src/l1_types.ts +6 -0
- package/src/publisher_manager.ts +106 -0
- package/src/queries.ts +70 -15
- package/src/test/chain_monitor.ts +243 -0
- package/src/test/delayed_tx_utils.ts +34 -6
- package/src/test/eth_cheat_codes.ts +582 -0
- package/src/test/eth_cheat_codes_with_state.ts +1 -1
- package/src/test/index.ts +3 -0
- package/src/test/rollup_cheat_codes.ts +310 -0
- package/src/test/start_anvil.ts +20 -5
- package/src/test/tx_delayer.ts +127 -26
- package/src/test/upgrade_utils.ts +30 -21
- package/src/types.ts +10 -8
- package/src/utils.ts +49 -90
- package/src/zkPassportVerifierAddress.ts +15 -0
- package/dest/contracts/forwarder.d.ts +0 -24
- package/dest/contracts/forwarder.d.ts.map +0 -1
- package/dest/contracts/forwarder.js +0 -101
- package/dest/contracts/slashing_proposer.d.ts +0 -21
- package/dest/contracts/slashing_proposer.d.ts.map +0 -1
- package/dest/contracts/slashing_proposer.js +0 -47
- package/dest/eth_cheat_codes.d.ts.map +0 -1
- package/dest/eth_cheat_codes.js +0 -303
- package/dest/l1_tx_utils.d.ts +0 -192
- package/dest/l1_tx_utils.d.ts.map +0 -1
- package/dest/l1_tx_utils.js +0 -641
- package/dest/l1_tx_utils_with_blobs.d.ts +0 -12
- package/dest/l1_tx_utils_with_blobs.d.ts.map +0 -1
- package/dest/l1_tx_utils_with_blobs.js +0 -64
- package/src/contracts/forwarder.ts +0 -132
- package/src/contracts/slashing_proposer.ts +0 -51
- package/src/eth_cheat_codes.ts +0 -314
- package/src/l1_tx_utils.ts +0 -847
- package/src/l1_tx_utils_with_blobs.ts +0 -86
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Logger } from '@aztec/foundation/log';
|
|
2
|
+
import { type Hex } from 'viem';
|
|
3
|
+
import type { L1BlobInputs, L1TxConfig, L1TxRequest, L1TxUtils } from '../l1_tx_utils/index.js';
|
|
4
|
+
import type { ExtendedViemWalletClient } from '../types.js';
|
|
5
|
+
import { FormattedViemError } from '../utils.js';
|
|
6
|
+
export declare const MULTI_CALL_3_ADDRESS: "0xcA11bde05977b3631167028862bE2a173976CA11";
|
|
7
|
+
export declare class Multicall3 {
|
|
8
|
+
static forward(requests: L1TxRequest[], l1TxUtils: L1TxUtils, gasConfig: L1TxConfig | undefined, blobConfig: L1BlobInputs | undefined, rollupAddress: Hex, logger: Logger, opts?: {
|
|
9
|
+
revertOnFailure?: boolean;
|
|
10
|
+
}): Promise<FormattedViemError | {
|
|
11
|
+
receipt: import("viem").TransactionReceipt;
|
|
12
|
+
stats: import("../l1_tx_utils/types.js").TransactionStats | undefined;
|
|
13
|
+
errorMsg?: undefined;
|
|
14
|
+
} | {
|
|
15
|
+
receipt: import("viem").TransactionReceipt;
|
|
16
|
+
errorMsg: string | undefined;
|
|
17
|
+
stats?: undefined;
|
|
18
|
+
}>;
|
|
19
|
+
}
|
|
20
|
+
export declare function deployMulticall3(l1Client: ExtendedViemWalletClient, logger: Logger): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=multicall.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multicall.d.ts","sourceRoot":"","sources":["../../src/contracts/multicall.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAqC,KAAK,GAAG,EAAqC,MAAM,MAAM,CAAC;AAEtG,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAChG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAmB,MAAM,aAAa,CAAC;AAGlE,eAAO,MAAM,oBAAoB,EAAG,4CAAqD,CAAC;AAE1F,qBAAa,UAAU;WACR,OAAO,CAClB,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,UAAU,GAAG,SAAS,EACjC,UAAU,EAAE,YAAY,GAAG,SAAS,EACpC,aAAa,EAAE,GAAG,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAO;;;;;;;;;CAoG3C;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,iBA+BxF"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { toHex as toPaddedHex } from '@aztec/foundation/bigint-buffer';
|
|
2
|
+
import { TimeoutError } from '@aztec/foundation/error';
|
|
3
|
+
import { encodeFunctionData, multicall3Abi } from 'viem';
|
|
4
|
+
import { FormattedViemError, formatViemError } from '../utils.js';
|
|
5
|
+
import { RollupContract } from './rollup.js';
|
|
6
|
+
export const MULTI_CALL_3_ADDRESS = '0xcA11bde05977b3631167028862bE2a173976CA11';
|
|
7
|
+
export class Multicall3 {
|
|
8
|
+
static async forward(requests, l1TxUtils, gasConfig, blobConfig, rollupAddress, logger, opts = {}) {
|
|
9
|
+
requests = requests.filter((request)=>request.to !== null);
|
|
10
|
+
const args = requests.map((r)=>({
|
|
11
|
+
target: r.to,
|
|
12
|
+
callData: r.data,
|
|
13
|
+
allowFailure: !opts.revertOnFailure
|
|
14
|
+
}));
|
|
15
|
+
const forwarderFunctionData = {
|
|
16
|
+
abi: multicall3Abi,
|
|
17
|
+
functionName: 'aggregate3',
|
|
18
|
+
args: [
|
|
19
|
+
args
|
|
20
|
+
]
|
|
21
|
+
};
|
|
22
|
+
const encodedForwarderData = encodeFunctionData(forwarderFunctionData);
|
|
23
|
+
try {
|
|
24
|
+
const { receipt, state } = await l1TxUtils.sendAndMonitorTransaction({
|
|
25
|
+
to: MULTI_CALL_3_ADDRESS,
|
|
26
|
+
data: encodedForwarderData
|
|
27
|
+
}, gasConfig, blobConfig);
|
|
28
|
+
if (receipt.status === 'success') {
|
|
29
|
+
const stats = await l1TxUtils.getTransactionStats(receipt.transactionHash);
|
|
30
|
+
return {
|
|
31
|
+
receipt,
|
|
32
|
+
stats
|
|
33
|
+
};
|
|
34
|
+
} else {
|
|
35
|
+
logger.error('Forwarder transaction failed', undefined, {
|
|
36
|
+
receipt
|
|
37
|
+
});
|
|
38
|
+
const args = {
|
|
39
|
+
...forwarderFunctionData,
|
|
40
|
+
address: MULTI_CALL_3_ADDRESS
|
|
41
|
+
};
|
|
42
|
+
let errorMsg;
|
|
43
|
+
if (blobConfig) {
|
|
44
|
+
const maxFeePerBlobGas = blobConfig.maxFeePerBlobGas ?? state.gasPrice.maxFeePerBlobGas;
|
|
45
|
+
if (maxFeePerBlobGas === undefined) {
|
|
46
|
+
errorMsg = 'maxFeePerBlobGas is required to get the error message';
|
|
47
|
+
} else {
|
|
48
|
+
logger.debug('Trying to get error from reverted tx with blob config');
|
|
49
|
+
errorMsg = await l1TxUtils.tryGetErrorFromRevertedTx(encodedForwarderData, args, {
|
|
50
|
+
blobs: blobConfig.blobs,
|
|
51
|
+
kzg: blobConfig.kzg,
|
|
52
|
+
maxFeePerBlobGas
|
|
53
|
+
}, [
|
|
54
|
+
{
|
|
55
|
+
address: rollupAddress,
|
|
56
|
+
stateDiff: [
|
|
57
|
+
{
|
|
58
|
+
slot: toPaddedHex(RollupContract.checkBlobStorageSlot, true),
|
|
59
|
+
value: toPaddedHex(0n, true)
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
]);
|
|
64
|
+
}
|
|
65
|
+
} else {
|
|
66
|
+
logger.debug('Trying to get error from reverted tx without blob config');
|
|
67
|
+
errorMsg = await l1TxUtils.tryGetErrorFromRevertedTx(encodedForwarderData, args, undefined, []);
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
receipt,
|
|
71
|
+
errorMsg
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
} catch (err) {
|
|
75
|
+
if (err instanceof TimeoutError) {
|
|
76
|
+
throw err;
|
|
77
|
+
}
|
|
78
|
+
for (const request of requests){
|
|
79
|
+
logger.debug('Simulating request', {
|
|
80
|
+
request
|
|
81
|
+
});
|
|
82
|
+
const result = await l1TxUtils.simulate(request, undefined, [
|
|
83
|
+
{
|
|
84
|
+
address: rollupAddress,
|
|
85
|
+
stateDiff: [
|
|
86
|
+
{
|
|
87
|
+
slot: toPaddedHex(RollupContract.checkBlobStorageSlot, true),
|
|
88
|
+
value: toPaddedHex(0n, true)
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
]).catch((err)=>formatViemError(err, request.abi));
|
|
93
|
+
if (result instanceof FormattedViemError) {
|
|
94
|
+
logger.error('Found error in simulation', result, {
|
|
95
|
+
to: request.to ?? 'null',
|
|
96
|
+
data: request.data
|
|
97
|
+
});
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
logger.warn('Failed to get error from reverted tx', {
|
|
102
|
+
err
|
|
103
|
+
});
|
|
104
|
+
throw err;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
export async function deployMulticall3(l1Client, logger) {
|
|
109
|
+
const existing = await l1Client.getCode({
|
|
110
|
+
address: MULTI_CALL_3_ADDRESS
|
|
111
|
+
});
|
|
112
|
+
if (existing && existing !== '0x') {
|
|
113
|
+
logger.verbose('Multicall3 already deployed', {
|
|
114
|
+
address: MULTI_CALL_3_ADDRESS
|
|
115
|
+
});
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const deployer = '0x05f32b3cc3888453ff71b01135b34ff8e41263f2';
|
|
119
|
+
const sendEth = await l1Client.sendTransaction({
|
|
120
|
+
to: deployer,
|
|
121
|
+
value: 10n ** 17n
|
|
122
|
+
});
|
|
123
|
+
logger.info('Sent 0.1 ETH to deployer', {
|
|
124
|
+
deployer,
|
|
125
|
+
value: 10n ** 17n
|
|
126
|
+
});
|
|
127
|
+
const sendEthReceipt = await l1Client.waitForTransactionReceipt({
|
|
128
|
+
hash: sendEth
|
|
129
|
+
});
|
|
130
|
+
if (sendEthReceipt.status !== 'success') {
|
|
131
|
+
logger.error('Failed to send ETH to deployer', undefined, {
|
|
132
|
+
sendEthReceipt
|
|
133
|
+
});
|
|
134
|
+
throw new Error('Failed to send ETH to deployer');
|
|
135
|
+
} else {
|
|
136
|
+
logger.info('Sent 0.1 ETH to deployer', {
|
|
137
|
+
deployer,
|
|
138
|
+
value: 10n ** 17n
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
const tx = '0xf90f538085174876e800830f42408080b90f00608060405234801561001057600080fd5b50610ee0806100206000396000f3fe6080604052600436106100f35760003560e01c80634d2301cc1161008a578063a8b0574e11610059578063a8b0574e1461025a578063bce38bd714610275578063c3077fa914610288578063ee82ac5e1461029b57600080fd5b80634d2301cc146101ec57806372425d9d1461022157806382ad56cb1461023457806386d516e81461024757600080fd5b80633408e470116100c65780633408e47014610191578063399542e9146101a45780633e64a696146101c657806342cbb15c146101d957600080fd5b80630f28c97d146100f8578063174dea711461011a578063252dba421461013a57806327e86d6e1461015b575b600080fd5b34801561010457600080fd5b50425b6040519081526020015b60405180910390f35b61012d610128366004610a85565b6102ba565b6040516101119190610bbe565b61014d610148366004610a85565b6104ef565b604051610111929190610bd8565b34801561016757600080fd5b50437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0140610107565b34801561019d57600080fd5b5046610107565b6101b76101b2366004610c60565b610690565b60405161011193929190610cba565b3480156101d257600080fd5b5048610107565b3480156101e557600080fd5b5043610107565b3480156101f857600080fd5b50610107610207366004610ce2565b73ffffffffffffffffffffffffffffffffffffffff163190565b34801561022d57600080fd5b5044610107565b61012d610242366004610a85565b6106ab565b34801561025357600080fd5b5045610107565b34801561026657600080fd5b50604051418152602001610111565b61012d610283366004610c60565b61085a565b6101b7610296366004610a85565b610a1a565b3480156102a757600080fd5b506101076102b6366004610d18565b4090565b60606000828067ffffffffffffffff8111156102d8576102d8610d31565b60405190808252806020026020018201604052801561031e57816020015b6040805180820190915260008152606060208201528152602001906001900390816102f65790505b5092503660005b8281101561047757600085828151811061034157610341610d60565b6020026020010151905087878381811061035d5761035d610d60565b905060200281019061036f9190610d8f565b6040810135958601959093506103886020850185610ce2565b73ffffffffffffffffffffffffffffffffffffffff16816103ac6060870187610dcd565b6040516103ba929190610e32565b60006040518083038185875af1925050503d80600081146103f7576040519150601f19603f3d011682016040523d82523d6000602084013e6103fc565b606091505b50602080850191909152901515808452908501351761046d577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260846000fd5b5050600101610325565b508234146104e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d756c746963616c6c333a2076616c7565206d69736d6174636800000000000060448201526064015b60405180910390fd5b50505092915050565b436060828067ffffffffffffffff81111561050c5761050c610d31565b60405190808252806020026020018201604052801561053f57816020015b606081526020019060019003908161052a5790505b5091503660005b8281101561068657600087878381811061056257610562610d60565b90506020028101906105749190610e42565b92506105836020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff166105a66020850185610dcd565b6040516105b4929190610e32565b6000604051808303816000865af19150503d80600081146105f1576040519150601f19603f3d011682016040523d82523d6000602084013e6105f6565b606091505b5086848151811061060957610609610d60565b602090810291909101015290508061067d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104dd565b50600101610546565b5050509250929050565b43804060606106a086868661085a565b905093509350939050565b6060818067ffffffffffffffff8111156106c7576106c7610d31565b60405190808252806020026020018201604052801561070d57816020015b6040805180820190915260008152606060208201528152602001906001900390816106e55790505b5091503660005b828110156104e657600084828151811061073057610730610d60565b6020026020010151905086868381811061074c5761074c610d60565b905060200281019061075e9190610e76565b925061076d6020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff166107906040850185610dcd565b60405161079e929190610e32565b6000604051808303816000865af19150503d80600081146107db576040519150601f19603f3d011682016040523d82523d6000602084013e6107e0565b606091505b506020808401919091529015158083529084013517610851577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260646000fd5b50600101610714565b6060818067ffffffffffffffff81111561087657610876610d31565b6040519080825280602002602001820160405280156108bc57816020015b6040805180820190915260008152606060208201528152602001906001900390816108945790505b5091503660005b82811015610a105760008482815181106108df576108df610d60565b602002602001015190508686838181106108fb576108fb610d60565b905060200281019061090d9190610e42565b925061091c6020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff1661093f6020850185610dcd565b60405161094d929190610e32565b6000604051808303816000865af19150503d806000811461098a576040519150601f19603f3d011682016040523d82523d6000602084013e61098f565b606091505b506020830152151581528715610a07578051610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104dd565b506001016108c3565b5050509392505050565b6000806060610a2b60018686610690565b919790965090945092505050565b60008083601f840112610a4b57600080fd5b50813567ffffffffffffffff811115610a6357600080fd5b6020830191508360208260051b8501011115610a7e57600080fd5b9250929050565b60008060208385031215610a9857600080fd5b823567ffffffffffffffff811115610aaf57600080fd5b610abb85828601610a39565b90969095509350505050565b6000815180845260005b81811015610aed57602081850181015186830182015201610ad1565b81811115610aff576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b84811015610bb1578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001895281518051151584528401516040858501819052610b9d81860183610ac7565b9a86019a9450505090830190600101610b4f565b5090979650505050505050565b602081526000610bd16020830184610b32565b9392505050565b600060408201848352602060408185015281855180845260608601915060608160051b870101935082870160005b82811015610c52577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018452610c40868351610ac7565b95509284019290840190600101610c06565b509398975050505050505050565b600080600060408486031215610c7557600080fd5b83358015158114610c8557600080fd5b9250602084013567ffffffffffffffff811115610ca157600080fd5b610cad86828701610a39565b9497909650939450505050565b838152826020820152606060408201526000610cd96060830184610b32565b95945050505050565b600060208284031215610cf457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610bd157600080fd5b600060208284031215610d2a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112610dc357600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610e0257600080fd5b83018035915067ffffffffffffffff821115610e1d57600080fd5b602001915036819003821315610a7e57600080fd5b8183823760009101908152919050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112610dc357600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112610dc357600080fdfea2646970667358221220bb2b5c71a328032f97c676ae39a1ec2148d3e5d6f73d95e9b17910152d61f16264736f6c634300080c00331ca0edce47092c0f398cebf3ffc267f05c8e7076e3b89445e0fe50f6332273d4569ba01b0b9d000e19b24c5869b0fc3b22b0d6fa47cd63316875cbbd577d76e6fde086';
|
|
142
|
+
const deployTx = await l1Client.sendRawTransaction({
|
|
143
|
+
serializedTransaction: tx
|
|
144
|
+
});
|
|
145
|
+
const deployTxReceipt = await l1Client.waitForTransactionReceipt({
|
|
146
|
+
hash: deployTx
|
|
147
|
+
});
|
|
148
|
+
if (deployTxReceipt.status !== 'success') {
|
|
149
|
+
logger.error('Failed to deploy Multicall3', undefined, {
|
|
150
|
+
deployTxReceipt
|
|
151
|
+
});
|
|
152
|
+
throw new Error('Failed to deploy Multicall3');
|
|
153
|
+
} else {
|
|
154
|
+
logger.info('Deployed Multicall3');
|
|
155
|
+
}
|
|
156
|
+
}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
2
|
import { type Hex } from 'viem';
|
|
3
3
|
import type { L1ContractAddresses } from '../l1_contract_addresses.js';
|
|
4
|
-
import type {
|
|
4
|
+
import type { ViemClient } from '../types.js';
|
|
5
5
|
export declare class RegistryContract {
|
|
6
|
-
readonly client:
|
|
6
|
+
readonly client: ViemClient;
|
|
7
7
|
address: EthAddress;
|
|
8
|
+
private readonly log;
|
|
8
9
|
private readonly registry;
|
|
9
|
-
constructor(client:
|
|
10
|
+
constructor(client: ViemClient, address: Hex | EthAddress);
|
|
11
|
+
getOwner(): Promise<EthAddress>;
|
|
10
12
|
/**
|
|
11
13
|
* Returns the address of the rollup for a given version.
|
|
12
14
|
* @param version - The version of the rollup. 'canonical' can be used to get the canonical address (i.e. the latest version).
|
|
@@ -19,6 +21,9 @@ export declare class RegistryContract {
|
|
|
19
21
|
*/
|
|
20
22
|
getCanonicalAddress(): Promise<EthAddress>;
|
|
21
23
|
getGovernanceAddresses(): Promise<Pick<L1ContractAddresses, 'governanceProposerAddress' | 'governanceAddress'>>;
|
|
22
|
-
static collectAddresses(client:
|
|
24
|
+
static collectAddresses(client: ViemClient, registryAddress: Hex | EthAddress, rollupVersion: number | bigint | 'canonical'): Promise<L1ContractAddresses>;
|
|
25
|
+
getNumberOfVersions(): Promise<number>;
|
|
26
|
+
getRollupVersions(): Promise<bigint[]>;
|
|
27
|
+
getRewardDistributor(): Promise<EthAddress>;
|
|
23
28
|
}
|
|
24
29
|
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/contracts/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/contracts/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAK3D,OAAO,EAA8B,KAAK,GAAG,EAAe,MAAM,MAAM,CAAC;AAEzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,qBAAa,gBAAgB;aAOT,MAAM,EAAE,UAAU;IAN7B,OAAO,EAAE,UAAU,CAAC;IAE3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA+C;IACnE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwD;gBAG/D,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG,GAAG,UAAU;IASd,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC;IAI5C;;;;OAIG;IACU,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAwB1F;;;OAGG;IACU,mBAAmB,IAAI,OAAO,CAAC,UAAU,CAAC;IAI1C,sBAAsB,IAAI,OAAO,CAC5C,IAAI,CAAC,mBAAmB,EAAE,2BAA2B,GAAG,mBAAmB,CAAC,CAC7E;WAUmB,gBAAgB,CAClC,MAAM,EAAE,UAAU,EAClB,eAAe,EAAE,GAAG,GAAG,UAAU,EACjC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,GAC3C,OAAO,CAAC,mBAAmB,CAAC;IAyBlB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKtC,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAWtC,oBAAoB,IAAI,OAAO,CAAC,UAAU,CAAC;CAGzD"}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
3
|
import { RegistryAbi } from '@aztec/l1-artifacts/RegistryAbi';
|
|
3
4
|
import { TestERC20Abi } from '@aztec/l1-artifacts/TestERC20Abi';
|
|
4
5
|
import { getContract } from 'viem';
|
|
5
|
-
import {
|
|
6
|
+
import { ReadOnlyGovernanceContract } from './governance.js';
|
|
6
7
|
import { RollupContract } from './rollup.js';
|
|
7
8
|
export class RegistryContract {
|
|
8
9
|
client;
|
|
9
10
|
address;
|
|
11
|
+
log;
|
|
10
12
|
registry;
|
|
11
13
|
constructor(client, address){
|
|
12
14
|
this.client = client;
|
|
15
|
+
this.log = createLogger('ethereum:contracts:registry');
|
|
13
16
|
if (address instanceof EthAddress) {
|
|
14
17
|
address = address.toString();
|
|
15
18
|
}
|
|
@@ -20,6 +23,9 @@ export class RegistryContract {
|
|
|
20
23
|
client
|
|
21
24
|
});
|
|
22
25
|
}
|
|
26
|
+
async getOwner() {
|
|
27
|
+
return EthAddress.fromString(await this.registry.read.owner());
|
|
28
|
+
}
|
|
23
29
|
/**
|
|
24
30
|
* Returns the address of the rollup for a given version.
|
|
25
31
|
* @param version - The version of the rollup. 'canonical' can be used to get the canonical address (i.e. the latest version).
|
|
@@ -31,33 +37,38 @@ export class RegistryContract {
|
|
|
31
37
|
if (typeof version === 'number') {
|
|
32
38
|
version = BigInt(version);
|
|
33
39
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
40
|
+
try {
|
|
41
|
+
return EthAddress.fromString(await this.registry.read.getRollup([
|
|
42
|
+
version
|
|
43
|
+
]));
|
|
44
|
+
} catch {
|
|
45
|
+
this.log.warn(`Failed fetching rollup address for version ${version}. Retrying as index.`);
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
const actualVersion = await this.registry.read.getVersion([
|
|
49
|
+
version
|
|
50
|
+
]);
|
|
51
|
+
const rollupAddress = await this.registry.read.getRollup([
|
|
52
|
+
actualVersion
|
|
53
|
+
]);
|
|
54
|
+
return EthAddress.fromString(rollupAddress);
|
|
55
|
+
} catch {
|
|
39
56
|
throw new Error('Rollup address is undefined');
|
|
40
57
|
}
|
|
41
|
-
return address;
|
|
42
58
|
}
|
|
43
59
|
/**
|
|
44
60
|
* Returns the canonical address of the rollup.
|
|
45
61
|
* @returns The canonical address of the rollup. If the rollup is not set, throws an error.
|
|
46
62
|
*/ async getCanonicalAddress() {
|
|
47
|
-
|
|
48
|
-
const address = EthAddress.fromString(snapshot.rollup);
|
|
49
|
-
if (address.equals(EthAddress.ZERO)) {
|
|
50
|
-
throw new Error('Rollup address is undefined');
|
|
51
|
-
}
|
|
52
|
-
return address;
|
|
63
|
+
return EthAddress.fromString(await this.registry.read.getCanonicalRollup());
|
|
53
64
|
}
|
|
54
65
|
async getGovernanceAddresses() {
|
|
55
66
|
const governanceAddress = await this.registry.read.getGovernance();
|
|
56
|
-
const governance = new
|
|
57
|
-
const
|
|
67
|
+
const governance = new ReadOnlyGovernanceContract(governanceAddress, this.client);
|
|
68
|
+
const governanceProposerAddress = await governance.getGovernanceProposerAddress();
|
|
58
69
|
return {
|
|
59
70
|
governanceAddress: governance.address,
|
|
60
|
-
governanceProposerAddress:
|
|
71
|
+
governanceProposerAddress: governanceProposerAddress
|
|
61
72
|
};
|
|
62
73
|
}
|
|
63
74
|
static async collectAddresses(client, registryAddress, rollupVersion) {
|
|
@@ -82,4 +93,21 @@ export class RegistryContract {
|
|
|
82
93
|
coinIssuerAddress: EthAddress.fromString(coinIssuer)
|
|
83
94
|
};
|
|
84
95
|
}
|
|
96
|
+
async getNumberOfVersions() {
|
|
97
|
+
const version = await this.registry.read.numberOfVersions();
|
|
98
|
+
return Number(version);
|
|
99
|
+
}
|
|
100
|
+
async getRollupVersions() {
|
|
101
|
+
const count = await this.getNumberOfVersions();
|
|
102
|
+
const versions = [];
|
|
103
|
+
for(let i = 0; i < count; i++){
|
|
104
|
+
versions.push(await this.registry.read.getVersion([
|
|
105
|
+
BigInt(i)
|
|
106
|
+
]));
|
|
107
|
+
}
|
|
108
|
+
return versions;
|
|
109
|
+
}
|
|
110
|
+
async getRewardDistributor() {
|
|
111
|
+
return EthAddress.fromString(await this.registry.read.getRewardDistributor());
|
|
112
|
+
}
|
|
85
113
|
}
|
|
@@ -1,75 +1,167 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
3
1
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
2
|
import type { ViemSignature } from '@aztec/foundation/eth-signature';
|
|
5
|
-
import {
|
|
3
|
+
import { RollupAbi } from '@aztec/l1-artifacts/RollupAbi';
|
|
4
|
+
import { type Account, type GetContractReturnType, type Hex, type StateOverride, type WatchContractEventReturnType } from 'viem';
|
|
6
5
|
import type { DeployL1ContractsReturnType } from '../deploy_l1_contracts.js';
|
|
7
6
|
import type { L1ContractAddresses } from '../l1_contract_addresses.js';
|
|
8
7
|
import type { L1ReaderConfig } from '../l1_reader.js';
|
|
9
|
-
import type {
|
|
10
|
-
import {
|
|
11
|
-
|
|
8
|
+
import type { L1TxRequest, L1TxUtils } from '../l1_tx_utils/index.js';
|
|
9
|
+
import type { ViemClient } from '../types.js';
|
|
10
|
+
import { EmpireSlashingProposerContract } from './empire_slashing_proposer.js';
|
|
11
|
+
import { SlasherContract } from './slasher_contract.js';
|
|
12
|
+
import { TallySlashingProposerContract } from './tally_slashing_proposer.js';
|
|
13
|
+
export type ViemCommitteeAttestation = {
|
|
14
|
+
addr: `0x${string}`;
|
|
15
|
+
signature: ViemSignature;
|
|
16
|
+
};
|
|
17
|
+
export type ViemCommitteeAttestations = {
|
|
18
|
+
signatureIndices: `0x${string}`;
|
|
19
|
+
signaturesOrAddresses: `0x${string}`;
|
|
20
|
+
};
|
|
21
|
+
export type L1RollupContractAddresses = Pick<L1ContractAddresses, 'rollupAddress' | 'inboxAddress' | 'outboxAddress' | 'feeJuicePortalAddress' | 'feeJuiceAddress' | 'stakingAssetAddress' | 'rewardDistributorAddress' | 'slashFactoryAddress' | 'gseAddress'>;
|
|
12
22
|
export type EpochProofPublicInputArgs = {
|
|
13
23
|
previousArchive: `0x${string}`;
|
|
14
24
|
endArchive: `0x${string}`;
|
|
15
|
-
previousBlockHash: `0x${string}`;
|
|
16
|
-
endBlockHash: `0x${string}`;
|
|
17
|
-
endTimestamp: bigint;
|
|
18
|
-
outHash: `0x${string}`;
|
|
19
25
|
proverId: `0x${string}`;
|
|
20
26
|
};
|
|
27
|
+
export type ViemHeader = {
|
|
28
|
+
lastArchiveRoot: `0x${string}`;
|
|
29
|
+
contentCommitment: ViemContentCommitment;
|
|
30
|
+
slotNumber: bigint;
|
|
31
|
+
timestamp: bigint;
|
|
32
|
+
coinbase: `0x${string}`;
|
|
33
|
+
feeRecipient: `0x${string}`;
|
|
34
|
+
gasFees: ViemGasFees;
|
|
35
|
+
totalManaUsed: bigint;
|
|
36
|
+
};
|
|
37
|
+
export type ViemContentCommitment = {
|
|
38
|
+
blobsHash: `0x${string}`;
|
|
39
|
+
inHash: `0x${string}`;
|
|
40
|
+
outHash: `0x${string}`;
|
|
41
|
+
};
|
|
42
|
+
export type ViemGasFees = {
|
|
43
|
+
feePerDaGas: bigint;
|
|
44
|
+
feePerL2Gas: bigint;
|
|
45
|
+
};
|
|
46
|
+
export type ViemStateReference = {
|
|
47
|
+
l1ToL2MessageTree: ViemAppendOnlyTreeSnapshot;
|
|
48
|
+
partialStateReference: ViemPartialStateReference;
|
|
49
|
+
};
|
|
50
|
+
export type ViemPartialStateReference = {
|
|
51
|
+
noteHashTree: ViemAppendOnlyTreeSnapshot;
|
|
52
|
+
nullifierTree: ViemAppendOnlyTreeSnapshot;
|
|
53
|
+
publicDataTree: ViemAppendOnlyTreeSnapshot;
|
|
54
|
+
};
|
|
55
|
+
export type ViemAppendOnlyTreeSnapshot = {
|
|
56
|
+
root: `0x${string}`;
|
|
57
|
+
nextAvailableLeafIndex: number;
|
|
58
|
+
};
|
|
59
|
+
export declare enum SlashingProposerType {
|
|
60
|
+
None = 0,
|
|
61
|
+
Tally = 1,
|
|
62
|
+
Empire = 2
|
|
63
|
+
}
|
|
21
64
|
export declare class RollupContract {
|
|
22
|
-
readonly client:
|
|
65
|
+
readonly client: ViemClient;
|
|
23
66
|
private readonly rollup;
|
|
67
|
+
private static cachedStfStorageSlot;
|
|
24
68
|
static get checkBlobStorageSlot(): bigint;
|
|
69
|
+
static get stfStorageSlot(): Hex;
|
|
25
70
|
static getFromL1ContractsValues(deployL1ContractsValues: DeployL1ContractsReturnType): RollupContract;
|
|
26
71
|
static getFromConfig(config: L1ReaderConfig): RollupContract;
|
|
27
|
-
constructor(client:
|
|
72
|
+
constructor(client: ViemClient, address: Hex | EthAddress);
|
|
73
|
+
getGSE(): Promise<`0x${string}`>;
|
|
28
74
|
get address(): `0x${string}`;
|
|
29
|
-
|
|
75
|
+
getContract(): GetContractReturnType<typeof RollupAbi, ViemClient>;
|
|
76
|
+
getSlashingProposer(): Promise<EmpireSlashingProposerContract | TallySlashingProposerContract | undefined>;
|
|
30
77
|
getL1StartBlock(): Promise<bigint>;
|
|
31
78
|
getL1GenesisTime(): Promise<bigint>;
|
|
32
|
-
|
|
79
|
+
getProofSubmissionEpochs(): Promise<bigint>;
|
|
33
80
|
getEpochDuration(): Promise<bigint>;
|
|
34
81
|
getSlotDuration(): Promise<bigint>;
|
|
35
82
|
getTargetCommitteeSize(): Promise<bigint>;
|
|
36
|
-
|
|
83
|
+
getEjectionThreshold(): Promise<bigint>;
|
|
84
|
+
getLocalEjectionThreshold(): Promise<bigint>;
|
|
85
|
+
getLagInEpochs(): Promise<bigint>;
|
|
86
|
+
getActivationThreshold(): Promise<bigint>;
|
|
87
|
+
getExitDelay(): Promise<bigint>;
|
|
88
|
+
getManaTarget(): Promise<bigint>;
|
|
89
|
+
getProvingCostPerMana(): Promise<bigint>;
|
|
90
|
+
getProvingCostPerManaInFeeAsset(): Promise<bigint>;
|
|
91
|
+
getManaLimit(): Promise<bigint>;
|
|
92
|
+
getVersion(): Promise<bigint>;
|
|
93
|
+
getGenesisArchiveTreeRoot(): Promise<`0x${string}`>;
|
|
94
|
+
/**
|
|
95
|
+
* Returns rollup constants used for epoch queries.
|
|
96
|
+
* Return type is `L1RollupConstants` which is defined in stdlib,
|
|
97
|
+
* so we cant reference it until we move this contract to that package.
|
|
98
|
+
*/
|
|
99
|
+
getRollupConstants(): Promise<{
|
|
100
|
+
l1StartBlock: bigint;
|
|
101
|
+
l1GenesisTime: bigint;
|
|
102
|
+
slotDuration: number;
|
|
103
|
+
epochDuration: number;
|
|
104
|
+
proofSubmissionEpochs: number;
|
|
105
|
+
}>;
|
|
106
|
+
getSlasherAddress(): Promise<`0x${string}`>;
|
|
107
|
+
/**
|
|
108
|
+
* Returns a SlasherContract instance for interacting with the slasher contract.
|
|
109
|
+
*/
|
|
110
|
+
getSlasherContract(): Promise<SlasherContract | undefined>;
|
|
111
|
+
getOwner(): Promise<`0x${string}`>;
|
|
112
|
+
getActiveAttesterCount(): Promise<bigint>;
|
|
37
113
|
getSlashingProposerAddress(): Promise<EthAddress>;
|
|
114
|
+
getBlockReward(): Promise<bigint>;
|
|
38
115
|
getBlockNumber(): Promise<bigint>;
|
|
39
116
|
getProvenBlockNumber(): Promise<bigint>;
|
|
40
117
|
getSlotNumber(): Promise<bigint>;
|
|
41
|
-
|
|
118
|
+
getL1FeesAt(timestamp: bigint): Promise<{
|
|
119
|
+
baseFee: bigint;
|
|
120
|
+
blobFee: bigint;
|
|
121
|
+
}>;
|
|
122
|
+
getFeeAssetPerEth(): Promise<bigint>;
|
|
123
|
+
getCommitteeAt(timestamp: bigint): Promise<readonly `0x${string}`[] | undefined>;
|
|
42
124
|
getSampleSeedAt(timestamp: bigint): Promise<bigint>;
|
|
43
125
|
getCurrentSampleSeed(): Promise<bigint>;
|
|
44
|
-
|
|
126
|
+
getCurrentEpoch(): Promise<bigint>;
|
|
127
|
+
getCurrentEpochCommittee(): Promise<readonly `0x${string}`[] | undefined>;
|
|
45
128
|
getCurrentProposer(): Promise<`0x${string}`>;
|
|
46
129
|
getProposerAt(timestamp: bigint): Promise<`0x${string}`>;
|
|
47
|
-
getBlock(blockNumber: bigint): Promise<{
|
|
130
|
+
getBlock(blockNumber: bigint | number): Promise<{
|
|
131
|
+
archive: `0x${string}`;
|
|
132
|
+
headerHash: `0x${string}`;
|
|
133
|
+
blobCommitmentsHash: `0x${string}`;
|
|
134
|
+
attestationsHash: `0x${string}`;
|
|
135
|
+
payloadDigest: `0x${string}`;
|
|
136
|
+
slotNumber: bigint;
|
|
48
137
|
feeHeader: {
|
|
49
138
|
excessMana: bigint;
|
|
50
139
|
manaUsed: bigint;
|
|
51
140
|
feeAssetPriceNumerator: bigint;
|
|
52
141
|
congestionCost: bigint;
|
|
53
|
-
|
|
142
|
+
proverCost: bigint;
|
|
54
143
|
};
|
|
55
|
-
archive: `0x${string}`;
|
|
56
|
-
blockHash: `0x${string}`;
|
|
57
|
-
slotNumber: bigint;
|
|
58
144
|
}>;
|
|
59
145
|
getTips(): Promise<{
|
|
60
146
|
pendingBlockNumber: bigint;
|
|
61
147
|
provenBlockNumber: bigint;
|
|
62
148
|
}>;
|
|
63
149
|
getTimestampForSlot(slot: bigint): Promise<bigint>;
|
|
64
|
-
|
|
150
|
+
getEntryQueueLength(): Promise<bigint>;
|
|
151
|
+
getAvailableValidatorFlushes(): Promise<bigint>;
|
|
152
|
+
getNextFlushableEpoch(): Promise<bigint>;
|
|
153
|
+
getCurrentEpochNumber(): Promise<bigint>;
|
|
154
|
+
getEpochNumberForBlock(blockNumber: bigint): Promise<bigint>;
|
|
65
155
|
getRollupAddresses(): Promise<L1RollupContractAddresses>;
|
|
156
|
+
getFeeJuicePortal(): Promise<EthAddress>;
|
|
66
157
|
getEpochNumberForSlotNumber(slotNumber: bigint): Promise<bigint>;
|
|
67
|
-
getEpochProofPublicInputs(args: readonly [bigint, bigint, EpochProofPublicInputArgs, readonly `0x${string}`[], `0x${string}
|
|
158
|
+
getEpochProofPublicInputs(args: readonly [bigint, bigint, EpochProofPublicInputArgs, readonly `0x${string}`[], `0x${string}`]): Promise<readonly `0x${string}`[]>;
|
|
68
159
|
validateHeader(args: readonly [
|
|
160
|
+
ViemHeader,
|
|
161
|
+
ViemCommitteeAttestations,
|
|
162
|
+
`0x${string}`[],
|
|
163
|
+
ViemSignature,
|
|
69
164
|
`0x${string}`,
|
|
70
|
-
ViemSignature[],
|
|
71
|
-
`0x${string}`,
|
|
72
|
-
bigint,
|
|
73
165
|
`0x${string}`,
|
|
74
166
|
{
|
|
75
167
|
ignoreDA: boolean;
|
|
@@ -85,8 +177,89 @@ export declare class RollupContract {
|
|
|
85
177
|
* @return [slot, blockNumber] - If you can propose, the L2 slot number and L2 block number of the next Ethereum block,
|
|
86
178
|
* @throws otherwise
|
|
87
179
|
*/
|
|
88
|
-
canProposeAtNextEthBlock(archive: Buffer, account: `0x${string}` | Account, slotDuration: bigint | number
|
|
180
|
+
canProposeAtNextEthBlock(archive: Buffer, account: `0x${string}` | Account, slotDuration: bigint | number, opts?: {
|
|
181
|
+
forcePendingBlockNumber?: number;
|
|
182
|
+
}): Promise<{
|
|
183
|
+
slot: bigint;
|
|
184
|
+
blockNumber: bigint;
|
|
185
|
+
timeOfNextL1Slot: bigint;
|
|
186
|
+
}>;
|
|
187
|
+
/**
|
|
188
|
+
* Returns a state override that sets the pending block number to the specified value. Useful for simulations.
|
|
189
|
+
* Requires querying the current state of the contract to get the current proven block number, as they are both
|
|
190
|
+
* stored in the same slot. If the argument is undefined, it returns an empty override.
|
|
191
|
+
*/
|
|
192
|
+
makePendingBlockNumberOverride(forcePendingBlockNumber: number | undefined): Promise<StateOverride>;
|
|
193
|
+
/** Creates a request to Rollup#invalidateBadAttestation to be simulated or sent */
|
|
194
|
+
buildInvalidateBadAttestationRequest(blockNumber: number, attestationsAndSigners: ViemCommitteeAttestations, committee: EthAddress[], invalidIndex: number): L1TxRequest;
|
|
195
|
+
/** Creates a request to Rollup#invalidateInsufficientAttestations to be simulated or sent */
|
|
196
|
+
buildInvalidateInsufficientAttestationsRequest(blockNumber: number, attestationsAndSigners: ViemCommitteeAttestations, committee: EthAddress[]): L1TxRequest;
|
|
89
197
|
/** Calls getHasSubmitted directly. Returns whether the given prover has submitted a proof with the given length for the given epoch. */
|
|
90
|
-
getHasSubmittedProof(epochNumber: number, numberOfBlocksInEpoch: number, prover: EthAddress): Promise<boolean>;
|
|
198
|
+
getHasSubmittedProof(epochNumber: number, numberOfBlocksInEpoch: number, prover: Hex | EthAddress): Promise<boolean>;
|
|
199
|
+
getManaBaseFeeAt(timestamp: bigint, inFeeAsset: boolean): Promise<bigint>;
|
|
200
|
+
getSlotAt(timestamp: bigint): Promise<bigint>;
|
|
201
|
+
status(blockNumber: bigint, options?: {
|
|
202
|
+
blockNumber?: bigint;
|
|
203
|
+
}): Promise<readonly [bigint, `0x${string}`, bigint, `0x${string}`, `0x${string}`, bigint]>;
|
|
204
|
+
canPruneAtTime(timestamp: bigint, options?: {
|
|
205
|
+
blockNumber?: bigint;
|
|
206
|
+
}): Promise<boolean>;
|
|
207
|
+
archive(): Promise<`0x${string}`>;
|
|
208
|
+
archiveAt(blockNumber: bigint): Promise<`0x${string}`>;
|
|
209
|
+
getSequencerRewards(address: Hex | EthAddress): Promise<bigint>;
|
|
210
|
+
getSpecificProverRewardsForEpoch(epoch: bigint, prover: Hex | EthAddress): Promise<bigint>;
|
|
211
|
+
getAttesters(): Promise<`0x${string}`[]>;
|
|
212
|
+
getAttesterView(address: Hex | EthAddress): Promise<{
|
|
213
|
+
status: number;
|
|
214
|
+
effectiveBalance: bigint;
|
|
215
|
+
exit: {
|
|
216
|
+
withdrawalId: bigint;
|
|
217
|
+
amount: bigint;
|
|
218
|
+
exitableAt: bigint;
|
|
219
|
+
recipientOrWithdrawer: `0x${string}`;
|
|
220
|
+
isRecipient: boolean;
|
|
221
|
+
exists: boolean;
|
|
222
|
+
};
|
|
223
|
+
config: {
|
|
224
|
+
publicKey: {
|
|
225
|
+
x: bigint;
|
|
226
|
+
y: bigint;
|
|
227
|
+
};
|
|
228
|
+
withdrawer: `0x${string}`;
|
|
229
|
+
};
|
|
230
|
+
}>;
|
|
231
|
+
getStatus(address: Hex | EthAddress): Promise<number>;
|
|
232
|
+
getBlobCommitmentsHash(blockNumber: bigint): Promise<`0x${string}`>;
|
|
233
|
+
getCurrentBlobCommitmentsHash(): Promise<`0x${string}`>;
|
|
234
|
+
getStakingAsset(): Promise<`0x${string}`>;
|
|
235
|
+
getRewardConfig(): Promise<{
|
|
236
|
+
rewardDistributor: `0x${string}`;
|
|
237
|
+
sequencerBps: number;
|
|
238
|
+
booster: `0x${string}`;
|
|
239
|
+
blockReward: bigint;
|
|
240
|
+
}>;
|
|
241
|
+
setupEpoch(l1TxUtils: L1TxUtils): Promise<{
|
|
242
|
+
receipt: import("viem").TransactionReceipt;
|
|
243
|
+
state: import("../l1_tx_utils/types.js").L1TxState;
|
|
244
|
+
}>;
|
|
245
|
+
vote(l1TxUtils: L1TxUtils, proposalId: bigint): Promise<{
|
|
246
|
+
receipt: import("viem").TransactionReceipt;
|
|
247
|
+
state: import("../l1_tx_utils/types.js").L1TxState;
|
|
248
|
+
}>;
|
|
249
|
+
listenToSlasherChanged(callback: (args: {
|
|
250
|
+
oldSlasher: `0x${string}`;
|
|
251
|
+
newSlasher: `0x${string}`;
|
|
252
|
+
}) => unknown): WatchContractEventReturnType;
|
|
253
|
+
listenToBlockInvalidated(callback: (args: {
|
|
254
|
+
blockNumber: bigint;
|
|
255
|
+
}) => unknown): WatchContractEventReturnType;
|
|
256
|
+
getSlashEvents(l1BlockHash: Hex): Promise<{
|
|
257
|
+
amount: bigint;
|
|
258
|
+
attester: EthAddress;
|
|
259
|
+
}[]>;
|
|
260
|
+
listenToSlash(callback: (args: {
|
|
261
|
+
amount: bigint;
|
|
262
|
+
attester: EthAddress;
|
|
263
|
+
}) => unknown): WatchContractEventReturnType;
|
|
91
264
|
}
|
|
92
265
|
//# sourceMappingURL=rollup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rollup.d.ts","sourceRoot":"","sources":["../../src/contracts/rollup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rollup.d.ts","sourceRoot":"","sources":["../../src/contracts/rollup.ts"],"names":[],"mappings":"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"}
|