Skip to content
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

Merged
merged 2 commits into from
Jan 3, 2025
Merged

feat: slasher #10693

merged 2 commits into from
Jan 3, 2025

Conversation

LHerskind
Copy link
Contributor

@LHerskind LHerskind commented Dec 13, 2024

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

  • Refactors the governance proposer into an empire base that can be used for both the governance and slasher proposer.
  • Creates a new slasher client that follow along and strike when it see fit
  • L1 publisher is getting a slashing payload from the slasher client (if connected) and votes on both it and governance
  • Adds a slashing factory which uses create2 such that slashing clients that wish to do the same action will figure out the same payload without needing to communicate.
  • Alters the empire such that votes can be cast before the payload is deployed
    • Note that this is only the "proposer" part, for gov there is a real vote after where the payload must be published before it can start.
  • Update the e2e_p2p to use the L1GasUtils since the syncMockSystemTime 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.

Copy link
Contributor Author

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
Copy link
Contributor Author

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(),
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sad-frog-gif-by-namslam

@LHerskind LHerskind force-pushed the lh/10102 branch 2 times, most recently from 5fd20f0 to 714f638 Compare December 13, 2024 11:30
@LHerskind LHerskind marked this pull request as ready for review December 13, 2024 11:30
@LHerskind LHerskind added C-p2p Component: peer to peer e2e-p2p CI: Enables this CI job. and removed C-p2p Component: peer to peer labels Dec 13, 2024
@LHerskind LHerskind force-pushed the lh/10102 branch 3 times, most recently from 2409751 to 4edc50a Compare December 16, 2024 08:15
@LHerskind LHerskind force-pushed the lh/10102 branch 2 times, most recently from 910484c to 8bf681a Compare December 17, 2024 09:08
@@ -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}')
Copy link
Member

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

Copy link
Contributor Author

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';
Copy link
Member

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

Copy link
Contributor Author

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 (
Copy link
Member

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

Copy link
Contributor Author

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 🤷

Copy link
Member

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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* 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) {
Copy link
Member

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>;
Copy link
Member

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?

Copy link
Contributor Author

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.

Copy link
Contributor Author

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.
Copy link
Member

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.
Copy link
Member

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;
Copy link
Member

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

Copy link
Contributor Author

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));
Copy link
Member

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

Copy link
Contributor Author

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++) {
Copy link
Member

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
Copy link
Member

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);
Copy link
Member

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?

Copy link
Contributor Author

@LHerskind LHerskind Dec 17, 2024

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 (
Copy link
Member

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) {
Copy link
Collaborator

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.

Copy link
Contributor Author

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" {
Copy link
Collaborator

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.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@alexghr or @spypsy, can you comment?

Copy link
Member

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

Copy link
Contributor Author

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
Copy link
Collaborator

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?

Copy link
Contributor Author

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', () => {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
describe('e2e_p2p_network', () => {
describe('e2e_p2p_slashing', () => {

Copy link
Collaborator

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({
Copy link
Member

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 ?

Copy link
Contributor Author

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
Copy link
Collaborator

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', () => {
Copy link
Collaborator

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,
Copy link
Collaborator

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.

Copy link
Contributor Author

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.

Copy link
Member

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

Copy link
Collaborator

@just-mitch just-mitch left a 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.

@LHerskind LHerskind merged commit 9dad251 into master Jan 3, 2025
55 checks passed
@LHerskind LHerskind deleted the lh/10102 branch January 3, 2025 14:39
rahul-kothari pushed a commit that referenced this pull request Jan 8, 2025
🤖 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).
AztecBot added a commit to AztecProtocol/barretenberg that referenced this pull request Jan 9, 2025
🤖 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).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
e2e-p2p CI: Enables this CI job.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

feat: implement "misbehaviour detector" and slash
4 participants