@aztec/ethereum 0.74.0 → 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2

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.
Files changed (81) hide show
  1. package/dest/chain.js +17 -18
  2. package/dest/client.js +5 -9
  3. package/dest/config.js +13 -14
  4. package/dest/constants.js +0 -1
  5. package/dest/contracts/empire_base.js +3 -2
  6. package/dest/contracts/forwarder.js +46 -26
  7. package/dest/contracts/governance.js +11 -6
  8. package/dest/contracts/governance_proposer.js +78 -67
  9. package/dest/contracts/index.js +0 -1
  10. package/dest/contracts/rollup.js +270 -243
  11. package/dest/contracts/slashing_proposer.js +18 -8
  12. package/dest/deploy_l1_contracts.js +201 -126
  13. package/dest/eth_cheat_codes.js +144 -127
  14. package/dest/index.js +0 -1
  15. package/dest/l1_contract_addresses.js +17 -19
  16. package/dest/l1_reader.js +6 -7
  17. package/dest/l1_tx_utils.js +227 -186
  18. package/dest/l1_tx_utils_with_blobs.js +25 -22
  19. package/dest/queries.js +6 -9
  20. package/dest/test/delayed_tx_utils.js +3 -3
  21. package/dest/test/eth_cheat_codes_with_state.js +10 -12
  22. package/dest/test/index.js +0 -1
  23. package/dest/test/start_anvil.js +17 -9
  24. package/dest/test/tx_delayer.js +77 -74
  25. package/dest/types.js +1 -2
  26. package/dest/utils.js +35 -36
  27. package/package.json +5 -4
  28. package/src/contracts/rollup.ts +1 -1
  29. package/src/l1_tx_utils_with_blobs.ts +1 -1
  30. package/dest/chain.d.ts +0 -25
  31. package/dest/chain.d.ts.map +0 -1
  32. package/dest/client.d.ts +0 -16
  33. package/dest/client.d.ts.map +0 -1
  34. package/dest/config.d.ts +0 -38
  35. package/dest/config.d.ts.map +0 -1
  36. package/dest/constants.d.ts +0 -4
  37. package/dest/constants.d.ts.map +0 -1
  38. package/dest/contracts/empire_base.d.ts +0 -13
  39. package/dest/contracts/empire_base.d.ts.map +0 -1
  40. package/dest/contracts/forwarder.d.ts +0 -24
  41. package/dest/contracts/forwarder.d.ts.map +0 -1
  42. package/dest/contracts/governance.d.ts +0 -14
  43. package/dest/contracts/governance.d.ts.map +0 -1
  44. package/dest/contracts/governance_proposer.d.ts +0 -28
  45. package/dest/contracts/governance_proposer.d.ts.map +0 -1
  46. package/dest/contracts/index.d.ts +0 -7
  47. package/dest/contracts/index.d.ts.map +0 -1
  48. package/dest/contracts/rollup.d.ts +0 -115
  49. package/dest/contracts/rollup.d.ts.map +0 -1
  50. package/dest/contracts/slashing_proposer.d.ts +0 -21
  51. package/dest/contracts/slashing_proposer.d.ts.map +0 -1
  52. package/dest/deploy_l1_contracts.d.ts +0 -21118
  53. package/dest/deploy_l1_contracts.d.ts.map +0 -1
  54. package/dest/eth_cheat_codes.d.ts +0 -146
  55. package/dest/eth_cheat_codes.d.ts.map +0 -1
  56. package/dest/index.d.ts +0 -15
  57. package/dest/index.d.ts.map +0 -1
  58. package/dest/l1_contract_addresses.d.ts +0 -55
  59. package/dest/l1_contract_addresses.d.ts.map +0 -1
  60. package/dest/l1_reader.d.ts +0 -16
  61. package/dest/l1_reader.d.ts.map +0 -1
  62. package/dest/l1_tx_utils.d.ts +0 -194
  63. package/dest/l1_tx_utils.d.ts.map +0 -1
  64. package/dest/l1_tx_utils_with_blobs.d.ts +0 -12
  65. package/dest/l1_tx_utils_with_blobs.d.ts.map +0 -1
  66. package/dest/queries.d.ts +0 -15
  67. package/dest/queries.d.ts.map +0 -1
  68. package/dest/test/delayed_tx_utils.d.ts +0 -8
  69. package/dest/test/delayed_tx_utils.d.ts.map +0 -1
  70. package/dest/test/eth_cheat_codes_with_state.d.ts +0 -18
  71. package/dest/test/eth_cheat_codes_with_state.d.ts.map +0 -1
  72. package/dest/test/index.d.ts +0 -5
  73. package/dest/test/index.d.ts.map +0 -1
  74. package/dest/test/start_anvil.d.ts +0 -9
  75. package/dest/test/start_anvil.d.ts.map +0 -1
  76. package/dest/test/tx_delayer.d.ts +0 -24
  77. package/dest/test/tx_delayer.d.ts.map +0 -1
  78. package/dest/types.d.ts +0 -12
  79. package/dest/types.d.ts.map +0 -1
  80. package/dest/utils.d.ts +0 -24
  81. package/dest/utils.d.ts.map +0 -1
