-
Notifications
You must be signed in to change notification settings - Fork 296
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: slasher #10693
feat: slasher #10693
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
error GovernanceProposer__FailedToPropose(IPayload proposal); // 0x6ca2a2ed | ||
error GovernanceProposer__InstanceHaveNoCode(address instance); // 0x20a3b441 | ||
error GovernanceProposer__InsufficientVotes(); // 0xba1e05ef | ||
error GovernanceProposer__CanOnlyPushProposalInPast(); // 0x84a5b5ae |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Different values from forge inspect
and cast
, seems like they were stale.
@@ -305,9 +305,9 @@ async function setupFromFresh( | |||
} | |||
|
|||
const deployL1ContractsValues = await setupL1Contracts(aztecNodeConfig.l1RpcUrl, hdAccount, logger, { | |||
...getL1ContractsConfigEnvVars(), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
5fd20f0
to
714f638
Compare
2409751
to
4edc50a
Compare
910484c
to
8bf681a
Compare
@@ -19,6 +19,7 @@ coin_issuer_address=$(echo "$output" | grep -oP 'CoinIssuer Address: \K0x[a-fA-F | |||
reward_distributor_address=$(echo "$output" | grep -oP 'RewardDistributor Address: \K0x[a-fA-F0-9]{40}') | |||
governance_proposer_address=$(echo "$output" | grep -oP 'GovernanceProposer Address: \K0x[a-fA-F0-9]{40}') | |||
governance_address=$(echo "$output" | grep -oP 'Governance Address: \K0x[a-fA-F0-9]{40}') | |||
slash_factory_address=$(echo "$output" | grep -oP 'SlashFactory Address: \K0x[a-fA-F0-9]{40}') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
note to self, make a file that can be shared to get these addresses
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
#10611 to hide some of it. But yes.
const NUM_NODES = 4; | ||
const BOOT_NODE_UDP_PORT = 40600; | ||
|
||
const DATA_DIR = './data/gossip'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
datadir collides with gossip test
Also probably do not want the qosAlerts as it is not running with those in CI
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah, yes will fix.
|
||
export * from './slasher_client.js'; | ||
|
||
export const createSlasherClient = async ( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
code consistency nit: in the rest of the codebase this is usually in a factory.ts
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The p2p is the same with the index, was based on that 😬 Can create a factory for it though 🤷
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ah yeah, thats got to change too
* | ||
* The implementation is VERY brute in the sense that it only looks for pruned blocks and then tries to slash | ||
* the full committee of that. | ||
* If it sees a prune, it will mark the full epoch as "to be slashed" and the |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* If it sees a prune, it will mark the full epoch as "to be slashed" and the | |
* If it sees a prune, it will mark the full epoch as "to be slashed" |
this.synchedLatestBlockNumber = store.openSingleton('slasher_last_l2_block'); | ||
this.synchedProvenBlockNumber = store.openSingleton('slasher_last_proven_l2_block'); | ||
|
||
if (config.l1Contracts.slashFactoryAddress && config.l1Contracts.slashFactoryAddress !== EthAddress.ZERO) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If they arent set we should log a warning
private latestBlockNumberAtStart = -1; | ||
private provenBlockNumberAtStart = -1; | ||
|
||
private synchedBlockSlots: AztecMap<number, bigint>; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is identical to what the archiver stores? why is it duplicated?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🥜🧠 did not want to think.
Copied the p2p client and deleted things so when some of these were already just though I would do the same.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The hashes is to work well with the interfaces and how the l2blockstream is setup.
} | ||
|
||
/** | ||
* Updates the tx pool after a chain prune. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
stale comment
} | ||
|
||
/** | ||
* Handles new mined blocks by marking the txs in them as mined. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
stale comment
|
||
protected slashingLog = createLogger('sequencer:publisher:slashing'); | ||
protected slashingProposerAddress?: EthAddress; | ||
private getSlashPayload?: GetSlashPayloadCallBack = undefined; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is this callback just to prevent the publisher maintaining a reference to the slasher itself?
Why can it not just do that
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Mainly the way things are setup. The publisher can be passed in when you are creating the sequencer before you got any of the archiver or anything setup so seemed like the simplest way to get it in there.
But think we probably need to look more into the setups to clear some of that up.
const nextRoundTimestamp1 = await rollup.read.getTimestampForSlot([ | ||
((await rollup.read.getCurrentSlot()) / roundSize) * roundSize + roundSize, | ||
]); | ||
await t.ctx.cheatCodes.eth.warp(Number(nextRoundTimestamp1)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think the time faker will need to also be updated here, im surprised that clock drift has not caused an error
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh da pain.
} | ||
} | ||
|
||
for (let i = 0; i < 15; i++) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
15 is a magic number
}).filter(log => log.eventName === 'Slashed'); | ||
|
||
const attestersSlashed = slashingEvents.map(event => { | ||
// Because TS is a little nagging bitch |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
amen
for (const attester of attestersPre) { | ||
const attesterInfo = await rollup.read.getInfo([attester]); | ||
// Check that status is Living | ||
expect(attesterInfo.status).toEqual(2); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
cant cast an enum here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The enum is in sol, we don't got it on the ts side.
|
||
export * from './slasher_client.js'; | ||
|
||
export const createSlasherClient = async ( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ah yeah, thats got to change too
@@ -102,7 +99,7 @@ contract GovernanceProposer is IGovernanceProposer { | |||
*/ | |||
function pushProposal(uint256 _roundNumber) external override(IGovernanceProposer) returns (bool) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: Maybe this function name needs to change. Certainly the @notice above needs to.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ye, naming might be good to change. Not sure if people will be confused if it is called execute, but that would be more fitting and was considered back in the day, just kept like push proposal to be more explicitly different.
} | ||
|
||
variable "SLASH_FACTORY_CONTRACT_ADDRESS" { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
side note, I'm quite sure this terraform is dead code.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, this was used for ECS devnet where contract addresses were shared between services via terraform outputs
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we just get rid of them then? If not used
@@ -180,6 +204,40 @@ contract SpartaTest is DecoderBase { | |||
_testBlock("mixed_block_2", false, 3, false); | |||
} | |||
|
|||
function testNukeFromOrbit() public setup(4) { | |||
// We propose some blocks, and have a bunch of validators attest to them. | |||
// Then we slash EVERYONE that was in the committees because the epoch never |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think this is predicated on the epoch never finalizing?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No not predicated, they could decide to slash for whatever. It was more a "story" around the test. Showing slashing, and then using case of blocks without proofs as "never" being proven because the test does not proof it. If proving in this test could still punish them just because you don't like them.
|
||
// This test is showcasing that slashing can happen, abusing that our nodes are honest but stupid | ||
// making them slash themselves. | ||
describe('e2e_p2p_network', () => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
describe('e2e_p2p_network', () => { | |
describe('e2e_p2p_slashing', () => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same thing below in the .create
|
||
const lifetime = slotNumber + toNext + BigInt(this.config.slashingRoundSize); | ||
|
||
this.slashEvents.push({ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
another thing about this design, does every voting client need to detect the offense themselves to be able to vote on it ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In the current impl yes. So not all nodes would see the same, it would be based on when they are online.
But it is as stated in the beginning in there only a very brute implementation. I think a better "real" implementation would be looking for events for this specific kind of action or accepting "evidence" from other parties as well. This is mainly to put in some of the plumbing and show that it can be done.
* - Only vote on the proposal if it is possible to reach, e.g., if 6 votes are needed and only 4 slots are left don't vote. | ||
* - Stop voting on a payload once it is processed. | ||
* - Only vote on the proposal if it have not already been executed | ||
* - Caveat, we need to fully decide if it is acceptable to have the same payload address multiple times. In the current |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Interesting feature: it would decrease the overhead needed to slash someone, so maybe fewer petty crimes?
We could mitigate the "multiple slash" by adding a minimum delay.
Regardless, I default to awaiting user demand.
expect(client2.getSyncedLatestBlockNum()).toEqual(client.getSyncedLatestBlockNum()); | ||
}); | ||
|
||
describe('Chain prunes', () => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it would be good to show that the slash event gets registered.
const lifetime = slotNumber + toNext + BigInt(this.config.slashingRoundSize); | ||
|
||
this.slashEvents.push({ | ||
epoch: epochNumber, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The L2 block stream feels like a massive amount of machinery to just get the number of an epoch that had a reorg.
Out of scope, but what do you think about just a pub/sub model where the archiver itself emits events and arbitrary services subscribe? Then we don't need this baggage of lmdb and a separate block stream in this class.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The L2 block stream feels like a massive amount of machinery to just get the number of an epoch that had a reorg.
The p2p client and the ServerWorldStateSynchronizer both already used their own instance so went with that approach to not deviate too much. Had a short discussion with claude, but don't want to bloat this pr. But mainly, it was the thing we already used, so just did the same.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
in agreement with a pubsub model
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Posted #10846 with a basic test.
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-package: 0.69.1</summary> ## [0.69.1](aztec-package-v0.69.0...aztec-package-v0.69.1) (2025-01-08) ### Features * Optionally handle rpc errors with 200 + err body ([#11083](#11083)) ([b42756b](b42756b)) ### Miscellaneous * Representing `TxHash` as `Fr` ([#10954](#10954)) ([84e67ac](84e67ac)) </details> <details><summary>barretenberg.js: 0.69.1</summary> ## [0.69.1](barretenberg.js-v0.69.0...barretenberg.js-v0.69.1) (2025-01-08) ### Miscellaneous * **barretenberg.js:** Synchronize aztec-packages versions </details> <details><summary>aztec-packages: 0.69.1</summary> ## [0.69.1](aztec-packages-v0.69.0...aztec-packages-v0.69.1) (2025-01-08) ### Features * Acir formal proofs ([#10973](#10973)) ([1cb7cd7](1cb7cd7)) * **blobs:** Blob sink ([#10079](#10079)) ([94b6c86](94b6c86)) * Derive transcript structure between non-zk and zk flavors and between Ultra and UltraKeccak ([#11086](#11086)) ([48286c6](48286c6)) * Fix commitments and openings of masking polynomials used in zk sumcheck ([#10773](#10773)) ([fc48dcc](fc48dcc)) * Improve blob simulation speed ([#11075](#11075)) ([fe845e2](fe845e2)) * Improve witness generation for cycle_group::batch_mul ([#9563](#9563)) ([7da7f2b](7da7f2b)) * More efficient `compute_l2_to_l1_hash` ([#11036](#11036)) ([60d43fd](60d43fd)) * Optionally handle rpc errors with 200 + err body ([#11083](#11083)) ([b42756b](b42756b)) * Prover node checks txs availability before sending quote ([#10965](#10965)) ([b9e7109](b9e7109)), closes [#10803](#10803) * Slasher ([#10693](#10693)) ([9dad251](9dad251)) * Use unconstrained helper in `append_tx_effects_for_blob` ([#11037](#11037)) ([5355a5e](5355a5e)) * Validate block proposal txs iteratively ([#10921](#10921)) ([c92129e](c92129e)), closes [#10869](#10869) ### Bug Fixes * Add bytecode instances in reverse ([#11064](#11064)) ([036496c](036496c)) * Can't use `self.field` in trait default implementations ([#11004](#11004)) ([f31278f](f31278f)) * Check class registration nullifier in node before returning class ([#11074](#11074)) ([649b590](649b590)) * **ci:** Update docs hash ([#11082](#11082)) ([b0a8397](b0a8397)) * Optional check for architecture in bootstrap image-aztec ([#11085](#11085)) ([fed44a5](fed44a5)), closes [#10957](#10957) * Prover node retries gathering needed txs ([#11089](#11089)) ([6f07132](6f07132)) * Reset pc to 0 for next enqueued call in avm witgen ([#11043](#11043)) ([44e4816](44e4816)) * Update requests per call should be less than per tx ([#11072](#11072)) ([da5e95f](da5e95f)) * Update schema naming ([#11038](#11038)) ([547e556](547e556)) ### Miscellaneous * **avm:** Handle specific MSM errors ([#11068](#11068)) ([a5097a9](a5097a9)), closes [#10854](#10854) * **avm:** More column information in permutations ([#11070](#11070)) ([8829f24](8829f24)) * Avoid getport race conditions when starting anvil ([#11077](#11077)) ([b73f7f9](b73f7f9)) * Bump `noir-gates-diff` ([#11056](#11056)) ([e076000](e076000)) * Bump `noir-gates-diff` commit ([#11042](#11042)) ([c820a0e](c820a0e)) * Bump devnet prover agents ([#11046](#11046)) ([55de1ce](55de1ce)) * Bump rc-1 prover agents ([#11033](#11033)) ([fb58c16](fb58c16)) * **ci:** Fix CI to create baseline gate reports ([#11055](#11055)) ([e2f6905](e2f6905)) * Clean up proof lengths and IPA ([#11020](#11020)) ([800c834](800c834)) * Disable noir contracts tests until stabilized ([#11047](#11047)) ([a76b52e](a76b52e)) * Fix customTags is not iterable in e2e-prover-full ([#11057](#11057)) ([f35094f](f35094f)) * Fix invalid random log id ([#11076](#11076)) ([b1b67b0](b1b67b0)) * Fix write_recursion_inputs flow in bootstrap ([#11080](#11080)) ([cd5a615](cd5a615)) * Hide note_hashes log ([#11059](#11059)) ([d9a14d2](d9a14d2)) * Let IndexedTreeLeafPreimage have LeafPreimage as a parent trait ([#10913](#10913)) ([496a55a](496a55a)) * Load in the big dashboard during metrics install ([#11007](#11007)) ([f6f2c12](f6f2c12)) * New test that you can register, deploy, and call a public function all in one tx ([#11045](#11045)) ([5e3183c](5e3183c)) * Pass fn signatures ([#10849](#10849)) ([a2c4e98](a2c4e98)) * Patch jest to not use JSON serialization in message passing ci3 ([#10964](#10964)) ([d08f540](d08f540)) * Refactor tail public inputs ([#11031](#11031)) ([4ed1530](4ed1530)) * Remove abi refs from publisher ([#10766](#10766)) ([17d6802](17d6802)) * Remove some instances of `--silence-warnings` ([#11071](#11071)) ([ecbd59e](ecbd59e)) * Renaming getIncomingNotes ([#10743](#10743)) ([ffa7407](ffa7407)) * Replace relative paths to noir-protocol-circuits ([7194a7e](7194a7e)) * Replace relative paths to noir-protocol-circuits ([b00bd13](b00bd13)) * Replace relative paths to noir-protocol-circuits ([c4fcbc0](c4fcbc0)) * Replace relative paths to noir-protocol-circuits ([694343d](694343d)) * Representing `TxHash` as `Fr` ([#10954](#10954)) ([84e67ac](84e67ac)) * Restore `prove_then_verify` test on `verify_rollup_honk_proof` ([#11018](#11018)) ([79e289d](79e289d)) * Unify honk verifier contracts ([#11067](#11067)) ([9968849](9968849)) * Update noir-bignum to v0.5.0 ([#11066](#11066)) ([bf10a5c](bf10a5c)) * Updated aztec-spartan.sh and the README ([#11088](#11088)) ([56128a6](56128a6)) </details> <details><summary>barretenberg: 0.69.1</summary> ## [0.69.1](barretenberg-v0.69.0...barretenberg-v0.69.1) (2025-01-08) ### Features * Acir formal proofs ([#10973](#10973)) ([1cb7cd7](1cb7cd7)) * Derive transcript structure between non-zk and zk flavors and between Ultra and UltraKeccak ([#11086](#11086)) ([48286c6](48286c6)) * Fix commitments and openings of masking polynomials used in zk sumcheck ([#10773](#10773)) ([fc48dcc](fc48dcc)) * Improve witness generation for cycle_group::batch_mul ([#9563](#9563)) ([7da7f2b](7da7f2b)) ### Bug Fixes * Add bytecode instances in reverse ([#11064](#11064)) ([036496c](036496c)) * Reset pc to 0 for next enqueued call in avm witgen ([#11043](#11043)) ([44e4816](44e4816)) * Update requests per call should be less than per tx ([#11072](#11072)) ([da5e95f](da5e95f)) ### Miscellaneous * **avm:** Handle specific MSM errors ([#11068](#11068)) ([a5097a9](a5097a9)), closes [#10854](#10854) * **avm:** More column information in permutations ([#11070](#11070)) ([8829f24](8829f24)) * Clean up proof lengths and IPA ([#11020](#11020)) ([800c834](800c834)) * Fix write_recursion_inputs flow in bootstrap ([#11080](#11080)) ([cd5a615](cd5a615)) * Restore `prove_then_verify` test on `verify_rollup_honk_proof` ([#11018](#11018)) ([79e289d](79e289d)) * Unify honk verifier contracts ([#11067](#11067)) ([9968849](9968849)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-package: 0.69.1</summary> ## [0.69.1](AztecProtocol/aztec-packages@aztec-package-v0.69.0...aztec-package-v0.69.1) (2025-01-08) ### Features * Optionally handle rpc errors with 200 + err body ([#11083](AztecProtocol/aztec-packages#11083)) ([b42756b](AztecProtocol/aztec-packages@b42756b)) ### Miscellaneous * Representing `TxHash` as `Fr` ([#10954](AztecProtocol/aztec-packages#10954)) ([84e67ac](AztecProtocol/aztec-packages@84e67ac)) </details> <details><summary>barretenberg.js: 0.69.1</summary> ## [0.69.1](AztecProtocol/aztec-packages@barretenberg.js-v0.69.0...barretenberg.js-v0.69.1) (2025-01-08) ### Miscellaneous * **barretenberg.js:** Synchronize aztec-packages versions </details> <details><summary>aztec-packages: 0.69.1</summary> ## [0.69.1](AztecProtocol/aztec-packages@aztec-packages-v0.69.0...aztec-packages-v0.69.1) (2025-01-08) ### Features * Acir formal proofs ([#10973](AztecProtocol/aztec-packages#10973)) ([1cb7cd7](AztecProtocol/aztec-packages@1cb7cd7)) * **blobs:** Blob sink ([#10079](AztecProtocol/aztec-packages#10079)) ([94b6c86](AztecProtocol/aztec-packages@94b6c86)) * Derive transcript structure between non-zk and zk flavors and between Ultra and UltraKeccak ([#11086](AztecProtocol/aztec-packages#11086)) ([48286c6](AztecProtocol/aztec-packages@48286c6)) * Fix commitments and openings of masking polynomials used in zk sumcheck ([#10773](AztecProtocol/aztec-packages#10773)) ([fc48dcc](AztecProtocol/aztec-packages@fc48dcc)) * Improve blob simulation speed ([#11075](AztecProtocol/aztec-packages#11075)) ([fe845e2](AztecProtocol/aztec-packages@fe845e2)) * Improve witness generation for cycle_group::batch_mul ([#9563](AztecProtocol/aztec-packages#9563)) ([7da7f2b](AztecProtocol/aztec-packages@7da7f2b)) * More efficient `compute_l2_to_l1_hash` ([#11036](AztecProtocol/aztec-packages#11036)) ([60d43fd](AztecProtocol/aztec-packages@60d43fd)) * Optionally handle rpc errors with 200 + err body ([#11083](AztecProtocol/aztec-packages#11083)) ([b42756b](AztecProtocol/aztec-packages@b42756b)) * Prover node checks txs availability before sending quote ([#10965](AztecProtocol/aztec-packages#10965)) ([b9e7109](AztecProtocol/aztec-packages@b9e7109)), closes [#10803](AztecProtocol/aztec-packages#10803) * Slasher ([#10693](AztecProtocol/aztec-packages#10693)) ([9dad251](AztecProtocol/aztec-packages@9dad251)) * Use unconstrained helper in `append_tx_effects_for_blob` ([#11037](AztecProtocol/aztec-packages#11037)) ([5355a5e](AztecProtocol/aztec-packages@5355a5e)) * Validate block proposal txs iteratively ([#10921](AztecProtocol/aztec-packages#10921)) ([c92129e](AztecProtocol/aztec-packages@c92129e)), closes [#10869](AztecProtocol/aztec-packages#10869) ### Bug Fixes * Add bytecode instances in reverse ([#11064](AztecProtocol/aztec-packages#11064)) ([036496c](AztecProtocol/aztec-packages@036496c)) * Can't use `self.field` in trait default implementations ([#11004](AztecProtocol/aztec-packages#11004)) ([f31278f](AztecProtocol/aztec-packages@f31278f)) * Check class registration nullifier in node before returning class ([#11074](AztecProtocol/aztec-packages#11074)) ([649b590](AztecProtocol/aztec-packages@649b590)) * **ci:** Update docs hash ([#11082](AztecProtocol/aztec-packages#11082)) ([b0a8397](AztecProtocol/aztec-packages@b0a8397)) * Optional check for architecture in bootstrap image-aztec ([#11085](AztecProtocol/aztec-packages#11085)) ([fed44a5](AztecProtocol/aztec-packages@fed44a5)), closes [#10957](AztecProtocol/aztec-packages#10957) * Prover node retries gathering needed txs ([#11089](AztecProtocol/aztec-packages#11089)) ([6f07132](AztecProtocol/aztec-packages@6f07132)) * Reset pc to 0 for next enqueued call in avm witgen ([#11043](AztecProtocol/aztec-packages#11043)) ([44e4816](AztecProtocol/aztec-packages@44e4816)) * Update requests per call should be less than per tx ([#11072](AztecProtocol/aztec-packages#11072)) ([da5e95f](AztecProtocol/aztec-packages@da5e95f)) * Update schema naming ([#11038](AztecProtocol/aztec-packages#11038)) ([547e556](AztecProtocol/aztec-packages@547e556)) ### Miscellaneous * **avm:** Handle specific MSM errors ([#11068](AztecProtocol/aztec-packages#11068)) ([a5097a9](AztecProtocol/aztec-packages@a5097a9)), closes [#10854](AztecProtocol/aztec-packages#10854) * **avm:** More column information in permutations ([#11070](AztecProtocol/aztec-packages#11070)) ([8829f24](AztecProtocol/aztec-packages@8829f24)) * Avoid getport race conditions when starting anvil ([#11077](AztecProtocol/aztec-packages#11077)) ([b73f7f9](AztecProtocol/aztec-packages@b73f7f9)) * Bump `noir-gates-diff` ([#11056](AztecProtocol/aztec-packages#11056)) ([e076000](AztecProtocol/aztec-packages@e076000)) * Bump `noir-gates-diff` commit ([#11042](AztecProtocol/aztec-packages#11042)) ([c820a0e](AztecProtocol/aztec-packages@c820a0e)) * Bump devnet prover agents ([#11046](AztecProtocol/aztec-packages#11046)) ([55de1ce](AztecProtocol/aztec-packages@55de1ce)) * Bump rc-1 prover agents ([#11033](AztecProtocol/aztec-packages#11033)) ([fb58c16](AztecProtocol/aztec-packages@fb58c16)) * **ci:** Fix CI to create baseline gate reports ([#11055](AztecProtocol/aztec-packages#11055)) ([e2f6905](AztecProtocol/aztec-packages@e2f6905)) * Clean up proof lengths and IPA ([#11020](AztecProtocol/aztec-packages#11020)) ([800c834](AztecProtocol/aztec-packages@800c834)) * Disable noir contracts tests until stabilized ([#11047](AztecProtocol/aztec-packages#11047)) ([a76b52e](AztecProtocol/aztec-packages@a76b52e)) * Fix customTags is not iterable in e2e-prover-full ([#11057](AztecProtocol/aztec-packages#11057)) ([f35094f](AztecProtocol/aztec-packages@f35094f)) * Fix invalid random log id ([#11076](AztecProtocol/aztec-packages#11076)) ([b1b67b0](AztecProtocol/aztec-packages@b1b67b0)) * Fix write_recursion_inputs flow in bootstrap ([#11080](AztecProtocol/aztec-packages#11080)) ([cd5a615](AztecProtocol/aztec-packages@cd5a615)) * Hide note_hashes log ([#11059](AztecProtocol/aztec-packages#11059)) ([d9a14d2](AztecProtocol/aztec-packages@d9a14d2)) * Let IndexedTreeLeafPreimage have LeafPreimage as a parent trait ([#10913](AztecProtocol/aztec-packages#10913)) ([496a55a](AztecProtocol/aztec-packages@496a55a)) * Load in the big dashboard during metrics install ([#11007](AztecProtocol/aztec-packages#11007)) ([f6f2c12](AztecProtocol/aztec-packages@f6f2c12)) * New test that you can register, deploy, and call a public function all in one tx ([#11045](AztecProtocol/aztec-packages#11045)) ([5e3183c](AztecProtocol/aztec-packages@5e3183c)) * Pass fn signatures ([#10849](AztecProtocol/aztec-packages#10849)) ([a2c4e98](AztecProtocol/aztec-packages@a2c4e98)) * Patch jest to not use JSON serialization in message passing ci3 ([#10964](AztecProtocol/aztec-packages#10964)) ([d08f540](AztecProtocol/aztec-packages@d08f540)) * Refactor tail public inputs ([#11031](AztecProtocol/aztec-packages#11031)) ([4ed1530](AztecProtocol/aztec-packages@4ed1530)) * Remove abi refs from publisher ([#10766](AztecProtocol/aztec-packages#10766)) ([17d6802](AztecProtocol/aztec-packages@17d6802)) * Remove some instances of `--silence-warnings` ([#11071](AztecProtocol/aztec-packages#11071)) ([ecbd59e](AztecProtocol/aztec-packages@ecbd59e)) * Renaming getIncomingNotes ([#10743](AztecProtocol/aztec-packages#10743)) ([ffa7407](AztecProtocol/aztec-packages@ffa7407)) * Replace relative paths to noir-protocol-circuits ([7194a7e](AztecProtocol/aztec-packages@7194a7e)) * Replace relative paths to noir-protocol-circuits ([b00bd13](AztecProtocol/aztec-packages@b00bd13)) * Replace relative paths to noir-protocol-circuits ([c4fcbc0](AztecProtocol/aztec-packages@c4fcbc0)) * Replace relative paths to noir-protocol-circuits ([694343d](AztecProtocol/aztec-packages@694343d)) * Representing `TxHash` as `Fr` ([#10954](AztecProtocol/aztec-packages#10954)) ([84e67ac](AztecProtocol/aztec-packages@84e67ac)) * Restore `prove_then_verify` test on `verify_rollup_honk_proof` ([#11018](AztecProtocol/aztec-packages#11018)) ([79e289d](AztecProtocol/aztec-packages@79e289d)) * Unify honk verifier contracts ([#11067](AztecProtocol/aztec-packages#11067)) ([9968849](AztecProtocol/aztec-packages@9968849)) * Update noir-bignum to v0.5.0 ([#11066](AztecProtocol/aztec-packages#11066)) ([bf10a5c](AztecProtocol/aztec-packages@bf10a5c)) * Updated aztec-spartan.sh and the README ([#11088](AztecProtocol/aztec-packages#11088)) ([56128a6](AztecProtocol/aztec-packages@56128a6)) </details> <details><summary>barretenberg: 0.69.1</summary> ## [0.69.1](AztecProtocol/aztec-packages@barretenberg-v0.69.0...barretenberg-v0.69.1) (2025-01-08) ### Features * Acir formal proofs ([#10973](AztecProtocol/aztec-packages#10973)) ([1cb7cd7](AztecProtocol/aztec-packages@1cb7cd7)) * Derive transcript structure between non-zk and zk flavors and between Ultra and UltraKeccak ([#11086](AztecProtocol/aztec-packages#11086)) ([48286c6](AztecProtocol/aztec-packages@48286c6)) * Fix commitments and openings of masking polynomials used in zk sumcheck ([#10773](AztecProtocol/aztec-packages#10773)) ([fc48dcc](AztecProtocol/aztec-packages@fc48dcc)) * Improve witness generation for cycle_group::batch_mul ([#9563](AztecProtocol/aztec-packages#9563)) ([7da7f2b](AztecProtocol/aztec-packages@7da7f2b)) ### Bug Fixes * Add bytecode instances in reverse ([#11064](AztecProtocol/aztec-packages#11064)) ([036496c](AztecProtocol/aztec-packages@036496c)) * Reset pc to 0 for next enqueued call in avm witgen ([#11043](AztecProtocol/aztec-packages#11043)) ([44e4816](AztecProtocol/aztec-packages@44e4816)) * Update requests per call should be less than per tx ([#11072](AztecProtocol/aztec-packages#11072)) ([da5e95f](AztecProtocol/aztec-packages@da5e95f)) ### Miscellaneous * **avm:** Handle specific MSM errors ([#11068](AztecProtocol/aztec-packages#11068)) ([a5097a9](AztecProtocol/aztec-packages@a5097a9)), closes [#10854](AztecProtocol/aztec-packages#10854) * **avm:** More column information in permutations ([#11070](AztecProtocol/aztec-packages#11070)) ([8829f24](AztecProtocol/aztec-packages@8829f24)) * Clean up proof lengths and IPA ([#11020](AztecProtocol/aztec-packages#11020)) ([800c834](AztecProtocol/aztec-packages@800c834)) * Fix write_recursion_inputs flow in bootstrap ([#11080](AztecProtocol/aztec-packages#11080)) ([cd5a615](AztecProtocol/aztec-packages@cd5a615)) * Restore `prove_then_verify` test on `verify_rollup_honk_proof` ([#11018](AztecProtocol/aztec-packages#11018)) ([79e289d](AztecProtocol/aztec-packages@79e289d)) * Unify honk verifier contracts ([#11067](AztecProtocol/aztec-packages#11067)) ([9968849](AztecProtocol/aztec-packages@9968849)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
Fixes #10102 by making the poorest of mens slasher. The slasher is following what goes on with pruning, and if there is a prune, it will take it as a call to action, and start voting on slashing the committee of that epoch. Note that it is a "stupid brute" in the sense that it don't just vote to slash those that attested, but the entire committee. This can go for now as we are doing this to show that we "can" handle it, but
create2
such that slashing clients that wish to do the same action will figure out the same payload without needing to communicate.e2e_p2p
to use theL1GasUtils
since thesyncMockSystemTime
would sometimes run with invalid nonce and stall forever.The setup is NOT deploying the payload to slash, mainly dealing with the voting that it "should" happen. But if it have sufficient votes, anyone can deploy the payload using the factory and then execute it. There is a new p2p test where the network end up slashing themselves removing every single attester.