@aztec/ethereum 3.0.0-nightly.20251216 → 3.0.0-nightly.20251217
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/deploy_aztec_l1_contracts.d.ts +2 -2
- package/dest/deploy_aztec_l1_contracts.d.ts.map +1 -1
- package/dest/deploy_aztec_l1_contracts.js +144 -111
- package/dest/l1_contract_addresses.d.ts +1 -1
- package/dest/l1_contract_addresses.d.ts.map +1 -1
- package/dest/l1_contract_addresses.js +3 -3
- package/dest/l1_tx_utils/constants.d.ts +7 -1
- package/dest/l1_tx_utils/constants.d.ts.map +1 -1
- package/dest/l1_tx_utils/constants.js +25 -0
- package/dest/l1_tx_utils/fee-strategies/index.d.ts +9 -0
- package/dest/l1_tx_utils/fee-strategies/index.d.ts.map +1 -0
- package/dest/l1_tx_utils/fee-strategies/index.js +11 -0
- package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts +18 -0
- package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts.map +1 -0
- package/dest/l1_tx_utils/fee-strategies/p75_competitive.js +111 -0
- package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.d.ts +32 -0
- package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.d.ts.map +1 -0
- package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.js +173 -0
- package/dest/l1_tx_utils/fee-strategies/types.d.ts +64 -0
- package/dest/l1_tx_utils/fee-strategies/types.d.ts.map +1 -0
- package/dest/l1_tx_utils/fee-strategies/types.js +24 -0
- package/dest/l1_tx_utils/index.d.ts +3 -1
- package/dest/l1_tx_utils/index.d.ts.map +1 -1
- package/dest/l1_tx_utils/index.js +2 -0
- package/dest/l1_tx_utils/l1_fee_analyzer.d.ts +232 -0
- package/dest/l1_tx_utils/l1_fee_analyzer.d.ts.map +1 -0
- package/dest/l1_tx_utils/l1_fee_analyzer.js +506 -0
- package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts +1 -10
- package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts.map +1 -1
- package/dest/l1_tx_utils/readonly_l1_tx_utils.js +43 -121
- package/dest/utils.d.ts +14 -2
- package/dest/utils.d.ts.map +1 -1
- package/dest/utils.js +18 -0
- package/package.json +6 -5
- package/src/deploy_aztec_l1_contracts.ts +141 -111
- package/src/l1_contract_addresses.ts +22 -20
- package/src/l1_tx_utils/constants.ts +11 -0
- package/src/l1_tx_utils/fee-strategies/index.ts +22 -0
- package/src/l1_tx_utils/fee-strategies/p75_competitive.ts +159 -0
- package/src/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.ts +241 -0
- package/src/l1_tx_utils/fee-strategies/types.ts +88 -0
- package/src/l1_tx_utils/index.ts +2 -0
- package/src/l1_tx_utils/l1_fee_analyzer.ts +803 -0
- package/src/l1_tx_utils/readonly_l1_tx_utils.ts +47 -158
- package/src/utils.ts +29 -0
|
@@ -86,7 +86,7 @@ export interface ForgeL1ContractsDeployResult extends ForgeRollupUpgradeResult {
|
|
|
86
86
|
* @param options - Additional deployment options (all optional with sensible defaults)
|
|
87
87
|
* @returns The deployment result with all contract addresses and an l1Client
|
|
88
88
|
*/
|
|
89
|
-
export declare function deployAztecL1Contracts(rpcUrl: string, privateKey: `0x${string}`, chainId: number, args: DeployAztecL1ContractsArgs): Promise<DeployAztecL1ContractsReturnType>;
|
|
89
|
+
export declare function deployAztecL1Contracts(rpcUrl: string, privateKey: `0x${string}`, chainId: number, args: DeployAztecL1ContractsArgs, verifyContracts?: boolean): Promise<DeployAztecL1ContractsReturnType>;
|
|
90
90
|
export declare const DEPLOYER_ADDRESS: Hex;
|
|
91
91
|
export type Operator = {
|
|
92
92
|
attester: EthAddress;
|
|
@@ -242,4 +242,4 @@ export declare const deployRollupForUpgrade: (privateKey: `0x${string}`, rpcUrl:
|
|
|
242
242
|
rollup: RollupContract;
|
|
243
243
|
slashFactoryAddress: `0x${string}`;
|
|
244
244
|
}>;
|
|
245
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
245
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95X2F6dGVjX2wxX2NvbnRyYWN0cy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2RlcGxveV9henRlY19sMV9jb250cmFjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFdBQVcsRUFBd0IsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFJM0QsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJcEQsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQU0zQyxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFLaEMsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEUsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDL0QsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUEyRTNELE1BQU0sV0FBVyxXQUFXO0lBQzFCLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWCxFQUFFLEVBQUUsTUFBTSxDQUFDO0lBQ1gsRUFBRSxFQUFFLE1BQU0sQ0FBQztJQUNYLEVBQUUsRUFBRSxNQUFNLENBQUM7Q0FDWjtBQUVEOzs7R0FHRztBQUNILE1BQU0sV0FBVyxhQUFhO0lBQzVCLFFBQVEsRUFBRSxNQUFNLENBQUM7SUFDakIsVUFBVSxFQUFFLE1BQU0sQ0FBQztJQUNuQixxQ0FBcUM7SUFDckMsVUFBVSxFQUFFLE1BQU0sQ0FBQztJQUNuQixrRUFBa0U7SUFDbEUsYUFBYSxFQUFFLFdBQVcs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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy_aztec_l1_contracts.d.ts","sourceRoot":"","sources":["../src/deploy_aztec_l1_contracts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAwB,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAI3D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,2BAA2B,CAAC;AAIpD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy_aztec_l1_contracts.d.ts","sourceRoot":"","sources":["../src/deploy_aztec_l1_contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,9 @@ import { promiseWithResolvers } from '@aztec/foundation/promise';
|
|
|
7
7
|
import { fileURLToPath } from '@aztec/foundation/url';
|
|
8
8
|
import { bn254 } from '@noble/curves/bn254';
|
|
9
9
|
import { spawn } from 'child_process';
|
|
10
|
-
import {
|
|
10
|
+
import { cp, mkdtemp, rm } from 'fs/promises';
|
|
11
|
+
import { tmpdir } from 'os';
|
|
12
|
+
import { dirname, join, resolve } from 'path';
|
|
11
13
|
import readline from 'readline';
|
|
12
14
|
import { foundry, mainnet } from 'viem/chains';
|
|
13
15
|
import { createEthereumChain, isAnvilTestChain } from './chain.js';
|
|
@@ -62,6 +64,17 @@ const JSON_DEPLOY_RESULT_PREFIX = 'JSON DEPLOY RESULT:';
|
|
|
62
64
|
});
|
|
63
65
|
return promise;
|
|
64
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Copies the foundry cache folder to a temporary location to avoid conflicts when running forge in parallel.
|
|
69
|
+
* The cache folder is small metadata that links to the out folder, so this is a fast operation.
|
|
70
|
+
*/ async function copyFoundryCacheToTemp(l1ContractsPath) {
|
|
71
|
+
const cacheFolder = join(l1ContractsPath, 'cache');
|
|
72
|
+
const tempCacheFolder = await mkdtemp(join(tmpdir(), 'foundry-cache-'));
|
|
73
|
+
await cp(cacheFolder, tempCacheFolder, {
|
|
74
|
+
recursive: true
|
|
75
|
+
});
|
|
76
|
+
return tempCacheFolder;
|
|
77
|
+
}
|
|
65
78
|
// Covers an edge where where we may have a cached BlobLib that is not meant for production.
|
|
66
79
|
// Despite the profile apparently sometimes cached code remains (so says Lasse after his ignition-monorepo arc).
|
|
67
80
|
async function maybeForgeForceProductionBuild(l1ContractsPath, script, chainId) {
|
|
@@ -120,7 +133,7 @@ async function maybeForgeForceProductionBuild(l1ContractsPath, script, chainId)
|
|
|
120
133
|
* @param privateKey - The private key for the deployer (with 0x prefix)
|
|
121
134
|
* @param options - Additional deployment options (all optional with sensible defaults)
|
|
122
135
|
* @returns The deployment result with all contract addresses and an l1Client
|
|
123
|
-
*/ export async function deployAztecL1Contracts(rpcUrl, privateKey, chainId, args) {
|
|
136
|
+
*/ export async function deployAztecL1Contracts(rpcUrl, privateKey, chainId, args, verifyContracts = false) {
|
|
124
137
|
logger.info(`Deploying L1 contracts with config: ${jsonStringify(args)}`);
|
|
125
138
|
if (args.initialValidators && args.initialValidators.length > 0 && args.existingTokenAddress) {
|
|
126
139
|
throw new Error('Cannot deploy with both initialValidators and existingTokenAddress. ' + 'Initial validator funding requires minting tokens, which is not possible with an external token.');
|
|
@@ -159,88 +172,99 @@ async function maybeForgeForceProductionBuild(l1ContractsPath, script, chainId)
|
|
|
159
172
|
const l1ContractsPath = resolve(currentDir, '..', '..', '..', 'l1-contracts');
|
|
160
173
|
const FORGE_SCRIPT = 'script/deploy/DeployAztecL1Contracts.s.sol';
|
|
161
174
|
await maybeForgeForceProductionBuild(l1ContractsPath, FORGE_SCRIPT, chainId);
|
|
162
|
-
//
|
|
163
|
-
const
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
]);
|
|
208
|
-
await rpcCall('hardhat_mine', [
|
|
209
|
-
1
|
|
210
|
-
]);
|
|
175
|
+
// Copy cache to temp location to avoid conflicts when running forge in parallel
|
|
176
|
+
const tempCachePath = await copyFoundryCacheToTemp(l1ContractsPath);
|
|
177
|
+
try {
|
|
178
|
+
// From heuristic testing. More caused issues with anvil.
|
|
179
|
+
const MAGIC_ANVIL_BATCH_SIZE = 12;
|
|
180
|
+
// Anvil seems to stall with unbounded batch size. Otherwise no max batch size is desirable.
|
|
181
|
+
// On sepolia and mainnet, we verify on etherscan (if etherscan API key is in env)
|
|
182
|
+
const forgeArgs = [
|
|
183
|
+
'script',
|
|
184
|
+
FORGE_SCRIPT,
|
|
185
|
+
'--sig',
|
|
186
|
+
'run()',
|
|
187
|
+
'--private-key',
|
|
188
|
+
privateKey,
|
|
189
|
+
'--rpc-url',
|
|
190
|
+
rpcUrl,
|
|
191
|
+
'--broadcast',
|
|
192
|
+
...chainId === foundry.id ? [
|
|
193
|
+
'--batch-size',
|
|
194
|
+
MAGIC_ANVIL_BATCH_SIZE.toString()
|
|
195
|
+
] : [],
|
|
196
|
+
...verifyContracts ? [
|
|
197
|
+
'--verify'
|
|
198
|
+
] : []
|
|
199
|
+
];
|
|
200
|
+
const forgeEnv = {
|
|
201
|
+
// Protect against root leaving deployment files in docker that cannot be used later.
|
|
202
|
+
FOUNDRY_BROADCAST: process.getuid?.() === 0 ? 'broadcast-root' : tempCachePath,
|
|
203
|
+
// Env vars required by l1-contracts/script/deploy/DeploymentConfiguration.sol.
|
|
204
|
+
NETWORK: getActiveNetworkName(),
|
|
205
|
+
FOUNDRY_PROFILE: chainId === mainnet.id ? 'production' : undefined,
|
|
206
|
+
FOUNDRY_CACHE_PATH: tempCachePath,
|
|
207
|
+
...getDeployAztecL1ContractsEnvVars(args)
|
|
208
|
+
};
|
|
209
|
+
const result = await runProcess('forge', forgeArgs, forgeEnv, l1ContractsPath);
|
|
210
|
+
if (!result) {
|
|
211
|
+
throw new Error('Forge script did not output deployment result');
|
|
212
|
+
}
|
|
213
|
+
logger.info(`Deployed L1 contracts with L1 addresses: ${jsonStringify(result)}`);
|
|
214
|
+
const rollup = new RollupContract(l1Client, result.rollupAddress);
|
|
215
|
+
if (isAnvilTestChain(chainId)) {
|
|
216
|
+
// @note We make a time jump PAST the very first slot to not have to deal with the edge case of the first slot.
|
|
217
|
+
// The edge case being that the genesis block is already occupying slot 0, so we cannot have another block.
|
|
218
|
+
try {
|
|
219
|
+
// Need to get the time
|
|
211
220
|
const currentSlot = await rollup.getSlotNumber();
|
|
212
|
-
if (currentSlot
|
|
213
|
-
|
|
221
|
+
if (currentSlot === 0) {
|
|
222
|
+
const ts = Number(await rollup.getTimestampForSlot(SlotNumber(1)));
|
|
223
|
+
await rpcCall('evm_setNextBlockTimestamp', [
|
|
224
|
+
ts
|
|
225
|
+
]);
|
|
226
|
+
await rpcCall('hardhat_mine', [
|
|
227
|
+
1
|
|
228
|
+
]);
|
|
229
|
+
const currentSlot = await rollup.getSlotNumber();
|
|
230
|
+
if (currentSlot !== 1) {
|
|
231
|
+
throw new Error(`Error jumping time: current slot is ${currentSlot}`);
|
|
232
|
+
}
|
|
233
|
+
logger.info(`Jumped to slot 1`);
|
|
214
234
|
}
|
|
215
|
-
|
|
235
|
+
} catch (e) {
|
|
236
|
+
throw new Error(`Error jumping time: ${e}`);
|
|
216
237
|
}
|
|
217
|
-
} catch (e) {
|
|
218
|
-
throw new Error(`Error jumping time: ${e}`);
|
|
219
238
|
}
|
|
239
|
+
return {
|
|
240
|
+
l1Client,
|
|
241
|
+
rollupVersion: result.rollupVersion,
|
|
242
|
+
l1ContractAddresses: {
|
|
243
|
+
rollupAddress: EthAddress.fromString(result.rollupAddress),
|
|
244
|
+
registryAddress: EthAddress.fromString(result.registryAddress),
|
|
245
|
+
inboxAddress: EthAddress.fromString(result.inboxAddress),
|
|
246
|
+
outboxAddress: EthAddress.fromString(result.outboxAddress),
|
|
247
|
+
feeJuiceAddress: EthAddress.fromString(result.feeAssetAddress),
|
|
248
|
+
feeJuicePortalAddress: EthAddress.fromString(result.feeJuicePortalAddress),
|
|
249
|
+
coinIssuerAddress: EthAddress.fromString(result.coinIssuerAddress),
|
|
250
|
+
rewardDistributorAddress: EthAddress.fromString(result.rewardDistributorAddress),
|
|
251
|
+
governanceProposerAddress: EthAddress.fromString(result.governanceProposerAddress),
|
|
252
|
+
governanceAddress: EthAddress.fromString(result.governanceAddress),
|
|
253
|
+
stakingAssetAddress: EthAddress.fromString(result.stakingAssetAddress),
|
|
254
|
+
slashFactoryAddress: result.slashFactoryAddress ? EthAddress.fromString(result.slashFactoryAddress) : undefined,
|
|
255
|
+
feeAssetHandlerAddress: result.feeAssetHandlerAddress ? EthAddress.fromString(result.feeAssetHandlerAddress) : undefined,
|
|
256
|
+
stakingAssetHandlerAddress: result.stakingAssetHandlerAddress ? EthAddress.fromString(result.stakingAssetHandlerAddress) : undefined,
|
|
257
|
+
zkPassportVerifierAddress: result.zkPassportVerifierAddress ? EthAddress.fromString(result.zkPassportVerifierAddress) : undefined,
|
|
258
|
+
gseAddress: result.gseAddress ? EthAddress.fromString(result.gseAddress) : undefined,
|
|
259
|
+
dateGatedRelayerAddress: result.dateGatedRelayerAddress ? EthAddress.fromString(result.dateGatedRelayerAddress) : undefined
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
} finally{
|
|
263
|
+
await rm(tempCachePath, {
|
|
264
|
+
recursive: true,
|
|
265
|
+
force: true
|
|
266
|
+
});
|
|
220
267
|
}
|
|
221
|
-
return {
|
|
222
|
-
l1Client,
|
|
223
|
-
rollupVersion: result.rollupVersion,
|
|
224
|
-
l1ContractAddresses: {
|
|
225
|
-
rollupAddress: EthAddress.fromString(result.rollupAddress),
|
|
226
|
-
registryAddress: EthAddress.fromString(result.registryAddress),
|
|
227
|
-
inboxAddress: EthAddress.fromString(result.inboxAddress),
|
|
228
|
-
outboxAddress: EthAddress.fromString(result.outboxAddress),
|
|
229
|
-
feeJuiceAddress: EthAddress.fromString(result.feeAssetAddress),
|
|
230
|
-
feeJuicePortalAddress: EthAddress.fromString(result.feeJuicePortalAddress),
|
|
231
|
-
coinIssuerAddress: EthAddress.fromString(result.coinIssuerAddress),
|
|
232
|
-
rewardDistributorAddress: EthAddress.fromString(result.rewardDistributorAddress),
|
|
233
|
-
governanceProposerAddress: EthAddress.fromString(result.governanceProposerAddress),
|
|
234
|
-
governanceAddress: EthAddress.fromString(result.governanceAddress),
|
|
235
|
-
stakingAssetAddress: EthAddress.fromString(result.stakingAssetAddress),
|
|
236
|
-
slashFactoryAddress: result.slashFactoryAddress ? EthAddress.fromString(result.slashFactoryAddress) : undefined,
|
|
237
|
-
feeAssetHandlerAddress: result.feeAssetHandlerAddress ? EthAddress.fromString(result.feeAssetHandlerAddress) : undefined,
|
|
238
|
-
stakingAssetHandlerAddress: result.stakingAssetHandlerAddress ? EthAddress.fromString(result.stakingAssetHandlerAddress) : undefined,
|
|
239
|
-
zkPassportVerifierAddress: result.zkPassportVerifierAddress ? EthAddress.fromString(result.zkPassportVerifierAddress) : undefined,
|
|
240
|
-
gseAddress: result.gseAddress ? EthAddress.fromString(result.gseAddress) : undefined,
|
|
241
|
-
dateGatedRelayerAddress: result.dateGatedRelayerAddress ? EthAddress.fromString(result.dateGatedRelayerAddress) : undefined
|
|
242
|
-
}
|
|
243
|
-
};
|
|
244
268
|
}
|
|
245
269
|
export const DEPLOYER_ADDRESS = '0x4e59b44847b379578588920cA78FbF26c0B4956C';
|
|
246
270
|
// picked up by l1-contracts DeploymentConfiguration.sol
|
|
@@ -297,37 +321,46 @@ export function getDeployRollupForUpgradeEnvVars(args) {
|
|
|
297
321
|
const l1ContractsPath = resolve(currentDir, '..', '..', '..', 'l1-contracts');
|
|
298
322
|
const FORGE_SCRIPT = 'script/deploy/DeployRollupForUpgrade.s.sol';
|
|
299
323
|
await maybeForgeForceProductionBuild(l1ContractsPath, FORGE_SCRIPT, chainId);
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
324
|
+
// Copy cache to temp location to avoid conflicts when running forge in parallel
|
|
325
|
+
const tempCachePath = await copyFoundryCacheToTemp(l1ContractsPath);
|
|
326
|
+
try {
|
|
327
|
+
const forgeArgs = [
|
|
328
|
+
'script',
|
|
329
|
+
FORGE_SCRIPT,
|
|
330
|
+
'--sig',
|
|
331
|
+
'run()',
|
|
332
|
+
'--private-key',
|
|
333
|
+
privateKey,
|
|
334
|
+
'--rpc-url',
|
|
335
|
+
rpcUrl,
|
|
336
|
+
'--broadcast'
|
|
337
|
+
];
|
|
338
|
+
const forgeEnv = {
|
|
339
|
+
FOUNDRY_PROFILE: chainId === mainnet.id ? 'production' : undefined,
|
|
340
|
+
// Env vars required by l1-contracts/script/deploy/RollupConfiguration.sol.
|
|
341
|
+
REGISTRY_ADDRESS: registryAddress.toString(),
|
|
342
|
+
NETWORK: getActiveNetworkName(),
|
|
343
|
+
FOUNDRY_CACHE_PATH: tempCachePath,
|
|
344
|
+
FOUNDRY_BROADCAST: tempCachePath,
|
|
345
|
+
...getDeployRollupForUpgradeEnvVars(args)
|
|
346
|
+
};
|
|
347
|
+
const result = await runProcess('forge', forgeArgs, forgeEnv, l1ContractsPath);
|
|
348
|
+
if (!result) {
|
|
349
|
+
throw new Error('Forge script did not output deployment result');
|
|
350
|
+
}
|
|
351
|
+
const extendedClient = createExtendedL1Client([
|
|
352
|
+
rpcUrl
|
|
353
|
+
], privateKey);
|
|
354
|
+
// Create RollupContract wrapper for the deployed rollup
|
|
355
|
+
const rollup = new RollupContract(extendedClient, result.rollupAddress);
|
|
356
|
+
return {
|
|
357
|
+
rollup,
|
|
358
|
+
slashFactoryAddress: result.slashFactoryAddress
|
|
359
|
+
};
|
|
360
|
+
} finally{
|
|
361
|
+
await rm(tempCachePath, {
|
|
362
|
+
recursive: true,
|
|
363
|
+
force: true
|
|
364
|
+
});
|
|
323
365
|
}
|
|
324
|
-
const extendedClient = createExtendedL1Client([
|
|
325
|
-
rpcUrl
|
|
326
|
-
], privateKey);
|
|
327
|
-
// Create RollupContract wrapper for the deployed rollup
|
|
328
|
-
const rollup = new RollupContract(extendedClient, result.rollupAddress);
|
|
329
|
-
return {
|
|
330
|
-
rollup,
|
|
331
|
-
slashFactoryAddress: result.slashFactoryAddress
|
|
332
|
-
};
|
|
333
366
|
};
|
|
@@ -74,4 +74,4 @@ export declare const L1ContractAddressesSchema: z.ZodObject<{
|
|
|
74
74
|
dateGatedRelayerAddress?: string | undefined;
|
|
75
75
|
}>;
|
|
76
76
|
export declare const l1ContractAddressesMapping: ConfigMappingsType<Omit<L1ContractAddresses, 'gseAddress' | 'zkPassportVerifierAddress' | 'dateGatedRelayerAddress'>>;
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfY29udHJhY3RfYWRkcmVzc2VzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbDFfY29udHJhY3RfYWRkcmVzc2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzNELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEI7Ozs7R0FJRztBQUNILGVBQU8sTUFBTSxnQkFBZ0Isc1BBWW5CLENBQUM7QUFFWCw4REFBOEQ7QUFDOUQsTUFBTSxNQUFNLG1CQUFtQixHQUFHO0tBQy9CLENBQUMsSUFBSSxDQUFDLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxVQUFVO0NBQ3JELEdBQUc7SUFDRixtQkFBbUIsQ0FBQyxFQUFFLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDN0Msc0JBQXNCLENBQUMsRUFBRSxVQUFVLEdBQUcsU0FBUyxDQUFDO0lBQ2hELDBCQUEwQixDQUFDLEVBQUUsVUFBVSxHQUFHLFNBQVMsQ0FBQztJQUNwRCx5QkFBeUIsQ0FBQyxFQUFFLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDbkQsVUFBVSxDQUFDLEVBQUUsVUFBVSxHQUFHLFNBQVMsQ0FBQztJQUNwQyx1QkFBdUIsQ0FBQyxFQUFFLFVBQVUsR0FBRyxTQUFTLENBQUM7Q0FDbEQsQ0FBQztBQUVGLGVBQU8sTUFBTSx5QkFBeUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW9CckMsQ0FBQztBQUlGLGVBQU8sTUFBTSwwQkFBMEIsRUFBRSxrQkFBa0IsQ0FDekQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFlBQVksR0FBRywyQkFBMkIsR0FBRyx5QkFBeUIsQ0FBQyxDQTZEbEcsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"l1_contract_addresses.d.ts","sourceRoot":"","sources":["../src/l1_contract_addresses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,sPAYnB,CAAC;AAEX,8DAA8D;AAC9D,MAAM,MAAM,mBAAmB,GAAG;KAC/B,CAAC,IAAI,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,GAAG,UAAU;CACrD,GAAG;IACF,mBAAmB,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7C,sBAAsB,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAChD,0BAA0B,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IACpD,yBAAyB,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IACnD,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IACpC,uBAAuB,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;CAClD,CAAC;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"l1_contract_addresses.d.ts","sourceRoot":"","sources":["../src/l1_contract_addresses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,sPAYnB,CAAC;AAEX,8DAA8D;AAC9D,MAAM,MAAM,mBAAmB,GAAG;KAC/B,CAAC,IAAI,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,GAAG,UAAU;CACrD,GAAG;IACF,mBAAmB,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7C,sBAAsB,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAChD,0BAA0B,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IACpD,yBAAyB,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IACnD,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IACpC,uBAAuB,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;CAClD,CAAC;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoBrC,CAAC;AAIF,eAAO,MAAM,0BAA0B,EAAE,kBAAkB,CACzD,IAAI,CAAC,mBAAmB,EAAE,YAAY,GAAG,2BAA2B,GAAG,yBAAyB,CAAC,CA6DlG,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
|
-
import { schemas } from '@aztec/foundation/schemas';
|
|
2
|
+
import { schemas, zodFor } from '@aztec/foundation/schemas';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
/**
|
|
5
5
|
* The names of the current L1 contract addresses.
|
|
@@ -18,7 +18,7 @@ import { z } from 'zod';
|
|
|
18
18
|
'governanceAddress',
|
|
19
19
|
'stakingAssetAddress'
|
|
20
20
|
];
|
|
21
|
-
export const L1ContractAddressesSchema = z.object({
|
|
21
|
+
export const L1ContractAddressesSchema = zodFor()(z.object({
|
|
22
22
|
rollupAddress: schemas.EthAddress,
|
|
23
23
|
registryAddress: schemas.EthAddress,
|
|
24
24
|
inboxAddress: schemas.EthAddress,
|
|
@@ -36,7 +36,7 @@ export const L1ContractAddressesSchema = z.object({
|
|
|
36
36
|
zkPassportVerifierAddress: schemas.EthAddress.optional(),
|
|
37
37
|
gseAddress: schemas.EthAddress.optional(),
|
|
38
38
|
dateGatedRelayerAddress: schemas.EthAddress.optional()
|
|
39
|
-
});
|
|
39
|
+
}));
|
|
40
40
|
const parseEnv = (val)=>EthAddress.fromString(val);
|
|
41
41
|
export const l1ContractAddressesMapping = {
|
|
42
42
|
registryAddress: {
|
|
@@ -3,4 +3,10 @@ export declare const LARGE_GAS_LIMIT = 12000000n;
|
|
|
3
3
|
export declare const MIN_REPLACEMENT_BUMP_PERCENTAGE = 10;
|
|
4
4
|
export declare const MIN_BLOB_REPLACEMENT_BUMP_PERCENTAGE = 100;
|
|
5
5
|
export declare const BLOCK_TIME_MS = 12000;
|
|
6
|
-
|
|
6
|
+
export declare const GAS_PER_BLOB = 131072n;
|
|
7
|
+
export declare const BLOB_CAPACITY_SCHEDULE: {
|
|
8
|
+
timestamp: number;
|
|
9
|
+
target: number;
|
|
10
|
+
max: number;
|
|
11
|
+
}[];
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbDFfdHhfdXRpbHMvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLGVBQU8sTUFBTSxTQUFTLGNBQWlCLENBQUM7QUFHeEMsZUFBTyxNQUFNLGVBQWUsWUFBYyxDQUFDO0FBSTNDLGVBQU8sTUFBTSwrQkFBK0IsS0FBSyxDQUFDO0FBSWxELGVBQU8sTUFBTSxvQ0FBb0MsTUFBTSxDQUFDO0FBR3hELGVBQU8sTUFBTSxhQUFhLFFBQVMsQ0FBQztBQUdwQyxlQUFPLE1BQU0sWUFBWSxVQUFVLENBQUM7QUFHcEMsZUFBTyxNQUFNLHNCQUFzQjs7OztHQUtsQyxDQUFDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/l1_tx_utils/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS,cAAiB,CAAC;AAGxC,eAAO,MAAM,eAAe,YAAc,CAAC;AAI3C,eAAO,MAAM,+BAA+B,KAAK,CAAC;AAIlD,eAAO,MAAM,oCAAoC,MAAM,CAAC;AAGxD,eAAO,MAAM,aAAa,QAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/l1_tx_utils/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS,cAAiB,CAAC;AAGxC,eAAO,MAAM,eAAe,YAAc,CAAC;AAI3C,eAAO,MAAM,+BAA+B,KAAK,CAAC;AAIlD,eAAO,MAAM,oCAAoC,MAAM,CAAC;AAGxD,eAAO,MAAM,aAAa,QAAS,CAAC;AAGpC,eAAO,MAAM,YAAY,UAAU,CAAC;AAGpC,eAAO,MAAM,sBAAsB;;;;GAKlC,CAAC"}
|
|
@@ -12,3 +12,28 @@ export const MIN_REPLACEMENT_BUMP_PERCENTAGE = 10;
|
|
|
12
12
|
export const MIN_BLOB_REPLACEMENT_BUMP_PERCENTAGE = 100;
|
|
13
13
|
// Avg ethereum block time is ~12s
|
|
14
14
|
export const BLOCK_TIME_MS = 12_000;
|
|
15
|
+
// Gas per blob (EIP-4844)
|
|
16
|
+
export const GAS_PER_BLOB = 131072n;
|
|
17
|
+
// Blob capacity schedule based on Ethereum upgrades
|
|
18
|
+
export const BLOB_CAPACITY_SCHEDULE = [
|
|
19
|
+
{
|
|
20
|
+
timestamp: 1734357600,
|
|
21
|
+
target: 14,
|
|
22
|
+
max: 21
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
timestamp: 1733752800,
|
|
26
|
+
target: 10,
|
|
27
|
+
max: 15
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
timestamp: 1733234400,
|
|
31
|
+
target: 6,
|
|
32
|
+
max: 9
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
timestamp: 0,
|
|
36
|
+
target: 6,
|
|
37
|
+
max: 9
|
|
38
|
+
}
|
|
39
|
+
];
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PriorityFeeStrategy } from './types.js';
|
|
2
|
+
export { HISTORICAL_BLOCK_COUNT, executeStrategy, type PriorityFeeStrategy, type PriorityFeeStrategyContext, type PriorityFeeStrategyResult, } from './types.js';
|
|
3
|
+
export { P75AllTxsPriorityFeeStrategy } from './p75_competitive.js';
|
|
4
|
+
/**
|
|
5
|
+
* Default list of priority fee strategies to analyze.
|
|
6
|
+
* Add more strategies here for comparison.
|
|
7
|
+
*/
|
|
8
|
+
export declare const DEFAULT_PRIORITY_FEE_STRATEGIES: PriorityFeeStrategy[];
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sMV90eF91dGlscy9mZWUtc3RyYXRlZ2llcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV0RCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixLQUFLLG1CQUFtQixFQUN4QixLQUFLLDBCQUEwQixFQUMvQixLQUFLLHlCQUF5QixHQUMvQixNQUFNLFlBQVksQ0FBQztBQUVwQixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRTs7O0dBR0c7QUFDSCxlQUFPLE1BQU0sK0JBQStCLEVBQUUsbUJBQW1CLEVBR2hFLENBQUMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/l1_tx_utils/fee-strategies/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,GAC/B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAEpE;;;GAGG;AACH,eAAO,MAAM,+BAA+B,EAAE,mBAAmB,EAGhE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { P75AllTxsPriorityFeeStrategy } from './p75_competitive.js';
|
|
2
|
+
import { P75BlobTxsOnlyPriorityFeeStrategy } from './p75_competitive_blob_txs_only.js';
|
|
3
|
+
export { HISTORICAL_BLOCK_COUNT, executeStrategy } from './types.js';
|
|
4
|
+
export { P75AllTxsPriorityFeeStrategy } from './p75_competitive.js';
|
|
5
|
+
/**
|
|
6
|
+
* Default list of priority fee strategies to analyze.
|
|
7
|
+
* Add more strategies here for comparison.
|
|
8
|
+
*/ export const DEFAULT_PRIORITY_FEE_STRATEGIES = [
|
|
9
|
+
P75AllTxsPriorityFeeStrategy,
|
|
10
|
+
P75BlobTxsOnlyPriorityFeeStrategy
|
|
11
|
+
];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ViemClient } from '../../types.js';
|
|
2
|
+
import { type PriorityFeeStrategy } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Type for the promises required by the competitive strategy
|
|
5
|
+
*/
|
|
6
|
+
type P75AllTxsStrategyPromises = {
|
|
7
|
+
networkEstimate: Promise<bigint>;
|
|
8
|
+
pendingBlock: Promise<Awaited<ReturnType<ViemClient['getBlock']>> | null>;
|
|
9
|
+
feeHistory: Promise<Awaited<ReturnType<ViemClient['getFeeHistory']>> | null>;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Our current competitive priority fee strategy.
|
|
13
|
+
* Analyzes p75 of pending transactions and 5-block fee history to determine a competitive priority fee.
|
|
14
|
+
* Falls back to network estimate if data is unavailable.
|
|
15
|
+
*/
|
|
16
|
+
export declare const P75AllTxsPriorityFeeStrategy: PriorityFeeStrategy<P75AllTxsStrategyPromises>;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicDc1X2NvbXBldGl0aXZlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbDFfdHhfdXRpbHMvZmVlLXN0cmF0ZWdpZXMvcDc1X2NvbXBldGl0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2pELE9BQU8sRUFFTCxLQUFLLG1CQUFtQixFQUd6QixNQUFNLFlBQVksQ0FBQztBQUVwQjs7R0FFRztBQUNILEtBQUsseUJBQXlCLEdBQUc7SUFDL0IsZUFBZSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxZQUFZLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMxRSxVQUFVLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztDQUM5RSxDQUFDO0FBRUY7Ozs7R0FJRztBQUNILGVBQU8sTUFBTSw0QkFBNEIsRUFBRSxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FrSXZGLENBQUMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p75_competitive.d.ts","sourceRoot":"","sources":["../../../src/l1_tx_utils/fee-strategies/p75_competitive.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD,OAAO,EAEL,KAAK,mBAAmB,EAGzB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,KAAK,yBAAyB,GAAG;IAC/B,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACjC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1E,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;CAC9E,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,EAAE,mBAAmB,CAAC,yBAAyB,CAkIvF,CAAC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { median } from '@aztec/foundation/collection';
|
|
2
|
+
import { formatGwei } from 'viem';
|
|
3
|
+
import { calculatePercentile } from '../../utils.js';
|
|
4
|
+
import { WEI_CONST } from '../constants.js';
|
|
5
|
+
import { HISTORICAL_BLOCK_COUNT } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Our current competitive priority fee strategy.
|
|
8
|
+
* Analyzes p75 of pending transactions and 5-block fee history to determine a competitive priority fee.
|
|
9
|
+
* Falls back to network estimate if data is unavailable.
|
|
10
|
+
*/ export const P75AllTxsPriorityFeeStrategy = {
|
|
11
|
+
name: 'Competitive (P75 + History) - CURRENT',
|
|
12
|
+
id: 'p75_pending_txs_and_history_all_txs',
|
|
13
|
+
getRequiredPromises (client) {
|
|
14
|
+
return {
|
|
15
|
+
networkEstimate: client.estimateMaxPriorityFeePerGas().catch(()=>0n),
|
|
16
|
+
pendingBlock: client.getBlock({
|
|
17
|
+
blockTag: 'pending',
|
|
18
|
+
includeTransactions: true
|
|
19
|
+
}).catch(()=>null),
|
|
20
|
+
feeHistory: client.getFeeHistory({
|
|
21
|
+
blockCount: HISTORICAL_BLOCK_COUNT,
|
|
22
|
+
rewardPercentiles: [
|
|
23
|
+
75
|
|
24
|
+
],
|
|
25
|
+
blockTag: 'latest'
|
|
26
|
+
}).catch(()=>null)
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
calculate (results, context) {
|
|
30
|
+
const { logger } = context;
|
|
31
|
+
// Extract network estimate from settled result
|
|
32
|
+
const networkEstimate = results.networkEstimate.status === 'fulfilled' && typeof results.networkEstimate.value === 'bigint' ? results.networkEstimate.value : 0n;
|
|
33
|
+
let competitiveFee = networkEstimate;
|
|
34
|
+
const debugInfo = {
|
|
35
|
+
networkEstimateGwei: formatGwei(networkEstimate)
|
|
36
|
+
};
|
|
37
|
+
// Extract pending block from settled result
|
|
38
|
+
const pendingBlock = results.pendingBlock.status === 'fulfilled' ? results.pendingBlock.value : null;
|
|
39
|
+
// Analyze pending block transactions
|
|
40
|
+
if (pendingBlock?.transactions && pendingBlock.transactions.length > 0) {
|
|
41
|
+
const pendingFees = pendingBlock.transactions.map((tx)=>{
|
|
42
|
+
if (typeof tx === 'string') {
|
|
43
|
+
return 0n;
|
|
44
|
+
}
|
|
45
|
+
const fee = tx.maxPriorityFeePerGas || 0n;
|
|
46
|
+
return fee;
|
|
47
|
+
}).filter((fee)=>fee > 0n);
|
|
48
|
+
if (pendingFees.length > 0) {
|
|
49
|
+
// Use 75th percentile of pending fees to be competitive
|
|
50
|
+
const pendingCompetitiveFee = calculatePercentile(pendingFees, 75);
|
|
51
|
+
if (pendingCompetitiveFee > competitiveFee) {
|
|
52
|
+
competitiveFee = pendingCompetitiveFee;
|
|
53
|
+
}
|
|
54
|
+
debugInfo.pendingTxCount = pendingFees.length;
|
|
55
|
+
debugInfo.pendingP75Gwei = formatGwei(pendingCompetitiveFee);
|
|
56
|
+
logger?.debug('Analyzed pending transactions for competitive pricing', {
|
|
57
|
+
pendingTxCount: pendingFees.length,
|
|
58
|
+
pendingP75: formatGwei(pendingCompetitiveFee)
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Extract fee history from settled result
|
|
63
|
+
const feeHistory = results.feeHistory.status === 'fulfilled' ? results.feeHistory.value : null;
|
|
64
|
+
// Analyze fee history
|
|
65
|
+
if (feeHistory?.reward && feeHistory.reward.length > 0) {
|
|
66
|
+
// Extract 75th percentile fees from each block
|
|
67
|
+
const percentile75Fees = feeHistory.reward.map((rewards)=>rewards[0] || 0n).filter((fee)=>fee > 0n);
|
|
68
|
+
if (percentile75Fees.length > 0) {
|
|
69
|
+
// Calculate median of the 75th percentile fees across blocks
|
|
70
|
+
const medianHistoricalFee = median(percentile75Fees) ?? 0n;
|
|
71
|
+
// Debug: Log suspicious fees from history
|
|
72
|
+
if (medianHistoricalFee > 100n * WEI_CONST) {
|
|
73
|
+
logger?.warn('Suspicious high fee in history', {
|
|
74
|
+
historicalMedian: formatGwei(medianHistoricalFee),
|
|
75
|
+
allP75Fees: percentile75Fees.map((f)=>formatGwei(f))
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
if (medianHistoricalFee > competitiveFee) {
|
|
79
|
+
competitiveFee = medianHistoricalFee;
|
|
80
|
+
}
|
|
81
|
+
debugInfo.historicalMedianGwei = formatGwei(medianHistoricalFee);
|
|
82
|
+
logger?.debug('Analyzed fee history for competitive pricing', {
|
|
83
|
+
historicalMedian: formatGwei(medianHistoricalFee)
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Sanity check: cap competitive fee at 100x network estimate to avoid using unrealistic fees
|
|
88
|
+
const maxReasonableFee = networkEstimate * 100n;
|
|
89
|
+
if (competitiveFee > maxReasonableFee && networkEstimate > 0n) {
|
|
90
|
+
logger?.warn('Competitive fee exceeds sanity cap, using capped value', {
|
|
91
|
+
competitiveFee: formatGwei(competitiveFee),
|
|
92
|
+
networkEstimate: formatGwei(networkEstimate),
|
|
93
|
+
cappedTo: formatGwei(maxReasonableFee)
|
|
94
|
+
});
|
|
95
|
+
competitiveFee = maxReasonableFee;
|
|
96
|
+
debugInfo.cappedToGwei = formatGwei(maxReasonableFee);
|
|
97
|
+
}
|
|
98
|
+
// Log final decision
|
|
99
|
+
if (competitiveFee > networkEstimate) {
|
|
100
|
+
logger?.debug('Using competitive fee from market analysis', {
|
|
101
|
+
networkEstimate: formatGwei(networkEstimate),
|
|
102
|
+
competitive: formatGwei(competitiveFee)
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
debugInfo.finalFeeGwei = formatGwei(competitiveFee);
|
|
106
|
+
return {
|
|
107
|
+
priorityFee: competitiveFee,
|
|
108
|
+
debugInfo
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
};
|