@@ -1,249 +1,276 @@
1
- import { __esDecorate, __runInitializers } from "tslib";
1
+ function _ts_decorate(decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ }
2
7
  import { memoize } from '@aztec/foundation/decorators';
3
8
  import { EthAddress } from '@aztec/foundation/eth-address';
4
9
  import { RollupAbi, RollupStorage, SlasherAbi } from '@aztec/l1-artifacts';
5
- import { createPublicClient, getAddress, getContract, http, } from 'viem';
10
+ import { createPublicClient, getAddress, getContract, http } from 'viem';
6
11
  import { createEthereumChain } from '../chain.js';
7
12
  import { formatViemError } from '../utils.js';
8
13
  import { SlashingProposerContract } from './slashing_proposer.js';
9
- let RollupContract = (() => {
10
- var _a;
11
- let _instanceExtraInitializers = [];
12
- let _getSlashingProposer_decorators;
13
- let _getL1StartBlock_decorators;
14
- let _getL1GenesisTime_decorators;
15
- let _getClaimDurationInL2Slots_decorators;
16
- let _getEpochDuration_decorators;
17
- let _getSlotDuration_decorators;
18
- let _getTargetCommitteeSize_decorators;
19
- let _getMinimumStake_decorators;
20
- return _a = class RollupContract {
21
- static get checkBlobStorageSlot() {
22
- const asString = RollupStorage.find(storage => storage.label === 'checkBlob')?.slot;
23
- if (asString === undefined) {
24
- throw new Error('checkBlobStorageSlot not found');
25
- }
26
- return BigInt(asString);
27
- }
28
- static getFromL1ContractsValues(deployL1ContractsValues) {
29
- const { publicClient, l1ContractAddresses: { rollupAddress }, } = deployL1ContractsValues;
30
- return new _a(publicClient, rollupAddress.toString());
31
- }
32
- static getFromConfig(config) {
33
- const client = createPublicClient({
34
- transport: http(config.l1RpcUrl),
35
- chain: createEthereumChain(config.l1RpcUrl, config.l1ChainId).chainInfo,
36
- });
37
- const address = config.l1Contracts.rollupAddress.toString();
38
- return new _a(client, address);
39
- }
40
- constructor(client, address) {
41
- this.client = (__runInitializers(this, _instanceExtraInitializers), client);
42
- this.rollup = getContract({ address, abi: RollupAbi, client });
43
- }
44
- get address() {
45
- return this.rollup.address;
46
- }
47
- async getSlashingProposer() {
48
- const slasherAddress = await this.rollup.read.getSlasher();
49
- const slasher = getContract({ address: slasherAddress, abi: SlasherAbi, client: this.client });
50
- const proposerAddress = await slasher.read.PROPOSER();
51
- return new SlashingProposerContract(this.client, proposerAddress);
52
- }
53
- getL1StartBlock() {
54
- return this.rollup.read.L1_BLOCK_AT_GENESIS();
55
- }
56
- getL1GenesisTime() {
57
- return this.rollup.read.getGenesisTime();
58
- }
59
- getClaimDurationInL2Slots() {
60
- return this.rollup.read.CLAIM_DURATION_IN_L2_SLOTS();
61
- }
62
- getEpochDuration() {
63
- return this.rollup.read.getEpochDuration();
64
- }
65
- getSlotDuration() {
66
- return this.rollup.read.getSlotDuration();
67
- }
68
- getTargetCommitteeSize() {
69
- return this.rollup.read.TARGET_COMMITTEE_SIZE();
70
- }
71
- getMinimumStake() {
72
- return this.rollup.read.getMinimumStake();
73
- }
74
- async getSlashingProposerAddress() {
75
- const slasherAddress = await this.rollup.read.getSlasher();
76
- const slasher = getContract({
77
- address: getAddress(slasherAddress.toString()),
78
- abi: SlasherAbi,
79
- client: this.client,
80
- });
81
- return EthAddress.fromString(await slasher.read.PROPOSER());
82
- }
83
- getBlockNumber() {
84
- return this.rollup.read.getPendingBlockNumber();
85
- }
86
- getProvenBlockNumber() {
87
- return this.rollup.read.getProvenBlockNumber();
88
- }
89
- getSlotNumber() {
90
- return this.rollup.read.getCurrentSlot();
91
- }
92
- getCommitteeAt(timestamp) {
93
- return this.rollup.read.getCommitteeAt([timestamp]);
94
- }
95
- getSampleSeedAt(timestamp) {
96
- return this.rollup.read.getSampleSeedAt([timestamp]);
97
- }
98
- getCurrentSampleSeed() {
99
- return this.rollup.read.getCurrentSampleSeed();
100
- }
101
- getCurrentEpochCommittee() {
102
- return this.rollup.read.getCurrentEpochCommittee();
103
- }
104
- getCurrentProposer() {
105
- return this.rollup.read.getCurrentProposer();
106
- }
107
- getProposerAt(timestamp) {
108
- return this.rollup.read.getProposerAt([timestamp]);
109
- }
110
- getBlock(blockNumber) {
111
- return this.rollup.read.getBlock([blockNumber]);
112
- }
113
- getProofCommitmentEscrow() {
114
- return this.rollup.read.PROOF_COMMITMENT_ESCROW();
115
- }
116
- getTips() {
117
- return this.rollup.read.getTips();
118
- }
119
- getTimestampForSlot(slot) {
120
- return this.rollup.read.getTimestampForSlot([slot]);
121
- }
122
- async getEpochNumber(blockNumber) {
123
- blockNumber ?? (blockNumber = await this.getBlockNumber());
124
- return this.rollup.read.getEpochForBlock([BigInt(blockNumber)]);
125
- }
126
- async getRollupAddresses() {
127
- const [inboxAddress, outboxAddress, feeJuicePortalAddress, rewardDistributorAddress, feeJuiceAddress, stakingAssetAddress,] = (await Promise.all([
128
- this.rollup.read.INBOX(),
129
- this.rollup.read.OUTBOX(),
130
- this.rollup.read.FEE_JUICE_PORTAL(),
131
- this.rollup.read.REWARD_DISTRIBUTOR(),
132
- this.rollup.read.ASSET(),
133
- this.rollup.read.getStakingAsset(),
134
- ])).map(EthAddress.fromString);
135
- return {
136
- rollupAddress: EthAddress.fromString(this.address),
137
- inboxAddress,
138
- outboxAddress,
139
- feeJuicePortalAddress,
140
- feeJuiceAddress,
141
- stakingAssetAddress,
142
- rewardDistributorAddress,
143
- };
144
- }
145
- async getEpochNumberForSlotNumber(slotNumber) {
146
- return await this.rollup.read.getEpochAtSlot([slotNumber]);
147
- }
148
- getEpochProofPublicInputs(args) {
149
- return this.rollup.read.getEpochProofPublicInputs(args);
150
- }
151
- async getProofClaim() {
152
- const { epochToProve, basisPointFee, bondAmount, bondProvider: bondProviderHex, proposerClaimant: proposerClaimantHex, } = await this.rollup.read.getProofClaim();
153
- const bondProvider = EthAddress.fromString(bondProviderHex);
154
- const proposerClaimant = EthAddress.fromString(proposerClaimantHex);
155
- if (bondProvider.isZero() && proposerClaimant.isZero() && epochToProve === 0n) {
156
- return undefined;
157
- }
158
- return {
159
- epochToProve,
160
- basisPointFee,
161
- bondAmount,
162
- bondProvider,
163
- proposerClaimant,
164
- };
165
- }
166
- async getClaimableEpoch() {
167
- try {
168
- return await this.rollup.read.getClaimableEpoch();
169
- }
170
- catch (err) {
171
- throw formatViemError(err);
172
- }
173
- }
174
- async getEpochToProve() {
175
- try {
176
- return await this.rollup.read.getEpochToProve();
177
- }
178
- catch (err) {
179
- throw formatViemError(err);
180
- }
181
- }
182
- async validateProofQuote(quote, account, slotDuration) {
183
- if (typeof slotDuration === 'number') {
184
- slotDuration = BigInt(slotDuration);
185
- }
186
- const timeOfNextL1Slot = BigInt((await this.client.getBlock()).timestamp + slotDuration);
187
- const args = [timeOfNextL1Slot, quote];
188
- try {
189
- await this.rollup.read.validateEpochProofRightClaimAtTime(args, { account });
190
- }
191
- catch (err) {
192
- throw formatViemError(err);
193
- }
194
- }
195
- async validateHeader(args, account) {
196
- try {
197
- await this.rollup.read.validateHeader(args, { account });
198
- }
199
- catch (error) {
200
- throw formatViemError(error);
201
- }
202
- }
203
- /**
204
- * @notice Calls `canProposeAtTime` with the time of the next Ethereum block and the sender address
205
- *
206
- * @dev Throws if unable to propose
207
- *
208
- * @param archive - The archive that we expect to be current state
209
- * @return [slot, blockNumber] - If you can propose, the L2 slot number and L2 block number of the next Ethereum block,
210
- * @throws otherwise
211
- */
212
- async canProposeAtNextEthBlock(archive, account, slotDuration) {
213
- if (typeof slotDuration === 'number') {
214
- slotDuration = BigInt(slotDuration);
215
- }
216
- const timeOfNextL1Slot = (await this.client.getBlock()).timestamp + slotDuration;
217
- try {
218
- const [slot, blockNumber] = await this.rollup.read.canProposeAtTime([timeOfNextL1Slot, `0x${archive.toString('hex')}`], { account });
219
- return [slot, blockNumber];
220
- }
221
- catch (err) {
222
- throw formatViemError(err);
223
- }
224
- }
225
- },
226
- (() => {
227
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
228
- _getSlashingProposer_decorators = [memoize];
229
- _getL1StartBlock_decorators = [memoize];
230
- _getL1GenesisTime_decorators = [memoize];
231
- _getClaimDurationInL2Slots_decorators = [memoize];
232
- _getEpochDuration_decorators = [memoize];
233
- _getSlotDuration_decorators = [memoize];
234
- _getTargetCommitteeSize_decorators = [memoize];
235
- _getMinimumStake_decorators = [memoize];
236
- __esDecorate(_a, null, _getSlashingProposer_decorators, { kind: "method", name: "getSlashingProposer", static: false, private: false, access: { has: obj => "getSlashingProposer" in obj, get: obj => obj.getSlashingProposer }, metadata: _metadata }, null, _instanceExtraInitializers);
237
- __esDecorate(_a, null, _getL1StartBlock_decorators, { kind: "method", name: "getL1StartBlock", static: false, private: false, access: { has: obj => "getL1StartBlock" in obj, get: obj => obj.getL1StartBlock }, metadata: _metadata }, null, _instanceExtraInitializers);
238
- __esDecorate(_a, null, _getL1GenesisTime_decorators, { kind: "method", name: "getL1GenesisTime", static: false, private: false, access: { has: obj => "getL1GenesisTime" in obj, get: obj => obj.getL1GenesisTime }, metadata: _metadata }, null, _instanceExtraInitializers);
239
- __esDecorate(_a, null, _getClaimDurationInL2Slots_decorators, { kind: "method", name: "getClaimDurationInL2Slots", static: false, private: false, access: { has: obj => "getClaimDurationInL2Slots" in obj, get: obj => obj.getClaimDurationInL2Slots }, metadata: _metadata }, null, _instanceExtraInitializers);
240
- __esDecorate(_a, null, _getEpochDuration_decorators, { kind: "method", name: "getEpochDuration", static: false, private: false, access: { has: obj => "getEpochDuration" in obj, get: obj => obj.getEpochDuration }, metadata: _metadata }, null, _instanceExtraInitializers);
241
- __esDecorate(_a, null, _getSlotDuration_decorators, { kind: "method", name: "getSlotDuration", static: false, private: false, access: { has: obj => "getSlotDuration" in obj, get: obj => obj.getSlotDuration }, metadata: _metadata }, null, _instanceExtraInitializers);
242
- __esDecorate(_a, null, _getTargetCommitteeSize_decorators, { kind: "method", name: "getTargetCommitteeSize", static: false, private: false, access: { has: obj => "getTargetCommitteeSize" in obj, get: obj => obj.getTargetCommitteeSize }, metadata: _metadata }, null, _instanceExtraInitializers);
243
- __esDecorate(_a, null, _getMinimumStake_decorators, { kind: "method", name: "getMinimumStake", static: false, private: false, access: { has: obj => "getMinimumStake" in obj, get: obj => obj.getMinimumStake }, metadata: _metadata }, null, _instanceExtraInitializers);
244
- if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
245
- })(),
246
- _a;
247
- })();
248
- export { RollupContract };
249
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sbHVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyYWN0cy9yb2xsdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFM0UsT0FBTyxFQU9MLGtCQUFrQixFQUNsQixVQUFVLEVBQ1YsV0FBVyxFQUNYLElBQUksR0FDTCxNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUlsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0lBcUJyRCxjQUFjOzs7Ozs7Ozs7OztzQkFBZCxjQUFjO1lBR3pCLE1BQU0sS0FBSyxvQkFBb0I7Z0JBQzdCLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxFQUFFLElBQUksQ0FBQztnQkFDcEYsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztnQkFDcEQsQ0FBQztnQkFDRCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxQixDQUFDO1lBRUQsTUFBTSxDQUFDLHdCQUF3QixDQUFDLHVCQUEwQztnQkFDeEUsTUFBTSxFQUNKLFlBQVksRUFDWixtQkFBbUIsRUFBRSxFQUFFLGFBQWEsRUFBRSxHQUN2QyxHQUFHLHVCQUF1QixDQUFDO2dCQUM1QixPQUFPLElBQUksRUFB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
14
+ export class RollupContract {
15
+ client;
16
+ rollup;
17
+ static get checkBlobStorageSlot() {
18
+ const asString = RollupStorage.find((storage)=>storage.label === 'checkBlob')?.slot;
19
+ if (asString === undefined) {
20
+ throw new Error('checkBlobStorageSlot not found');
21
+ }
22
+ return BigInt(asString);
23
+ }
24
+ static getFromL1ContractsValues(deployL1ContractsValues) {
25
+ const { publicClient, l1ContractAddresses: { rollupAddress } } = deployL1ContractsValues;
26
+ return new RollupContract(publicClient, rollupAddress.toString());
27
+ }
28
+ static getFromConfig(config) {
29
+ const client = createPublicClient({
30
+ transport: http(config.l1RpcUrl),
31
+ chain: createEthereumChain(config.l1RpcUrl, config.l1ChainId).chainInfo
32
+ });
33
+ const address = config.l1Contracts.rollupAddress.toString();
34
+ return new RollupContract(client, address);
35
+ }
36
+ constructor(client, address){
37
+ this.client = client;
38
+ this.rollup = getContract({
39
+ address,
40
+ abi: RollupAbi,
41
+ client
42
+ });
43
+ }
44
+ get address() {
45
+ return this.rollup.address;
46
+ }
47
+ async getSlashingProposer() {
48
+ const slasherAddress = await this.rollup.read.getSlasher();
49
+ const slasher = getContract({
50
+ address: slasherAddress,
51
+ abi: SlasherAbi,
52
+ client: this.client
53
+ });
54
+ const proposerAddress = await slasher.read.PROPOSER();
55
+ return new SlashingProposerContract(this.client, proposerAddress);
56
+ }
57
+ getL1StartBlock() {
58
+ return this.rollup.read.L1_BLOCK_AT_GENESIS();
59
+ }
60
+ getL1GenesisTime() {
61
+ return this.rollup.read.getGenesisTime();
62
+ }
63
+ getClaimDurationInL2Slots() {
64
+ return this.rollup.read.CLAIM_DURATION_IN_L2_SLOTS();
65
+ }
66
+ getEpochDuration() {
67
+ return this.rollup.read.getEpochDuration();
68
+ }
69
+ getSlotDuration() {
70
+ return this.rollup.read.getSlotDuration();
71
+ }
72
+ getTargetCommitteeSize() {
73
+ return this.rollup.read.getTargetCommitteeSize();
74
+ }
75
+ getMinimumStake() {
76
+ return this.rollup.read.getMinimumStake();
77
+ }
78
+ async getSlashingProposerAddress() {
79
+ const slasherAddress = await this.rollup.read.getSlasher();
80
+ const slasher = getContract({
81
+ address: getAddress(slasherAddress.toString()),
82
+ abi: SlasherAbi,
83
+ client: this.client
84
+ });
85
+ return EthAddress.fromString(await slasher.read.PROPOSER());
86
+ }
87
+ getBlockNumber() {
88
+ return this.rollup.read.getPendingBlockNumber();
89
+ }
90
+ getProvenBlockNumber() {
91
+ return this.rollup.read.getProvenBlockNumber();
92
+ }
93
+ getSlotNumber() {
94
+ return this.rollup.read.getCurrentSlot();
95
+ }
96
+ getCommitteeAt(timestamp) {
97
+ return this.rollup.read.getCommitteeAt([
98
+ timestamp
99
+ ]);
100
+ }
101
+ getSampleSeedAt(timestamp) {
102
+ return this.rollup.read.getSampleSeedAt([
103
+ timestamp
104
+ ]);
105
+ }
106
+ getCurrentSampleSeed() {
107
+ return this.rollup.read.getCurrentSampleSeed();
108
+ }
109
+ getCurrentEpochCommittee() {
110
+ return this.rollup.read.getCurrentEpochCommittee();
111
+ }
112
+ getCurrentProposer() {
113
+ return this.rollup.read.getCurrentProposer();
114
+ }
115
+ getProposerAt(timestamp) {
116
+ return this.rollup.read.getProposerAt([
117
+ timestamp
118
+ ]);
119
+ }
120
+ getBlock(blockNumber) {
121
+ return this.rollup.read.getBlock([
122
+ blockNumber
123
+ ]);
124
+ }
125
+ getProofCommitmentEscrow() {
126
+ return this.rollup.read.PROOF_COMMITMENT_ESCROW();
127
+ }
128
+ getTips() {
129
+ return this.rollup.read.getTips();
130
+ }
131
+ getTimestampForSlot(slot) {
132
+ return this.rollup.read.getTimestampForSlot([
133
+ slot
134
+ ]);
135
+ }
136
+ async getEpochNumber(blockNumber) {
137
+ blockNumber ??= await this.getBlockNumber();
138
+ return this.rollup.read.getEpochForBlock([
139
+ BigInt(blockNumber)
140
+ ]);
141
+ }
142
+ async getRollupAddresses() {
143
+ const [inboxAddress, outboxAddress, feeJuicePortalAddress, rewardDistributorAddress, feeJuiceAddress, stakingAssetAddress] = (await Promise.all([
144
+ this.rollup.read.INBOX(),
145
+ this.rollup.read.OUTBOX(),
146
+ this.rollup.read.FEE_JUICE_PORTAL(),
147
+ this.rollup.read.REWARD_DISTRIBUTOR(),
148
+ this.rollup.read.ASSET(),
149
+ this.rollup.read.getStakingAsset()
150
+ ])).map(EthAddress.fromString);
151
+ return {
152
+ rollupAddress: EthAddress.fromString(this.address),
153
+ inboxAddress,
154
+ outboxAddress,
155
+ feeJuicePortalAddress,
156
+ feeJuiceAddress,
157
+ stakingAssetAddress,
158
+ rewardDistributorAddress
159
+ };
160
+ }
161
+ async getEpochNumberForSlotNumber(slotNumber) {
162
+ return await this.rollup.read.getEpochAtSlot([
163
+ slotNumber
164
+ ]);
165
+ }
166
+ getEpochProofPublicInputs(args) {
167
+ return this.rollup.read.getEpochProofPublicInputs(args);
168
+ }
169
+ async getProofClaim() {
170
+ const { epochToProve, basisPointFee, bondAmount, bondProvider: bondProviderHex, proposerClaimant: proposerClaimantHex } = await this.rollup.read.getProofClaim();
171
+ const bondProvider = EthAddress.fromString(bondProviderHex);
172
+ const proposerClaimant = EthAddress.fromString(proposerClaimantHex);
173
+ if (bondProvider.isZero() && proposerClaimant.isZero() && epochToProve === 0n) {
174
+ return undefined;
175
+ }
176
+ return {
177
+ epochToProve,
178
+ basisPointFee,
179
+ bondAmount,
180
+ bondProvider,
181
+ proposerClaimant
182
+ };
183
+ }
184
+ async getClaimableEpoch() {
185
+ try {
186
+ return await this.rollup.read.getClaimableEpoch();
187
+ } catch (err) {
188
+ throw formatViemError(err);
189
+ }
190
+ }
191
+ async getEpochToProve() {
192
+ try {
193
+ return await this.rollup.read.getEpochToProve();
194
+ } catch (err) {
195
+ throw formatViemError(err);
196
+ }
197
+ }
198
+ async validateProofQuote(quote, account, slotDuration) {
199
+ if (typeof slotDuration === 'number') {
200
+ slotDuration = BigInt(slotDuration);
201
+ }
202
+ const timeOfNextL1Slot = BigInt((await this.client.getBlock()).timestamp + slotDuration);
203
+ const args = [
204
+ timeOfNextL1Slot,
205
+ quote
206
+ ];
207
+ try {
208
+ await this.rollup.read.validateEpochProofRightClaimAtTime(args, {
209
+ account
210
+ });
211
+ } catch (err) {
212
+ throw formatViemError(err);
213
+ }
214
+ }
215
+ async validateHeader(args, account) {
216
+ try {
217
+ await this.rollup.read.validateHeader(args, {
218
+ account
219
+ });
220
+ } catch (error) {
221
+ throw formatViemError(error);
222
+ }
223
+ }
224
+ /**
225
+ * @notice Calls `canProposeAtTime` with the time of the next Ethereum block and the sender address
226
+ *
227
+ * @dev Throws if unable to propose
228
+ *
229
+ * @param archive - The archive that we expect to be current state
230
+ * @return [slot, blockNumber] - If you can propose, the L2 slot number and L2 block number of the next Ethereum block,
231
+ * @throws otherwise
232
+ */ async canProposeAtNextEthBlock(archive, account, slotDuration) {
233
+ if (typeof slotDuration === 'number') {
234
+ slotDuration = BigInt(slotDuration);
235
+ }
236
+ const timeOfNextL1Slot = (await this.client.getBlock()).timestamp + slotDuration;
237
+ try {
238
+ const [slot, blockNumber] = await this.rollup.read.canProposeAtTime([
239
+ timeOfNextL1Slot,
240
+ `0x${archive.toString('hex')}`
241
+ ], {
242
+ account
243
+ });
244
+ return [
245
+ slot,
246
+ blockNumber
247
+ ];
248
+ } catch (err) {
249
+ throw formatViemError(err);
250
+ }
251
+ }
252
+ }
253
+ _ts_decorate([
254
+ memoize
255
+ ], RollupContract.prototype, "getSlashingProposer", null);
256
+ _ts_decorate([
257
+ memoize
258
+ ], RollupContract.prototype, "getL1StartBlock", null);
259
+ _ts_decorate([
260
+ memoize
261
+ ], RollupContract.prototype, "getL1GenesisTime", null);
262
+ _ts_decorate([
263
+ memoize
264
+ ], RollupContract.prototype, "getClaimDurationInL2Slots", null);
265
+ _ts_decorate([
266
+ memoize
267
+ ], RollupContract.prototype, "getEpochDuration", null);
268
+ _ts_decorate([
269
+ memoize
270
+ ], RollupContract.prototype, "getSlotDuration", null);
271
+ _ts_decorate([
272
+ memoize
273
+ ], RollupContract.prototype, "getTargetCommitteeSize", null);
274
+ _ts_decorate([
275
+ memoize
276
+ ], RollupContract.prototype, "getMinimumStake", null);
@@ -1,11 +1,17 @@
1
1
  import { EthAddress } from '@aztec/foundation/eth-address';
