@aztec/ethereum 1.0.0-nightly.20250708 → 1.0.0-staging.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/config.d.ts +5 -24
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +4 -79
- package/dest/contracts/governance_proposer.d.ts.map +1 -1
- package/dest/contracts/governance_proposer.js +6 -1
- package/dest/contracts/multicall.d.ts +1 -2
- package/dest/contracts/multicall.d.ts.map +1 -1
- package/dest/contracts/multicall.js +48 -88
- package/dest/contracts/rollup.d.ts +1 -19
- package/dest/contracts/rollup.d.ts.map +1 -1
- package/dest/contracts/rollup.js +0 -58
- package/dest/contracts/slashing_proposer.d.ts.map +1 -1
- package/dest/contracts/slashing_proposer.js +6 -1
- package/dest/deploy_l1_contracts.d.ts +541 -1290
- package/dest/deploy_l1_contracts.d.ts.map +1 -1
- package/dest/deploy_l1_contracts.js +19 -35
- package/dest/{test/eth_cheat_codes.d.ts → eth_cheat_codes.d.ts} +3 -7
- package/dest/eth_cheat_codes.d.ts.map +1 -0
- package/dest/{test/eth_cheat_codes.js → eth_cheat_codes.js} +10 -26
- package/dest/index.d.ts +1 -0
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -0
- package/dest/l1_tx_utils.d.ts +1 -2
- package/dest/l1_tx_utils.d.ts.map +1 -1
- package/dest/l1_tx_utils.js +9 -14
- package/dest/test/chain_monitor.d.ts +2 -4
- package/dest/test/chain_monitor.d.ts.map +1 -1
- package/dest/test/chain_monitor.js +3 -11
- package/dest/test/delayed_tx_utils.d.ts +1 -3
- package/dest/test/delayed_tx_utils.d.ts.map +1 -1
- package/dest/test/delayed_tx_utils.js +3 -5
- 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 +0 -2
- package/dest/test/index.d.ts.map +1 -1
- package/dest/test/index.js +0 -2
- package/dest/test/start_anvil.d.ts +0 -1
- package/dest/test/start_anvil.d.ts.map +1 -1
- package/dest/test/start_anvil.js +1 -6
- package/dest/test/tx_delayer.d.ts +1 -8
- package/dest/test/tx_delayer.d.ts.map +1 -1
- package/dest/test/tx_delayer.js +11 -51
- package/dest/test/upgrade_utils.d.ts.map +1 -1
- package/dest/test/upgrade_utils.js +1 -1
- package/package.json +5 -4
- package/src/config.ts +4 -90
- package/src/contracts/governance_proposer.ts +6 -1
- package/src/contracts/multicall.ts +50 -83
- package/src/contracts/rollup.ts +1 -77
- package/src/contracts/slashing_proposer.ts +6 -1
- package/src/deploy_l1_contracts.ts +18 -44
- package/src/{test/eth_cheat_codes.ts → eth_cheat_codes.ts} +12 -16
- package/src/index.ts +1 -0
- package/src/l1_tx_utils.ts +14 -15
- package/src/test/chain_monitor.ts +2 -8
- package/src/test/delayed_tx_utils.ts +3 -7
- package/src/test/eth_cheat_codes_with_state.ts +1 -1
- package/src/test/index.ts +0 -2
- package/src/test/start_anvil.ts +1 -7
- package/src/test/tx_delayer.ts +9 -55
- package/src/test/upgrade_utils.ts +1 -1
- package/dest/test/eth_cheat_codes.d.ts.map +0 -1
- package/dest/test/rollup_cheat_codes.d.ts +0 -81
- package/dest/test/rollup_cheat_codes.d.ts.map +0 -1
- package/dest/test/rollup_cheat_codes.js +0 -236
- package/src/test/rollup_cheat_codes.ts +0 -252
package/dest/config.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ConfigMappingsType
|
|
1
|
+
import { type ConfigMappingsType } from '@aztec/foundation/config';
|
|
2
2
|
import { type L1TxUtilsConfig } from './l1_tx_utils.js';
|
|
3
3
|
export type GenesisStateConfig = {
|
|
4
4
|
/** Whether to populate the genesis state with initial fee juice for the test accounts */
|
|
@@ -49,36 +49,17 @@ export declare const DefaultL1ContractsConfig: {
|
|
|
49
49
|
manaTarget: bigint;
|
|
50
50
|
provingCostPerMana: bigint;
|
|
51
51
|
};
|
|
52
|
-
export declare const
|
|
53
|
-
proposeConfig: {
|
|
54
|
-
lockDelay: bigint;
|
|
55
|
-
lockAmount: bigint;
|
|
56
|
-
};
|
|
57
|
-
votingDelay: bigint;
|
|
58
|
-
votingDuration: bigint;
|
|
59
|
-
executionDelay: bigint;
|
|
60
|
-
gracePeriod: bigint;
|
|
61
|
-
quorum: bigint;
|
|
62
|
-
voteDifferential: bigint;
|
|
63
|
-
minimumVotes: bigint;
|
|
64
|
-
};
|
|
65
|
-
export declare const getRewardConfig: (networkName: NetworkNames) => {
|
|
52
|
+
export declare const DefaultRewardConfig: {
|
|
66
53
|
sequencerBps: number;
|
|
67
|
-
rewardDistributor: `0x${string}`;
|
|
68
|
-
booster: `0x${string}`;
|
|
69
|
-
};
|
|
70
|
-
export declare const getRewardBoostConfig: (networkName: NetworkNames) => {
|
|
71
54
|
increment: number;
|
|
72
55
|
maxScore: number;
|
|
73
56
|
a: number;
|
|
74
57
|
k: number;
|
|
75
58
|
minimum: number;
|
|
76
59
|
};
|
|
77
|
-
export declare const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
normalFlushSizeMin: number;
|
|
81
|
-
normalFlushSizeQuotient: number;
|
|
60
|
+
export declare const DefaultEntryQueueConfig: {
|
|
61
|
+
flushSizeMin: number;
|
|
62
|
+
flushSizeQuotient: number;
|
|
82
63
|
};
|
|
83
64
|
export declare const l1ContractsConfigMappings: ConfigMappingsType<L1ContractsConfig>;
|
|
84
65
|
export declare const genesisStateConfigMappings: ConfigMappingsType<GenesisStateConfig>;
|
package/dest/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EAKxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,KAAK,eAAe,EAA2B,MAAM,kBAAkB,CAAC;AAEjF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,yFAAyF;IACzF,YAAY,EAAE,OAAO,CAAC;IACtB,yFAAyF;IACzF,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,yCAAyC;IACzC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,uFAAuF;IACvF,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wCAAwC;IACxC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2CAA2C;IAC3C,wBAAwB,EAAE,MAAM,CAAC;IACjC,+EAA+E;IAC/E,0BAA0B,EAAE,MAAM,CAAC;IACnC,yCAAyC;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kCAAkC;IAClC,wBAAwB,EAAE,MAAM,CAAC;IACjC,sCAAsC;IACtC,2BAA2B,EAAE,MAAM,CAAC;IACpC,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,kBAAkB,EAAE,MAAM,CAAC;CAC5B,GAAG,eAAe,CAAC;AAEpB,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;CAcR,CAAC;AAK9B,eAAO,MAAM,mBAAmB;;;;;;;CAO/B,CAAC;AAGF,eAAO,MAAM,uBAAuB;;;CAGnC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,kBAAkB,CAAC,iBAAiB,CAmE3E,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,kBAAkB,CAAC,kBAAkB,CAW7E,CAAC;AAEF,wBAAgB,2BAA2B,IAAI,iBAAiB,CAE/D;AAED,wBAAgB,4BAA4B,IAAI,kBAAkB,CAEjE"}
|
package/dest/config.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { bigintConfigHelper, booleanConfigHelper, getConfigFromMappings, numberConfigHelper } from '@aztec/foundation/config';
|
|
2
|
-
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
2
|
import { l1TxUtilsConfigMappings } from './l1_tx_utils.js';
|
|
4
3
|
export const DefaultL1ContractsConfig = {
|
|
5
4
|
ethereumSlotDuration: 12,
|
|
@@ -16,95 +15,21 @@ export const DefaultL1ContractsConfig = {
|
|
|
16
15
|
manaTarget: BigInt(1e10),
|
|
17
16
|
provingCostPerMana: BigInt(100)
|
|
18
17
|
};
|
|
19
|
-
const LocalGovernanceConfiguration = {
|
|
20
|
-
proposeConfig: {
|
|
21
|
-
lockDelay: 60n * 60n * 24n * 30n,
|
|
22
|
-
lockAmount: 1n * 10n ** 24n
|
|
23
|
-
},
|
|
24
|
-
votingDelay: 60n,
|
|
25
|
-
votingDuration: 60n * 60n,
|
|
26
|
-
executionDelay: 60n,
|
|
27
|
-
gracePeriod: 60n * 60n * 24n * 7n,
|
|
28
|
-
quorum: 1n * 10n ** 17n,
|
|
29
|
-
voteDifferential: 4n * 10n ** 16n,
|
|
30
|
-
minimumVotes: 400n * 10n ** 18n
|
|
31
|
-
};
|
|
32
|
-
const TestnetGovernanceConfiguration = {
|
|
33
|
-
proposeConfig: {
|
|
34
|
-
lockDelay: 60n * 60n * 24n,
|
|
35
|
-
lockAmount: DefaultL1ContractsConfig.depositAmount * 100n
|
|
36
|
-
},
|
|
37
|
-
votingDelay: 60n,
|
|
38
|
-
votingDuration: 60n * 60n,
|
|
39
|
-
executionDelay: 60n * 60n * 24n,
|
|
40
|
-
gracePeriod: 60n * 60n * 24n * 7n,
|
|
41
|
-
quorum: 3n * 10n ** 17n,
|
|
42
|
-
voteDifferential: 4n * 10n ** 16n,
|
|
43
|
-
minimumVotes: DefaultL1ContractsConfig.minimumStake * 200n
|
|
44
|
-
};
|
|
45
|
-
export const getGovernanceConfiguration = (networkName)=>{
|
|
46
|
-
if (networkName === 'alpha-testnet' || networkName === 'testnet') {
|
|
47
|
-
return TestnetGovernanceConfiguration;
|
|
48
|
-
}
|
|
49
|
-
return LocalGovernanceConfiguration;
|
|
50
|
-
};
|
|
51
18
|
// Making a default config here as we are only using it thought the deployment
|
|
52
19
|
// and do not expect to be using different setups, so having environment variables
|
|
53
20
|
// for it seems overkill
|
|
54
|
-
const
|
|
55
|
-
sequencerBps: 5000,
|
|
56
|
-
rewardDistributor: EthAddress.ZERO.toString(),
|
|
57
|
-
booster: EthAddress.ZERO.toString()
|
|
58
|
-
};
|
|
59
|
-
const TestnetRewardConfig = {
|
|
21
|
+
export const DefaultRewardConfig = {
|
|
60
22
|
sequencerBps: 5000,
|
|
61
|
-
rewardDistributor: EthAddress.ZERO.toString(),
|
|
62
|
-
booster: EthAddress.ZERO.toString()
|
|
63
|
-
};
|
|
64
|
-
export const getRewardConfig = (networkName)=>{
|
|
65
|
-
if (networkName === 'alpha-testnet' || networkName === 'testnet') {
|
|
66
|
-
return TestnetRewardConfig;
|
|
67
|
-
}
|
|
68
|
-
return LocalRewardConfig;
|
|
69
|
-
};
|
|
70
|
-
const LocalRewardBoostConfig = {
|
|
71
23
|
increment: 200000,
|
|
72
24
|
maxScore: 5000000,
|
|
73
25
|
a: 5000,
|
|
74
26
|
k: 1000000,
|
|
75
27
|
minimum: 100000
|
|
76
28
|
};
|
|
77
|
-
const TestnetRewardBoostConfig = {
|
|
78
|
-
increment: 125000,
|
|
79
|
-
maxScore: 15000000,
|
|
80
|
-
a: 1000,
|
|
81
|
-
k: 1000000,
|
|
82
|
-
minimum: 100000
|
|
83
|
-
};
|
|
84
|
-
export const getRewardBoostConfig = (networkName)=>{
|
|
85
|
-
if (networkName === 'alpha-testnet' || networkName === 'testnet') {
|
|
86
|
-
return TestnetRewardBoostConfig;
|
|
87
|
-
}
|
|
88
|
-
return LocalRewardBoostConfig;
|
|
89
|
-
};
|
|
90
29
|
// Similar to the above, no need for environment variables for this.
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
normalFlushSizeMin: 48,
|
|
95
|
-
normalFlushSizeQuotient: 2
|
|
96
|
-
};
|
|
97
|
-
const TestnetEntryQueueConfig = {
|
|
98
|
-
bootstrapValidatorSetSize: 750,
|
|
99
|
-
bootstrapFlushSize: 75,
|
|
100
|
-
normalFlushSizeMin: 1,
|
|
101
|
-
normalFlushSizeQuotient: 2475
|
|
102
|
-
};
|
|
103
|
-
export const getEntryQueueConfig = (networkName)=>{
|
|
104
|
-
if (networkName === 'alpha-testnet' || networkName === 'testnet') {
|
|
105
|
-
return TestnetEntryQueueConfig;
|
|
106
|
-
}
|
|
107
|
-
return LocalEntryQueueConfig;
|
|
30
|
+
export const DefaultEntryQueueConfig = {
|
|
31
|
+
flushSizeMin: 48,
|
|
32
|
+
flushSizeQuotient: 2
|
|
108
33
|
};
|
|
109
34
|
export const l1ContractsConfigMappings = {
|
|
110
35
|
ethereumSlotDuration: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"governance_proposer.d.ts","sourceRoot":"","sources":["../../src/contracts/governance_proposer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAA8B,KAAK,GAAG,EAAE,KAAK,kBAAkB,EAAmC,MAAM,MAAM,CAAC;AAEtH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,KAAK,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,KAAK,WAAW,EAAwD,MAAM,kBAAkB,CAAC;AAG1G,qBAAa,0BAA2B,YAAW,WAAW;aAI1C,MAAM,EAAE,UAAU;IAHpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkE;gBAGzE,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG;IAKd,IAAW,OAAO,eAEjB;IAEY,gBAAgB;IAKhB,kBAAkB;IAIxB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAIhC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3C,QAAQ,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlC,YAAY,CACvB,aAAa,EAAE,GAAG,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"governance_proposer.d.ts","sourceRoot":"","sources":["../../src/contracts/governance_proposer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAA8B,KAAK,GAAG,EAAE,KAAK,kBAAkB,EAAmC,MAAM,MAAM,CAAC;AAEtH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,KAAK,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,KAAK,WAAW,EAAwD,MAAM,kBAAkB,CAAC;AAG1G,qBAAa,0BAA2B,YAAW,WAAW;aAI1C,MAAM,EAAE,UAAU;IAHpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkE;gBAGzE,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG;IAKd,IAAW,OAAO,eAEjB;IAEY,gBAAgB;IAKhB,kBAAkB;IAIxB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAIhC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3C,QAAQ,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlC,YAAY,CACvB,aAAa,EAAE,GAAG,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IASzD,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAInF,iBAAiB,CAAC,OAAO,EAAE,GAAG,GAAG,WAAW;IAOtC,8BAA8B,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,WAAW,CAAC;IASpG,eAAe,CAC1B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC;QACT,OAAO,EAAE,kBAAkB,CAAC;QAC5B,QAAQ,EAAE,QAAQ,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CAYH"}
|
|
@@ -47,10 +47,15 @@ export class GovernanceProposerContract {
|
|
|
47
47
|
]);
|
|
48
48
|
}
|
|
49
49
|
async getRoundInfo(rollupAddress, round) {
|
|
50
|
-
|
|
50
|
+
const roundInfo = await this.proposer.read.rounds([
|
|
51
51
|
rollupAddress,
|
|
52
52
|
round
|
|
53
53
|
]);
|
|
54
|
+
return {
|
|
55
|
+
lastVote: roundInfo[0],
|
|
56
|
+
leader: roundInfo[1],
|
|
57
|
+
executed: roundInfo[2]
|
|
58
|
+
};
|
|
54
59
|
}
|
|
55
60
|
getProposalVotes(rollupAddress, round, proposal) {
|
|
56
61
|
return this.proposer.read.yeaCount([
|
|
@@ -2,10 +2,9 @@ import type { Logger } from '@aztec/foundation/log';
|
|
|
2
2
|
import { type Hex } from 'viem';
|
|
3
3
|
import type { L1BlobInputs, L1GasConfig, L1TxRequest, L1TxUtils } from '../l1_tx_utils.js';
|
|
4
4
|
import type { ExtendedViemWalletClient } from '../types.js';
|
|
5
|
-
import { FormattedViemError } from '../utils.js';
|
|
6
5
|
export declare const MULTI_CALL_3_ADDRESS: "0xcA11bde05977b3631167028862bE2a173976CA11";
|
|
7
6
|
export declare class Multicall3 {
|
|
8
|
-
static forward(requests: L1TxRequest[], l1TxUtils: L1TxUtils, gasConfig: L1GasConfig | undefined, blobConfig: L1BlobInputs | undefined, rollupAddress: Hex, logger: Logger): Promise<
|
|
7
|
+
static forward(requests: L1TxRequest[], l1TxUtils: L1TxUtils, gasConfig: L1GasConfig | undefined, blobConfig: L1BlobInputs | undefined, rollupAddress: Hex, logger: Logger): Promise<{
|
|
9
8
|
receipt: import("viem").TransactionReceipt;
|
|
10
9
|
gasPrice: import("../l1_tx_utils.js").GasPrice;
|
|
11
10
|
stats: import("../l1_tx_utils.js").TransactionStats | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multicall.d.ts","sourceRoot":"","sources":["../../src/contracts/multicall.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAqC,KAAK,GAAG,EAAqC,MAAM,MAAM,CAAC;AAEtG,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"multicall.d.ts","sourceRoot":"","sources":["../../src/contracts/multicall.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAqC,KAAK,GAAG,EAAqC,MAAM,MAAM,CAAC;AAEtG,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAG5D,eAAO,MAAM,oBAAoB,EAAG,4CAAqD,CAAC;AAE1F,qBAAa,UAAU;WACR,OAAO,CAClB,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,WAAW,GAAG,SAAS,EAClC,UAAU,EAAE,YAAY,GAAG,SAAS,EACpC,aAAa,EAAE,GAAG,EAClB,MAAM,EAAE,MAAM;;;;;;;;;;;CAyEjB;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,iBAyBxF"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { toHex as toPaddedHex } from '@aztec/foundation/bigint-buffer';
|
|
2
2
|
import { encodeFunctionData, multicall3Abi } from 'viem';
|
|
3
|
-
import { FormattedViemError, formatViemError } from '../utils.js';
|
|
4
3
|
import { RollupContract } from './rollup.js';
|
|
5
4
|
export const MULTI_CALL_3_ADDRESS = '0xcA11bde05977b3631167028862bE2a173976CA11';
|
|
6
5
|
export class Multicall3 {
|
|
@@ -19,100 +18,61 @@ export class Multicall3 {
|
|
|
19
18
|
]
|
|
20
19
|
};
|
|
21
20
|
const encodedForwarderData = encodeFunctionData(forwarderFunctionData);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
-
}
|
|
21
|
+
const { receipt, gasPrice } = await l1TxUtils.sendAndMonitorTransaction({
|
|
22
|
+
to: MULTI_CALL_3_ADDRESS,
|
|
23
|
+
data: encodedForwarderData
|
|
24
|
+
}, gasConfig, blobConfig);
|
|
25
|
+
if (receipt.status === 'success') {
|
|
26
|
+
const stats = await l1TxUtils.getTransactionStats(receipt.transactionHash);
|
|
27
|
+
return {
|
|
28
|
+
receipt,
|
|
29
|
+
gasPrice,
|
|
30
|
+
stats
|
|
31
|
+
};
|
|
32
|
+
} else {
|
|
33
|
+
logger.error('Forwarder transaction failed', undefined, {
|
|
34
|
+
receipt
|
|
35
|
+
});
|
|
36
|
+
const args = {
|
|
37
|
+
...forwarderFunctionData,
|
|
38
|
+
address: MULTI_CALL_3_ADDRESS
|
|
39
|
+
};
|
|
40
|
+
let errorMsg;
|
|
41
|
+
if (blobConfig) {
|
|
42
|
+
const maxFeePerBlobGas = blobConfig.maxFeePerBlobGas ?? gasPrice.maxFeePerBlobGas;
|
|
43
|
+
if (maxFeePerBlobGas === undefined) {
|
|
44
|
+
errorMsg = 'maxFeePerBlobGas is required to get the error message';
|
|
65
45
|
} else {
|
|
66
|
-
logger.debug('Trying to get error from reverted tx
|
|
67
|
-
errorMsg = await l1TxUtils.tryGetErrorFromRevertedTx(encodedForwarderData, args,
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
address: rollupAddress,
|
|
83
|
-
stateDiff: [
|
|
84
|
-
{
|
|
85
|
-
slot: toPaddedHex(RollupContract.checkBlobStorageSlot, true),
|
|
86
|
-
value: toPaddedHex(0n, true)
|
|
87
|
-
}
|
|
88
|
-
]
|
|
89
|
-
}
|
|
90
|
-
]).catch((err)=>formatViemError(err, request.abi));
|
|
91
|
-
if (result instanceof FormattedViemError) {
|
|
92
|
-
logger.error('Found error in simulation', result, {
|
|
93
|
-
to: request.to ?? 'null',
|
|
94
|
-
data: request.data
|
|
95
|
-
});
|
|
96
|
-
return result;
|
|
46
|
+
logger.debug('Trying to get error from reverted tx with blob config');
|
|
47
|
+
errorMsg = await l1TxUtils.tryGetErrorFromRevertedTx(encodedForwarderData, args, {
|
|
48
|
+
blobs: blobConfig.blobs,
|
|
49
|
+
kzg: blobConfig.kzg,
|
|
50
|
+
maxFeePerBlobGas
|
|
51
|
+
}, [
|
|
52
|
+
{
|
|
53
|
+
address: rollupAddress,
|
|
54
|
+
stateDiff: [
|
|
55
|
+
{
|
|
56
|
+
slot: toPaddedHex(RollupContract.checkBlobStorageSlot, true),
|
|
57
|
+
value: toPaddedHex(0n, true)
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
]);
|
|
97
62
|
}
|
|
63
|
+
} else {
|
|
64
|
+
logger.debug('Trying to get error from reverted tx without blob config');
|
|
65
|
+
errorMsg = await l1TxUtils.tryGetErrorFromRevertedTx(encodedForwarderData, args, undefined, []);
|
|
98
66
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
67
|
+
return {
|
|
68
|
+
receipt,
|
|
69
|
+
gasPrice,
|
|
70
|
+
errorMsg
|
|
71
|
+
};
|
|
103
72
|
}
|
|
104
73
|
}
|
|
105
74
|
}
|
|
106
75
|
export async function deployMulticall3(l1Client, logger) {
|
|
107
|
-
const existing = await l1Client.getCode({
|
|
108
|
-
address: MULTI_CALL_3_ADDRESS
|
|
109
|
-
});
|
|
110
|
-
if (existing && existing !== '0x') {
|
|
111
|
-
logger.verbose('Multicall3 already deployed', {
|
|
112
|
-
address: MULTI_CALL_3_ADDRESS
|
|
113
|
-
});
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
76
|
const deployer = '0x05f32b3cc3888453ff71b01135b34ff8e41263f2';
|
|
117
77
|
const sendEth = await l1Client.sendTransaction({
|
|
118
78
|
to: deployer,
|
|
@@ -12,10 +12,6 @@ export type ViemCommitteeAttestation = {
|
|
|
12
12
|
addr: `0x${string}`;
|
|
13
13
|
signature: ViemSignature;
|
|
14
14
|
};
|
|
15
|
-
export type ViemCommitteeAttestations = {
|
|
16
|
-
signatureIndices: `0x${string}`;
|
|
17
|
-
signaturesOrAddresses: `0x${string}`;
|
|
18
|
-
};
|
|
19
15
|
export type L1RollupContractAddresses = Pick<L1ContractAddresses, 'rollupAddress' | 'inboxAddress' | 'outboxAddress' | 'feeJuicePortalAddress' | 'feeJuiceAddress' | 'stakingAssetAddress' | 'rewardDistributorAddress' | 'slashFactoryAddress' | 'gseAddress'>;
|
|
20
16
|
export type EpochProofPublicInputArgs = {
|
|
21
17
|
previousArchive: `0x${string}`;
|
|
@@ -101,13 +97,6 @@ export declare class RollupContract {
|
|
|
101
97
|
headerHash: `0x${string}`;
|
|
102
98
|
blobCommitmentsHash: `0x${string}`;
|
|
103
99
|
slotNumber: bigint;
|
|
104
|
-
feeHeader: {
|
|
105
|
-
excessMana: bigint;
|
|
106
|
-
manaUsed: bigint;
|
|
107
|
-
feeAssetPriceNumerator: bigint;
|
|
108
|
-
congestionCost: bigint;
|
|
109
|
-
proverCost: bigint;
|
|
110
|
-
};
|
|
111
100
|
}>;
|
|
112
101
|
getTips(): Promise<{
|
|
113
102
|
pendingBlockNumber: bigint;
|
|
@@ -121,7 +110,7 @@ export declare class RollupContract {
|
|
|
121
110
|
getEpochProofPublicInputs(args: readonly [bigint, bigint, EpochProofPublicInputArgs, readonly `0x${string}`[], `0x${string}`]): Promise<readonly `0x${string}`[]>;
|
|
122
111
|
validateHeader(args: readonly [
|
|
123
112
|
ViemHeader,
|
|
124
|
-
|
|
113
|
+
ViemCommitteeAttestation[],
|
|
125
114
|
`0x${string}`,
|
|
126
115
|
`0x${string}`,
|
|
127
116
|
{
|
|
@@ -129,13 +118,6 @@ export declare class RollupContract {
|
|
|
129
118
|
ignoreSignatures: boolean;
|
|
130
119
|
}
|
|
131
120
|
], account: `0x${string}` | Account): Promise<void>;
|
|
132
|
-
/**
|
|
133
|
-
* Packs an array of committee attestations into the format expected by the Solidity contract
|
|
134
|
-
*
|
|
135
|
-
* @param attestations - Array of committee attestations with addresses and signatures
|
|
136
|
-
* @returns Packed attestations with bitmap and tightly packed signature/address data
|
|
137
|
-
*/
|
|
138
|
-
static packAttestations(attestations: ViemCommitteeAttestation[]): ViemCommitteeAttestations;
|
|
139
121
|
/**
|
|
140
122
|
* @notice Calls `canProposeAtTime` with the time of the next Ethereum block and the sender address
|
|
141
123
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rollup.d.ts","sourceRoot":"","sources":["../../src/contracts/rollup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAI1D,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,GAAG,EAA+C,MAAM,MAAM,CAAC;AAGvH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAGlE,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,aAAa,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG
|
|
1
|
+
{"version":3,"file":"rollup.d.ts","sourceRoot":"","sources":["../../src/contracts/rollup.ts"],"names":[],"mappings":"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"}
|
package/dest/contracts/rollup.js
CHANGED
|
@@ -267,64 +267,6 @@ export class RollupContract {
|
|
|
267
267
|
}
|
|
268
268
|
}
|
|
269
269
|
/**
|
|
270
|
-
* Packs an array of committee attestations into the format expected by the Solidity contract
|
|
271
|
-
*
|
|
272
|
-
* @param attestations - Array of committee attestations with addresses and signatures
|
|
273
|
-
* @returns Packed attestations with bitmap and tightly packed signature/address data
|
|
274
|
-
*/ static packAttestations(attestations) {
|
|
275
|
-
const length = attestations.length;
|
|
276
|
-
// Calculate bitmap size (1 bit per attestation, rounded up to nearest byte)
|
|
277
|
-
const bitmapSize = Math.ceil(length / 8);
|
|
278
|
-
const signatureIndices = new Uint8Array(bitmapSize);
|
|
279
|
-
// Calculate total data size needed
|
|
280
|
-
let totalDataSize = 0;
|
|
281
|
-
for(let i = 0; i < length; i++){
|
|
282
|
-
const signature = attestations[i].signature;
|
|
283
|
-
// Check if signature is empty (v = 0)
|
|
284
|
-
const isEmpty = signature.v === 0;
|
|
285
|
-
if (!isEmpty) {
|
|
286
|
-
totalDataSize += 65; // v (1) + r (32) + s (32)
|
|
287
|
-
} else {
|
|
288
|
-
totalDataSize += 20; // address only
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
const signaturesOrAddresses = new Uint8Array(totalDataSize);
|
|
292
|
-
let dataIndex = 0;
|
|
293
|
-
// Pack the data
|
|
294
|
-
for(let i = 0; i < length; i++){
|
|
295
|
-
const attestation = attestations[i];
|
|
296
|
-
const signature = attestation.signature;
|
|
297
|
-
// Check if signature is empty
|
|
298
|
-
const isEmpty = signature.v === 0;
|
|
299
|
-
if (!isEmpty) {
|
|
300
|
-
// Set bit in bitmap (bit 7-0 in each byte, left to right)
|
|
301
|
-
const byteIndex = Math.floor(i / 8);
|
|
302
|
-
const bitIndex = 7 - i % 8;
|
|
303
|
-
signatureIndices[byteIndex] |= 1 << bitIndex;
|
|
304
|
-
// Pack signature: v + r + s
|
|
305
|
-
signaturesOrAddresses[dataIndex] = signature.v;
|
|
306
|
-
dataIndex++;
|
|
307
|
-
// Pack r (32 bytes)
|
|
308
|
-
const rBytes = Buffer.from(signature.r.slice(2), 'hex');
|
|
309
|
-
signaturesOrAddresses.set(rBytes, dataIndex);
|
|
310
|
-
dataIndex += 32;
|
|
311
|
-
// Pack s (32 bytes)
|
|
312
|
-
const sBytes = Buffer.from(signature.s.slice(2), 'hex');
|
|
313
|
-
signaturesOrAddresses.set(sBytes, dataIndex);
|
|
314
|
-
dataIndex += 32;
|
|
315
|
-
} else {
|
|
316
|
-
// Pack address only (20 bytes)
|
|
317
|
-
const addrBytes = Buffer.from(attestation.addr.slice(2), 'hex');
|
|
318
|
-
signaturesOrAddresses.set(addrBytes, dataIndex);
|
|
319
|
-
dataIndex += 20;
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
return {
|
|
323
|
-
signatureIndices: `0x${Buffer.from(signatureIndices).toString('hex')}`,
|
|
324
|
-
signaturesOrAddresses: `0x${Buffer.from(signaturesOrAddresses).toString('hex')}`
|
|
325
|
-
};
|
|
326
|
-
}
|
|
327
|
-
/**
|
|
328
270
|
* @notice Calls `canProposeAtTime` with the time of the next Ethereum block and the sender address
|
|
329
271
|
*
|
|
330
272
|
* @dev Throws if unable to propose
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slashing_proposer.d.ts","sourceRoot":"","sources":["../../src/contracts/slashing_proposer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAI3D,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,EAGL,KAAK,GAAG,EAGT,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAExE,OAAO,EAAE,KAAK,WAAW,EAAwD,MAAM,kBAAkB,CAAC;AAE1G,qBAAa,4BAA6B,SAAQ,KAAK;gBACzC,KAAK,EAAE,MAAM;CAG1B;AAED,qBAAa,wBAAyB,SAAQ,YAAa,YAAW,WAAW;aAI7D,MAAM,EAAE,UAAU;IAHpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgE;gBAGvE,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG;IAMd,IAAW,OAAO,eAEjB;IAEM,aAAa;IAIb,YAAY;IAIZ,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3C,QAAQ,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlC,YAAY,CACvB,aAAa,EAAE,GAAG,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"slashing_proposer.d.ts","sourceRoot":"","sources":["../../src/contracts/slashing_proposer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAI3D,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,EAGL,KAAK,GAAG,EAGT,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAExE,OAAO,EAAE,KAAK,WAAW,EAAwD,MAAM,kBAAkB,CAAC;AAE1G,qBAAa,4BAA6B,SAAQ,KAAK;gBACzC,KAAK,EAAE,MAAM;CAG1B;AAED,qBAAa,wBAAyB,SAAQ,YAAa,YAAW,WAAW;aAI7D,MAAM,EAAE,UAAU;IAHpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgE;gBAGvE,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG;IAMd,IAAW,OAAO,eAEjB;IAEM,aAAa;IAIb,YAAY;IAIZ,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3C,QAAQ,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlC,YAAY,CACvB,aAAa,EAAE,GAAG,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IASzD,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAInF,iBAAiB,CAAC,OAAO,EAAE,GAAG,GAAG,WAAW;IAOtC,8BAA8B,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,WAAW,CAAC;IAS1G,2BAA2B,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,KAAK,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO;IAiBnG,wBAAwB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,KAAK,MAAM,EAAE,CAAA;KAAE,KAAK,OAAO;IAgBhG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,sBAAsB,GAAE,MAAU;IAYxD,YAAY,CACvB,OAAO,EAAE,SAAS,EAClB,KAAK,EAAE,MAAM,GAAG,MAAM,GACrB,UAAU,CAAC,OAAO,OAAO,CAAC,yBAAyB,CAAC;CA+CxD"}
|
|
@@ -41,10 +41,15 @@ export class SlashingProposerContract extends EventEmitter {
|
|
|
41
41
|
]);
|
|
42
42
|
}
|
|
43
43
|
async getRoundInfo(rollupAddress, round) {
|
|
44
|
-
|
|
44
|
+
const roundInfo = await this.proposer.read.rounds([
|
|
45
45
|
rollupAddress,
|
|
46
46
|
round
|
|
47
47
|
]);
|
|
48
|
+
return {
|
|
49
|
+
lastVote: roundInfo[0],
|
|
50
|
+
leader: roundInfo[1],
|
|
51
|
+
executed: roundInfo[2]
|
|
52
|
+
};
|
|
48
53
|
}
|
|
49
54
|
getProposalVotes(rollupAddress, round, proposal) {
|
|
50
55
|
return this.proposer.read.yeaCount([
|