@aztec/ethereum 0.0.1-commit.96bb3f7 → 0.0.1-commit.993d240
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/client.d.ts +16 -2
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +27 -7
- package/dest/config.d.ts +22 -33
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +59 -64
- package/dest/contracts/chain_state_override.d.ts +78 -0
- package/dest/contracts/chain_state_override.d.ts.map +1 -0
- package/dest/contracts/chain_state_override.js +137 -0
- package/dest/contracts/fee_asset_handler.d.ts +1 -1
- package/dest/contracts/fee_asset_handler.d.ts.map +1 -1
- package/dest/contracts/fee_asset_handler.js +2 -0
- package/dest/contracts/fee_asset_price_oracle.d.ts +105 -0
- package/dest/contracts/fee_asset_price_oracle.d.ts.map +1 -0
- package/dest/contracts/fee_asset_price_oracle.js +656 -0
- package/dest/contracts/governance.d.ts +110 -33
- package/dest/contracts/governance.d.ts.map +1 -1
- package/dest/contracts/governance.js +207 -16
- package/dest/contracts/governance_proposer.d.ts +33 -1
- package/dest/contracts/governance_proposer.d.ts.map +1 -1
- package/dest/contracts/governance_proposer.js +57 -3
- package/dest/contracts/inbox.d.ts +18 -1
- package/dest/contracts/inbox.d.ts.map +1 -1
- package/dest/contracts/inbox.js +38 -2
- package/dest/contracts/index.d.ts +5 -3
- package/dest/contracts/index.d.ts.map +1 -1
- package/dest/contracts/index.js +4 -2
- package/dest/contracts/log.d.ts +13 -0
- package/dest/contracts/log.d.ts.map +1 -0
- package/dest/contracts/log.js +1 -0
- package/dest/contracts/multicall.d.ts +127 -12
- package/dest/contracts/multicall.d.ts.map +1 -1
- package/dest/contracts/multicall.js +201 -93
- package/dest/contracts/outbox.d.ts +21 -4
- package/dest/contracts/outbox.d.ts.map +1 -1
- package/dest/contracts/outbox.js +29 -6
- package/dest/contracts/registry.d.ts +3 -1
- package/dest/contracts/registry.d.ts.map +1 -1
- package/dest/contracts/registry.js +30 -1
- package/dest/contracts/rollup.d.ts +5288 -27
- package/dest/contracts/rollup.d.ts.map +1 -1
- package/dest/contracts/rollup.js +432 -69
- package/dest/contracts/{tally_slashing_proposer.d.ts → slashing_proposer.d.ts} +3 -4
- package/dest/contracts/slashing_proposer.d.ts.map +1 -0
- package/dest/contracts/{tally_slashing_proposer.js → slashing_proposer.js} +18 -13
- package/dest/deploy_aztec_l1_contracts.d.ts +9 -8
- package/dest/deploy_aztec_l1_contracts.d.ts.map +1 -1
- package/dest/deploy_aztec_l1_contracts.js +58 -32
- package/dest/deploy_l1_contract.js +3 -3
- package/dest/generated/l1-contracts-defaults.d.ts +30 -0
- package/dest/generated/l1-contracts-defaults.d.ts.map +1 -0
- package/dest/generated/l1-contracts-defaults.js +30 -0
- package/dest/l1_artifacts.d.ts +15699 -16241
- package/dest/l1_artifacts.d.ts.map +1 -1
- package/dest/l1_artifacts.js +9 -24
- package/dest/l1_contract_addresses.d.ts +61 -65
- package/dest/l1_contract_addresses.d.ts.map +1 -1
- package/dest/l1_contract_addresses.js +101 -82
- package/dest/l1_reader.d.ts +5 -5
- package/dest/l1_reader.d.ts.map +1 -1
- package/dest/l1_reader.js +9 -7
- package/dest/l1_tx_utils/config.d.ts +7 -1
- package/dest/l1_tx_utils/config.d.ts.map +1 -1
- package/dest/l1_tx_utils/config.js +14 -1
- package/dest/l1_tx_utils/constants.d.ts +1 -1
- package/dest/l1_tx_utils/constants.js +2 -2
- package/dest/l1_tx_utils/factory.d.ts +18 -10
- package/dest/l1_tx_utils/factory.d.ts.map +1 -1
- package/dest/l1_tx_utils/factory.js +17 -7
- package/dest/l1_tx_utils/fee-strategies/p75_competitive.js +1 -1
- package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.js +1 -1
- package/dest/l1_tx_utils/forwarder_l1_tx_utils.d.ts +15 -15
- package/dest/l1_tx_utils/forwarder_l1_tx_utils.d.ts.map +1 -1
- package/dest/l1_tx_utils/forwarder_l1_tx_utils.js +9 -15
- package/dest/l1_tx_utils/index-blobs.d.ts +3 -3
- package/dest/l1_tx_utils/index-blobs.d.ts.map +1 -1
- package/dest/l1_tx_utils/index-blobs.js +2 -2
- package/dest/l1_tx_utils/index.d.ts +2 -1
- package/dest/l1_tx_utils/index.d.ts.map +1 -1
- package/dest/l1_tx_utils/index.js +1 -0
- package/dest/l1_tx_utils/l1_tx_utils.d.ts +26 -7
- package/dest/l1_tx_utils/l1_tx_utils.d.ts.map +1 -1
- package/dest/l1_tx_utils/l1_tx_utils.js +101 -66
- package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts +1 -1
- package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts.map +1 -1
- package/dest/l1_tx_utils/readonly_l1_tx_utils.js +11 -7
- package/dest/l1_tx_utils/tx_delayer.d.ts +58 -0
- package/dest/l1_tx_utils/tx_delayer.d.ts.map +1 -0
- package/dest/{test → l1_tx_utils}/tx_delayer.js +67 -37
- package/dest/publisher_manager.d.ts +21 -6
- package/dest/publisher_manager.d.ts.map +1 -1
- package/dest/publisher_manager.js +81 -7
- package/dest/queries.d.ts +14 -3
- package/dest/queries.d.ts.map +1 -1
- package/dest/queries.js +66 -4
- package/dest/test/chain_monitor.d.ts +23 -3
- package/dest/test/chain_monitor.d.ts.map +1 -1
- package/dest/test/chain_monitor.js +38 -2
- package/dest/test/eth_cheat_codes.d.ts +24 -4
- package/dest/test/eth_cheat_codes.d.ts.map +1 -1
- package/dest/test/eth_cheat_codes.js +17 -4
- package/dest/test/index.d.ts +1 -3
- package/dest/test/index.d.ts.map +1 -1
- package/dest/test/index.js +0 -2
- package/dest/test/rollup_cheat_codes.d.ts +34 -4
- package/dest/test/rollup_cheat_codes.d.ts.map +1 -1
- package/dest/test/rollup_cheat_codes.js +69 -8
- package/dest/test/start_anvil.d.ts +23 -3
- package/dest/test/start_anvil.d.ts.map +1 -1
- package/dest/test/start_anvil.js +143 -29
- package/dest/test/upgrade_utils.js +2 -2
- package/dest/utils.d.ts +9 -1
- package/dest/utils.d.ts.map +1 -1
- package/dest/utils.js +81 -12
- package/package.json +9 -10
- package/src/client.ts +28 -2
- package/src/config.ts +75 -65
- package/src/contracts/README.md +157 -0
- package/src/contracts/chain_state_override.ts +200 -0
- package/src/contracts/fee_asset_handler.ts +2 -0
- package/src/contracts/fee_asset_price_oracle.ts +285 -0
- package/src/contracts/governance.ts +279 -13
- package/src/contracts/governance_proposer.ts +58 -2
- package/src/contracts/inbox.ts +57 -2
- package/src/contracts/index.ts +4 -2
- package/src/contracts/log.ts +13 -0
- package/src/contracts/multicall.ts +243 -102
- package/src/contracts/outbox.ts +38 -8
- package/src/contracts/registry.ts +31 -1
- package/src/contracts/rollup.ts +500 -68
- package/src/contracts/{tally_slashing_proposer.ts → slashing_proposer.ts} +16 -14
- package/src/deploy_aztec_l1_contracts.ts +81 -40
- package/src/deploy_l1_contract.ts +3 -3
- package/src/generated/l1-contracts-defaults.ts +32 -0
- package/src/l1_artifacts.ts +12 -35
- package/src/l1_contract_addresses.ts +120 -94
- package/src/l1_reader.ts +17 -10
- package/src/l1_tx_utils/config.ts +20 -0
- package/src/l1_tx_utils/constants.ts +2 -2
- package/src/l1_tx_utils/factory.ts +31 -31
- package/src/l1_tx_utils/fee-strategies/p75_competitive.ts +1 -1
- package/src/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.ts +1 -1
- package/src/l1_tx_utils/forwarder_l1_tx_utils.ts +43 -54
- package/src/l1_tx_utils/index-blobs.ts +2 -2
- package/src/l1_tx_utils/index.ts +1 -0
- package/src/l1_tx_utils/l1_tx_utils.ts +99 -48
- package/src/l1_tx_utils/readonly_l1_tx_utils.ts +11 -7
- package/src/{test → l1_tx_utils}/tx_delayer.ts +93 -56
- package/src/publisher_manager.ts +107 -10
- package/src/queries.ts +73 -5
- package/src/test/chain_monitor.ts +65 -3
- package/src/test/eth_cheat_codes.ts +16 -4
- package/src/test/index.ts +0 -2
- package/src/test/rollup_cheat_codes.ts +75 -8
- package/src/test/start_anvil.ts +177 -29
- package/src/test/upgrade_utils.ts +2 -2
- package/src/utils.ts +88 -14
- package/dest/contracts/empire_slashing_proposer.d.ts +0 -67
- package/dest/contracts/empire_slashing_proposer.d.ts.map +0 -1
- package/dest/contracts/empire_slashing_proposer.js +0 -209
- package/dest/contracts/tally_slashing_proposer.d.ts.map +0 -1
- package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts +0 -26
- package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts.map +0 -1
- package/dest/l1_tx_utils/l1_tx_utils_with_blobs.js +0 -26
- package/dest/test/delayed_tx_utils.d.ts +0 -13
- package/dest/test/delayed_tx_utils.d.ts.map +0 -1
- package/dest/test/delayed_tx_utils.js +0 -28
- package/dest/test/tx_delayer.d.ts +0 -36
- package/dest/test/tx_delayer.d.ts.map +0 -1
- package/src/contracts/empire_slashing_proposer.ts +0 -270
- package/src/l1_tx_utils/l1_tx_utils_with_blobs.ts +0 -77
- package/src/test/delayed_tx_utils.ts +0 -52
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { toHex as toPaddedHex } from '@aztec/foundation/bigint-buffer';
|
|
2
|
+
import { merge } from '@aztec/foundation/collection';
|
|
3
|
+
import { RollupContract } from './rollup.js';
|
|
4
|
+
/** Builds a single-checkpoint simulation plan before it is translated into a viem state override. */ export class SimulationOverridesBuilder {
|
|
5
|
+
chainTipsOverride;
|
|
6
|
+
pendingCheckpointState;
|
|
7
|
+
disableBlobCheck = false;
|
|
8
|
+
/** Starts from an existing plan so callers can extend or specialize it. */ static from(plan) {
|
|
9
|
+
return new SimulationOverridesBuilder().merge(plan);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Merges another plan into this builder. Later values win on a per-half basis for chain tips,
|
|
13
|
+
* but explicit `undefined` fields in the incoming plan are ignored so they cannot erase a
|
|
14
|
+
* previously-set value.
|
|
15
|
+
*/ merge(plan) {
|
|
16
|
+
if (!plan) {
|
|
17
|
+
return this;
|
|
18
|
+
}
|
|
19
|
+
if (plan.chainTipsOverride) {
|
|
20
|
+
this.chainTipsOverride = merge(this.chainTipsOverride ?? {}, plan.chainTipsOverride);
|
|
21
|
+
}
|
|
22
|
+
if (plan.pendingCheckpointState) {
|
|
23
|
+
this.pendingCheckpointState = merge(this.pendingCheckpointState ?? {}, plan.pendingCheckpointState);
|
|
24
|
+
}
|
|
25
|
+
this.disableBlobCheck = this.disableBlobCheck || (plan.disableBlobCheck ?? false);
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Sets the pending and/or proven checkpoint number overrides. Subsequent calls merge into the existing
|
|
30
|
+
* override on a per-half basis, so callers can set pending in one call and proven in another without
|
|
31
|
+
* clobbering each other.
|
|
32
|
+
*/ withChainTips(override) {
|
|
33
|
+
this.chainTipsOverride = {
|
|
34
|
+
...this.chainTipsOverride ?? {},
|
|
35
|
+
...override
|
|
36
|
+
};
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
/** Overrides the archive root for the configured pending checkpoint. */ withPendingArchive(archive) {
|
|
40
|
+
this.assertPendingCheckpointNumber();
|
|
41
|
+
this.pendingCheckpointState = {
|
|
42
|
+
...this.pendingCheckpointState ?? {},
|
|
43
|
+
archive
|
|
44
|
+
};
|
|
45
|
+
return this;
|
|
46
|
+
}
|
|
47
|
+
/** Overrides the fee header for the configured pending checkpoint. */ withPendingFeeHeader(feeHeader) {
|
|
48
|
+
this.assertPendingCheckpointNumber();
|
|
49
|
+
this.pendingCheckpointState = {
|
|
50
|
+
...this.pendingCheckpointState ?? {},
|
|
51
|
+
feeHeader
|
|
52
|
+
};
|
|
53
|
+
return this;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Overrides one or more `tempCheckpointLogs` cell fields for the configured pending checkpoint.
|
|
57
|
+
* Fields are independent: any subset can be provided. The translator (`makeTempCheckpointLogOverride`)
|
|
58
|
+
* emits a stateDiff entry per field actually set, so unspecified fields stay at their on-chain
|
|
59
|
+
* values.
|
|
60
|
+
*
|
|
61
|
+
* `slotNumber` is load-bearing for `STFLib.canPruneAtTime`: when the simulation overrides `pending`
|
|
62
|
+
* to a checkpoint that has no on-chain `tempCheckpointLogs` entry yet, the missing slotNumber falls
|
|
63
|
+
* back to 0 and the contract treats the pending tip as belonging to epoch 0, triggering a phantom
|
|
64
|
+
* prune that silently undoes the `pending` override.
|
|
65
|
+
*/ withPendingTempCheckpointLogFields(fields) {
|
|
66
|
+
this.assertPendingCheckpointNumber();
|
|
67
|
+
this.pendingCheckpointState = {
|
|
68
|
+
...this.pendingCheckpointState ?? {},
|
|
69
|
+
...fields
|
|
70
|
+
};
|
|
71
|
+
return this;
|
|
72
|
+
}
|
|
73
|
+
/** Disables blob checking for simulations that cannot provide DA inputs. */ withoutBlobCheck() {
|
|
74
|
+
this.disableBlobCheck = true;
|
|
75
|
+
return this;
|
|
76
|
+
}
|
|
77
|
+
/** Builds the final plan, or `undefined` when no overrides were configured. */ build() {
|
|
78
|
+
if (!this.pendingCheckpointState && !this.chainTipsOverride && !this.disableBlobCheck) {
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
chainTipsOverride: this.chainTipsOverride,
|
|
83
|
+
pendingCheckpointState: this.pendingCheckpointState,
|
|
84
|
+
disableBlobCheck: this.disableBlobCheck || undefined
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
assertPendingCheckpointNumber() {
|
|
88
|
+
if (this.chainTipsOverride?.pending === undefined) {
|
|
89
|
+
throw new Error('withChainTips({ pending }) must be called before attaching archive or fee header overrides');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/** Translates a simulation plan into the viem state override shape expected by rollup calls. */ export async function buildSimulationOverridesStateOverride(rollup, plan) {
|
|
94
|
+
if (!plan) {
|
|
95
|
+
return [];
|
|
96
|
+
}
|
|
97
|
+
const rollupStateDiff = [];
|
|
98
|
+
if (plan.chainTipsOverride) {
|
|
99
|
+
rollupStateDiff.push(...extractRollupStateDiff(await rollup.makeChainTipsOverride(plan.chainTipsOverride)));
|
|
100
|
+
}
|
|
101
|
+
if (plan.pendingCheckpointState && plan.chainTipsOverride?.pending === undefined) {
|
|
102
|
+
throw new Error('pendingCheckpointState requires chainTipsOverride.pending to be set');
|
|
103
|
+
}
|
|
104
|
+
if (plan.pendingCheckpointState?.archive) {
|
|
105
|
+
rollupStateDiff.push(...extractRollupStateDiff(rollup.makeArchiveOverride(plan.chainTipsOverride.pending, plan.pendingCheckpointState.archive)));
|
|
106
|
+
}
|
|
107
|
+
if (plan.pendingCheckpointState) {
|
|
108
|
+
rollupStateDiff.push(...extractRollupStateDiff(await rollup.makeTempCheckpointLogOverride(plan.chainTipsOverride.pending, {
|
|
109
|
+
headerHash: plan.pendingCheckpointState.headerHash,
|
|
110
|
+
outHash: plan.pendingCheckpointState.outHash,
|
|
111
|
+
payloadDigest: plan.pendingCheckpointState.payloadDigest,
|
|
112
|
+
slotNumber: plan.pendingCheckpointState.slotNumber,
|
|
113
|
+
feeHeader: plan.pendingCheckpointState.feeHeader
|
|
114
|
+
})));
|
|
115
|
+
}
|
|
116
|
+
if (plan.disableBlobCheck) {
|
|
117
|
+
rollupStateDiff.push({
|
|
118
|
+
slot: toPaddedHex(RollupContract.checkBlobStorageSlot, true),
|
|
119
|
+
value: toPaddedHex(0n, true)
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
if (rollupStateDiff.length === 0) {
|
|
123
|
+
return [];
|
|
124
|
+
}
|
|
125
|
+
return [
|
|
126
|
+
{
|
|
127
|
+
address: rollup.address,
|
|
128
|
+
stateDiff: rollupStateDiff
|
|
129
|
+
}
|
|
130
|
+
];
|
|
131
|
+
}
|
|
132
|
+
function extractRollupStateDiff(override) {
|
|
133
|
+
const entries = Array.isArray(override) ? override : override ? [
|
|
134
|
+
override
|
|
135
|
+
] : [];
|
|
136
|
+
return entries.flatMap((entry)=>entry.stateDiff ?? []);
|
|
137
|
+
}
|
|
@@ -17,4 +17,4 @@ export declare class FeeAssetHandlerContract {
|
|
|
17
17
|
state: import("../l1_tx_utils/types.js").L1TxState;
|
|
18
18
|
}>;
|
|
19
19
|
}
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlX2Fzc2V0X2hhbmRsZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdHMvZmVlX2Fzc2V0X2hhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzNELE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFBbUMsTUFBTSxNQUFNLENBQUM7QUFFakUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTlDLHFCQUFhLHVCQUF1QjthQUloQixNQUFNLEVBQUUsVUFBVTtJQUg3QixPQUFPLEVBQUUsVUFBVSxDQUFDO0lBRTNCLFlBQ2tCLE1BQU0sRUFBRSxVQUFVLEVBQ2xDLE9BQU8sRUFBRSxHQUFHLEdBQUcsVUFBVSxFQU0xQjtJQUVZLFFBQVEsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLENBTzNDO0lBRU0sYUFBYSxvQkFPbkI7SUFFTSxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFHLFVBQVU7OztPQWExRDtJQUVNLGFBQWEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNOzs7T0FVdEQ7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fee_asset_handler.d.ts","sourceRoot":"","sources":["../../src/contracts/fee_asset_handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAAE,KAAK,GAAG,EAAmC,MAAM,MAAM,CAAC;AAEjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,qBAAa,uBAAuB;aAIhB,MAAM,EAAE,UAAU;IAH7B,OAAO,EAAE,UAAU,CAAC;IAE3B,YACkB,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG,GAAG,UAAU,EAM1B;IAEY,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,CAO3C;IAEM,aAAa,oBAOnB;IAEM,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,GAAG,UAAU;;;
|
|
1
|
+
{"version":3,"file":"fee_asset_handler.d.ts","sourceRoot":"","sources":["../../src/contracts/fee_asset_handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAAE,KAAK,GAAG,EAAmC,MAAM,MAAM,CAAC;AAEjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,qBAAa,uBAAuB;aAIhB,MAAM,EAAE,UAAU;IAH7B,OAAO,EAAE,UAAU,CAAC;IAE3B,YACkB,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG,GAAG,UAAU,EAM1B;IAEY,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,CAO3C;IAEM,aAAa,oBAOnB;IAEM,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,GAAG,UAAU;;;OAa1D;IAEM,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM;;;OAUtD;CACF"}
|
|
@@ -33,6 +33,7 @@ export class FeeAssetHandlerContract {
|
|
|
33
33
|
}
|
|
34
34
|
return txUtils.sendAndMonitorTransaction({
|
|
35
35
|
to: this.address.toString(),
|
|
36
|
+
abi: FeeAssetHandlerAbi,
|
|
36
37
|
data: encodeFunctionData({
|
|
37
38
|
abi: FeeAssetHandlerAbi,
|
|
38
39
|
functionName: 'mint',
|
|
@@ -45,6 +46,7 @@ export class FeeAssetHandlerContract {
|
|
|
45
46
|
setMintAmount(txUtils, amount) {
|
|
46
47
|
return txUtils.sendAndMonitorTransaction({
|
|
47
48
|
to: this.address.toString(),
|
|
49
|
+
abi: FeeAssetHandlerAbi,
|
|
48
50
|
data: encodeFunctionData({
|
|
49
51
|
abi: FeeAssetHandlerAbi,
|
|
50
52
|
functionName: 'setMintAmount',
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
|
+
import { type Logger } from '@aztec/foundation/log';
|
|
3
|
+
import { type Hex } from 'viem';
|
|
4
|
+
import type { ViemClient } from '../types.js';
|
|
5
|
+
import { RollupContract } from './rollup.js';
|
|
6
|
+
/** Maximum price modifier per checkpoint in basis points. ±100 bps = ±1% */
|
|
7
|
+
export declare const MAX_FEE_ASSET_PRICE_MODIFIER_BPS = 100n;
|
|
8
|
+
/**
|
|
9
|
+
* Validates that a fee asset price modifier is within the allowed range.
|
|
10
|
+
* Validators should call this before attesting to a checkpoint proposal.
|
|
11
|
+
*
|
|
12
|
+
* @param modifier - The fee asset price modifier in basis points
|
|
13
|
+
* @returns true if the modifier is valid (between -100 and +100 bps)
|
|
14
|
+
*/
|
|
15
|
+
export declare function validateFeeAssetPriceModifier(modifier: bigint): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Oracle for computing fee asset price modifiers based on Uniswap V4 pool prices.
|
|
18
|
+
* Only active on Ethereum mainnet - returns 0 on other chains.
|
|
19
|
+
*/
|
|
20
|
+
export declare class FeeAssetPriceOracle {
|
|
21
|
+
private client;
|
|
22
|
+
private readonly rollupContract;
|
|
23
|
+
private log;
|
|
24
|
+
constructor(client: ViemClient, rollupContract: RollupContract, log?: Logger);
|
|
25
|
+
getUniswapOracle(): Promise<UniswapPriceOracle | undefined>;
|
|
26
|
+
/**
|
|
27
|
+
* Computes the fee asset price modifier to be used in the next checkpoint proposal.
|
|
28
|
+
*
|
|
29
|
+
* The modifier adjusts the on-chain fee asset price toward the oracle price,
|
|
30
|
+
* clamped to ±1% (±100 basis points) per checkpoint.
|
|
31
|
+
*
|
|
32
|
+
* Returns 0 if not on mainnet or if the oracle query fails.
|
|
33
|
+
*
|
|
34
|
+
* @param currentPriceE12 - Optional override for the parent checkpoint's eth-per-fee-asset
|
|
35
|
+
* (E12 scale). When omitted, the latest published value is read from L1. Pipelined
|
|
36
|
+
* proposers should supply the predicted parent value so the modifier they emit aligns
|
|
37
|
+
* with the parent fee header L1 will see when the previous pipelined checkpoint lands.
|
|
38
|
+
* @returns The price modifier in basis points (positive to increase price, negative to decrease)
|
|
39
|
+
*/
|
|
40
|
+
computePriceModifier(currentPriceE12?: bigint): Promise<bigint>;
|
|
41
|
+
/**
|
|
42
|
+
* Gets the current oracle price (ETH per fee asset, scaled by 1e12).
|
|
43
|
+
* Returns undefined if not on mainnet or if the oracle query fails.
|
|
44
|
+
*/
|
|
45
|
+
getOraclePrice(): Promise<bigint | undefined>;
|
|
46
|
+
/**
|
|
47
|
+
* Computes the basis points modifier needed to move from current price toward target price.
|
|
48
|
+
*
|
|
49
|
+
* @param currentPrice - Current ETH per fee asset (E12 scale)
|
|
50
|
+
* @param targetPrice - Target ETH per fee asset (E12 scale)
|
|
51
|
+
* @returns Basis points modifier clamped to ±100 (±1%)
|
|
52
|
+
*/
|
|
53
|
+
computePriceModifierBps(currentPrice: bigint, targetPrice: bigint): bigint;
|
|
54
|
+
}
|
|
55
|
+
/** Mainnet Uniswap V4 StateView contract address */
|
|
56
|
+
export declare const STATE_VIEW_ADDRESS: EthAddress;
|
|
57
|
+
/**
|
|
58
|
+
* Converts Uniswap's sqrtPriceX96 directly to ETH per FeeAsset (E12).
|
|
59
|
+
*
|
|
60
|
+
* For an ETH/FeeAsset pool where ETH is currency0 and FeeAsset is currency1:
|
|
61
|
+
* - Uniswap's sqrtPriceX96 = sqrt(FeeAsset/ETH) * 2^96
|
|
62
|
+
* - We need: ETH/FeeAsset with 1e12 precision
|
|
63
|
+
*
|
|
64
|
+
* Math:
|
|
65
|
+
* price = (sqrtPriceX96 / 2^96)^2 = sqrtPriceX96^2 / 2^192 (FeeAsset per ETH)
|
|
66
|
+
* ethPerFeeAsset = 1 / price = 2^192 / sqrtPriceX96^2
|
|
67
|
+
* ethPerFeeAssetE12 = ethPerFeeAsset * 1e12 = 1e12 * 2^192 / sqrtPriceX96^2
|
|
68
|
+
*/
|
|
69
|
+
export declare function sqrtPriceX96ToEthPerFeeAssetE12(sqrtPriceX96: bigint): bigint;
|
|
70
|
+
/**
|
|
71
|
+
* Client for querying the ETH/FeeAsset price from Uniswap V4.
|
|
72
|
+
* Returns prices in ETH per FeeAsset format (E12) to match the rollup contract.
|
|
73
|
+
*/
|
|
74
|
+
declare class UniswapPriceOracle {
|
|
75
|
+
private readonly client;
|
|
76
|
+
private readonly stateView;
|
|
77
|
+
private readonly poolId;
|
|
78
|
+
private readonly log;
|
|
79
|
+
constructor(client: ViemClient, log?: Logger);
|
|
80
|
+
/**
|
|
81
|
+
* Computes the PoolId from the pool configuration by hashing its components.
|
|
82
|
+
* PoolId = keccak256(abi.encode(currency0, currency1, fee, tickSpacing, hooks))
|
|
83
|
+
* For mainnet, the value is expected to be: 0xce2899b16743cfd5a954d8122d5e07f410305b1aebee39fd73d9f3b9ebf10c2f
|
|
84
|
+
* Derived anyway to make it simpler to change if needed.
|
|
85
|
+
*/
|
|
86
|
+
computePoolId(): Hex;
|
|
87
|
+
isPoolInitialized(): Promise<boolean>;
|
|
88
|
+
/**
|
|
89
|
+
* Gets the price as ETH per FeeAsset, scaled by 1e12.
|
|
90
|
+
* This is the format expected by the rollup contract.
|
|
91
|
+
*
|
|
92
|
+
* @param blockNumber - Optional block number to query at (defaults to latest)
|
|
93
|
+
*/
|
|
94
|
+
getEthPerFeeAssetE12(blockNumber?: bigint): Promise<bigint>;
|
|
95
|
+
/**
|
|
96
|
+
* Gets the median price over the last N blocks as ETH per FeeAsset (E12).
|
|
97
|
+
* Using median helps protect against single-block manipulation.
|
|
98
|
+
*
|
|
99
|
+
* @param numBlocks - Number of recent blocks to sample (default: 5)
|
|
100
|
+
* @returns Median price as ETH per FeeAsset, scaled by 1e12
|
|
101
|
+
*/
|
|
102
|
+
getMeanEthPerFeeAssetE12(numBlocks?: number): Promise<bigint>;
|
|
103
|
+
}
|
|
104
|
+
export {};
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlX2Fzc2V0X3ByaWNlX29yYWNsZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyYWN0cy9mZWVfYXNzZXRfcHJpY2Vfb3JhY2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFFbEUsT0FBTyxFQUFFLEtBQUssR0FBRyxFQUFtRSxNQUFNLE1BQU0sQ0FBQztBQUVqRyxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU3Qyw4RUFBNEU7QUFDNUUsZUFBTyxNQUFNLGdDQUFnQyxPQUFPLENBQUM7QUFFckQ7Ozs7OztHQU1HO0FBQ0gsd0JBQWdCLDZCQUE2QixDQUFDLFFBQVEsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUV2RTtBQUVEOzs7R0FHRztBQUNILHFCQUFhLG1CQUFtQjtJQUU1QixPQUFPLENBQUMsTUFBTTtJQUNkLE9BQU8sQ0FBQyxRQUFRLENBQUMsY0FBYztJQUMvQixPQUFPLENBQUMsR0FBRztJQUhiLFlBQ1UsTUFBTSxFQUFFLFVBQVUsRUFDVCxjQUFjLEVBQUUsY0FBYyxFQUN2QyxHQUFHLEdBQUUsTUFBK0MsRUFDMUQ7SUFHRSxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxDQUFDLENBb0JoRTtJQUVEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDRyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQTRCcEU7SUFFRDs7O09BR0c7SUFDRyxjQUFjLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FZbEQ7SUFFRDs7Ozs7O09BTUc7SUFDSCx1QkFBdUIsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLEdBQUcsTUFBTSxDQWtCekU7Q0FDRjtBQUVELG9EQUFvRDtBQUNwRCxlQUFPLE1BQU0sa0JBQWtCLFlBQXNFLENBQUM7QUFJdEc7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCx3QkFBZ0IsK0JBQStCLENBQUMsWUFBWSxFQUFFLE1BQU0sR0FBRyxNQUFNLENBSzVFO0FBbUJEOzs7R0FHRztBQUNILGNBQU0sa0JBQWtCO0lBTXBCLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtJQUx6QixPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUMzQixPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBTTtJQUM3QixPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBUztJQUU3QixZQUNtQixNQUFNLEVBQUUsVUFBVSxFQUNuQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBVWI7SUFFRDs7Ozs7T0FLRztJQUVILGFBQWEsSUFBSSxHQUFHLENBVW5CO0lBRUssaUJBQWlCLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUcxQztJQUVEOzs7OztPQUtHO0lBQ0csb0JBQW9CLENBQUMsV0FBVyxDQUFDLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FNaEU7SUFFRDs7Ozs7O09BTUc7SUFDRyx3QkFBd0IsQ0FBQyxTQUFTLEdBQUUsTUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0EyQnJFO0NBQ0YifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fee_asset_price_oracle.d.ts","sourceRoot":"","sources":["../../src/contracts/fee_asset_price_oracle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,KAAK,GAAG,EAAmE,MAAM,MAAM,CAAC;AAEjG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,8EAA4E;AAC5E,eAAO,MAAM,gCAAgC,OAAO,CAAC;AAErD;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEvE;AAED;;;GAGG;AACH,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,GAAG;IAHb,YACU,MAAM,EAAE,UAAU,EACT,cAAc,EAAE,cAAc,EACvC,GAAG,GAAE,MAA+C,EAC1D;IAGE,gBAAgB,IAAI,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAoBhE;IAED;;;;;;;;;;;;;OAaG;IACG,oBAAoB,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BpE;IAED;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAYlD;IAED;;;;;;OAMG;IACH,uBAAuB,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAkBzE;CACF;AAED,oDAAoD;AACpD,eAAO,MAAM,kBAAkB,YAAsE,CAAC;AAItG;;;;;;;;;;;GAWG;AACH,wBAAgB,+BAA+B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAK5E;AAmBD;;;GAGG;AACH,cAAM,kBAAkB;IAMpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IALzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAM;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAE7B,YACmB,MAAM,EAAE,UAAU,EACnC,GAAG,CAAC,EAAE,MAAM,EAUb;IAED;;;;;OAKG;IAEH,aAAa,IAAI,GAAG,CAUnB;IAEK,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAG1C;IAED;;;;;OAKG;IACG,oBAAoB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMhE;IAED;;;;;;OAMG;IACG,wBAAwB,CAAC,SAAS,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CA2BrE;CACF"}
|