2
2
  import { SlashingProposerAbi } from '@aztec/l1-artifacts';
3
- import { getContract, } from 'viem';
3
+ import { getContract } from 'viem';
4
4
  import { encodeVote } from './empire_base.js';
5
5
  export class SlashingProposerContract {
6
- constructor(client, address) {
6
+ client;
7
+ proposer;
8
+ constructor(client, address){
7
9
  this.client = client;
8
- this.proposer = getContract({ address, abi: SlashingProposerAbi, client });
10
+ this.proposer = getContract({
11
+ address,
12
+ abi: SlashingProposerAbi,
13
+ client
14
+ });
9
15
  }
10
16
  get address() {
11
17
  return EthAddress.fromString(this.proposer.address);
@@ -17,21 +23,25 @@ export class SlashingProposerContract {
17
23
  return this.proposer.read.M();
18
24
  }
19
25
  computeRound(slot) {
20
- return this.proposer.read.computeRound([slot]);
26
+ return this.proposer.read.computeRound([
27
+ slot
28
+ ]);
21
29
  }
22
30
  async getRoundInfo(rollupAddress, round) {
23
- const roundInfo = await this.proposer.read.rounds([rollupAddress, round]);
31
+ const roundInfo = await this.proposer.read.rounds([
32
+ rollupAddress,
33
+ round
34
+ ]);
24
35
  return {
25
36
  lastVote: roundInfo[0],
26
37
  leader: roundInfo[1],
27
- executed: roundInfo[2],
38
+ executed: roundInfo[2]
28
39
  };
29
40
  }
30
41
  createVoteRequest(payload) {
31
42
  return {
32
43
  to: this.address.toString(),
33
- data: encodeVote(payload),
44
+ data: encodeVote(payload)
34
45
  };
35
46
  }
36
47
  }
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xhc2hpbmdfcHJvcG9zZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL3NsYXNoaW5nX3Byb3Bvc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUxRCxPQUFPLEVBTUwsV0FBVyxHQUNaLE1BQU0sTUFBTSxDQUFDO0FBSWQsT0FBTyxFQUFvQixVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVoRSxNQUFNLE9BQU8sd0JBQXdCO0lBR25DLFlBQTRCLE1BQWlDLEVBQUUsT0FBWTtRQUEvQyxXQUFNLEdBQU4sTUFBTSxDQUEyQjtRQUMzRCxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFTSxhQUFhO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVNLFlBQVk7UUFDakIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRU0sWUFBWSxDQUFDLElBQVk7UUFDOUIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTSxLQUFLLENBQUMsWUFBWSxDQUN2QixhQUFrQixFQUNsQixLQUFhO1FBRWIsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMxRSxPQUFPO1lBQ0wsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDdkIsQ0FBQztJQUNKLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxPQUFZO1FBQ25DLE9BQU87WUFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDM0IsSUFBSSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUM7U0FDMUIsQ0FBQztJQUNKLENBQUM7Q0FDRiJ9