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

modpow implementation is not constant-time #19

Open
phayes opened this issue Apr 30, 2019 · 49 comments
Open

modpow implementation is not constant-time #19

phayes opened this issue Apr 30, 2019 · 49 comments
Labels

Comments

@phayes
Copy link
Contributor

phayes commented Apr 30, 2019

Hi there,

I'm the author of sidefuzz (https://github.com/phayes/sidefuzz) and I have found what appears to be variable-time behavior in the rsa::internals::encrypt() function. Specifically, rsa::internals::encrypt() appears to be variable-time in relation to the message. Note that I haven't worked this up into an actual exploit, but merely demonstrated that this function isn't constant-time in relation to the message inputed.

Specifically, the message 20d90c8af42aac9b1ee53dc9a0187201 takes 549894 instructions to encrypt, while the message 5a28cec68d47f6fe3b1df54c9f320f6d takes 552427 instruction to encrypt. This is a difference of 2533 instructions, or about 0.5%. So it's a slight difference, but probably exploitable with sufficient sampling.

I have crated a fuzzing targets here: https://github.com/phayes/sidefuzz-targets

You can confirm this difference with the sidefuzz tool like so:

sidefuzz check ./target/wasm32-unknown-unknown/release/rsa_encrypt_message.wasm 5a28cec68d47f6fe3b1df54c9f320f6d 20d90c8af42aac9b1ee53dc9a0187201
samples: 20000, t-value: 219771.0790572351, confidence: 100%
Found timing difference of 2533 instructions between these two inputs with 100% confidence:
input 1: 5a28cec68d47f6fe3b1df54c9f320f6d (552427 instructions)
input 2: 20d90c8af42aac9b1ee53dc9a0187201 (549894 instructions)

My first suspicion was that this was due to num_bigint_dig::BigUint::from_bytes_be() being variable-time, but fuzzing that function specifically results in what appears to be constant-time behavior. So I'm not actually sure where the problem is.

@newpavlov
Copy link
Member

IIRC RSA blinding (which I believe is used in this implementation) uses random number, so while execution time is still variable, it does not correlate with a protected secret.

@phayes
Copy link
Contributor Author

phayes commented Apr 30, 2019

Hi @newpavlov ,

I don't think that's the case here. The fuzzing target is directly testing this function:

/// Raw RSA encryption of m with the public key. No padding is performed.
#[inline]
pub fn encrypt<K: PublicKey>(key: &K, m: &BigUint) -> BigUint {
    m.modpow(key.e(), key.n())

So the problem is going to be in the implementation of modpow.

I've also got another fuzzing target that does full pkcs1v15 padding with a statically seeded CPRNG. It displays the same variable-time behavior (with a statically seeded deterministic PRNG mind-you), but the first fuzzing target was the more minimal case, so that's what I reported. (sidefuzz also accounts for RNGs by repeated sampling and taking a t-value, but this doesn't apply here)

Admittedly, this could also be an artifact of the fuzzer (which would be a bug in the fuzzer), but I don't think that's the case here either.

@dignifiedquire
Copy link
Member

dignifiedquire commented Apr 30, 2019 via email

@tarcieri tarcieri changed the title Potential timing vulnerability modpow implementation is not constant-time Apr 25, 2023
@tarcieri
Copy link
Member

tarcieri commented Apr 25, 2023

crypto-bigint now has a constant-time modpow implementation in the form of DynResidue::pow, however it uses Montgomery form internally so it may not be the fastest option for straight modpow since converting in/out of Montgomery form is costly, and it still monomorphizes around a fixed number of limbs.

For the purposes of rsa (and dsa) we probably need to add a new Uint type like UintVec which uses a number of limbs chosen at runtime as a proper num_bigint_dig::BigUint replacement.

Edit: work on crypto_bigint::BoxedUint has started.

@tarcieri
Copy link
Member

tarcieri commented Sep 5, 2023

Until this is addressed it seems like something we should more prominently highlight in security-related documentation.

Edit: opened #373 (and merged!)

@tomato42
Copy link

tomato42 commented Nov 22, 2023

Hi! 👋

I've recently been working on RSA side-channel attacks, and found that many implementations are vulnerable. That's described in the Marvin Attack.

Thanks to help by @ueno, who contributed the test harness, I was able to run the test against rust-crypto (exact versions of all packages are in the PR).

Unfortunately I have to report that the side-channel leakage from the numerical library is very substantial and easily detectable over the network. As such, I consider RustCrypto RSA to be vulnerable and exploitable.

Test results from a run with 100k repeats per probe on an i9-12900KS @ 5.225GHz:

Sign test mean p-value: 0.2189, median p-value: 0.06354, min p-value: 3.946e-60
Friedman test (chisquare approximation) for all samples
p-value: 8.827139162990364e-108
Worst pair: 2(no_padding_48), 4(signature_padding_8)
Mean of differences: -8.07298e-07s, 95% CI: -9.06918e-07s, -7.019407e-07s (±1.025e-07s)
Median of differences: -8.44500e-07s, 95% CI: -9.78000e-07s, -7.200000e-07s (±1.290e-07s)
Trimmed mean (5%) of differences: -7.27307e-07s, 95% CI: -8.13648e-07s, -6.316737e-07s (±9.099e-08s)
Trimmed mean (25%) of differences: -8.48652e-07s, 95% CI: -9.17708e-07s, -7.769631e-07s (±7.037e-08s)
Trimmed mean (45%) of differences: -9.56301e-07s, 95% CI: -1.05768e-06s, -8.603802e-07s (±9.865e-08s)
Trimean of differences: -4.72000e-07s, 95% CI: -5.76750e-07s, -3.635625e-07s (±1.066e-07s)

pairwise results are in report.txt

confidence intervals for the measurements are as follows:
conf_interval_plot_trim_mean_25

legend:

ID,Name
0,header_only
1,no_header_with_payload_48
2,no_padding_48
3,no_structure
4,signature_padding_8
5,valid_0
6,valid_48
7,valid_192
8,valid_246
9,valid_repeated_byte_payload_246_1
10,valid_repeated_byte_payload_246_255
11,zero_byte_in_padding_48_4

explanations of that are in the step2.py script in marvin-toolkit repo.

In other words, the protection from adding blinding is not sufficient, and Rust Crypto has at least the same issue as the CVE-2022-4304 in OpenSSL.

@tarcieri
Copy link
Member

@tomato42 indeed that's using PKCS#1v1.5 without random blinding, so with modpow being non-constant-time, it's to be expected. We should definitely get rid of any APIs which permit private key use without random blinding.

@tarcieri
Copy link
Member

Also just a note for the future, per our SECURITY.md we would've appreciated an advisory for this opened under a private security disclosure.

@tomato42
Copy link

@tarcieri If the de-blinding isn't performed using constant-time code, then use of blinding won't remove the side-channel signal, that's what the bug in OpenSSL was about: removal of the blinder and conversion to the constant-length bytes needs to be side-channel free too.

Also just a note for the future, per our SECURITY.md we would've appreciated an advisory for this opened under a private security disclosure.

ah, sorry about that; since this was linked as a security issue, I've assumed that the effect of it on security of RSA decryption was assumed public too.

@tarcieri
Copy link
Member

Our answer until now has been that the application of random blinding prevented such sidechannels, so the fact that isn't the case is news to us

@tomato42
Copy link

sorry, I'm confused, on one hand you say that the the privkey.decrypt(Pkcs1v15Encrypt, &buffer); won't use blinding, yet that's the public API that you say is protected by use of blinding in README.md...?

@tarcieri
Copy link
Member

tarcieri commented Nov 22, 2023

The README.md is wrong in that case.

(Also I'm just discovering this and haven't had time to look over any code yet to confirm specific details)

@tomato42
Copy link

tomato42 commented Nov 22, 2023

ok, I'm still running test with a larger sample, to see if there aren't additional sources of leakage. If you have any additional questions, feel free to ask

@tarcieri
Copy link
Member

I'd be curious if you saw similar sidechannels in non-PKCS#1v1.5 constructions like OAEP decryption or PSS signatures

@tomato42
Copy link

if you could propose a change on top of that PR that adds an OAEP decryption, I can run tests for that too (there are scripts in marvin-toolkit for testing OAEP too)

but since the leak is clearly from the numerical library, that means OAEP is also vulnerable, as that leak happens before any OAEP checks

even if PSS leaks like that, it doesn't make the implementation as easily exploitable, as both PKCS#1v1.5 an OAEP attacks are chosen ciphertext attacks, with PSS (or with PKCS#1 v1.5 signatures) the attacker can only reasonably affect the hash being signed, not the whole plaintext
(in other words, it's a fundamentally different attack, so the test for it needs to be different too)

@tarcieri
Copy link
Member

tarcieri commented Nov 22, 2023

Can you confirm you see the sidechannel against the raw blinded modpow operation (when used with e.g. rand_core::OsRng)? That's really what I'm curious about.

@tomato42
Copy link

Sorry, I'm not a rust developer, you will need to hand-hold me (provide the complete code to execute) if you want me to run any tests

@tarcieri
Copy link
Member

The branch containing that code has disappeared: https://github.com/ueno/marvin-toolkit/tree/wip/rust-crypto

You can test the low-level "hazmat" API: https://docs.rs/rsa/latest/rsa/hazmat/fn.rsa_decrypt.html

It would look something like:

https://github.com/tomato42/marvin-toolkit/pull/4/files#diff-c0f6b76f1d52cf643fb2f30ef85b81b20ace1aa7577d1f4603db0e091e052d66R50-R63

...replaced with:

    loop {
        let mut buffer = vec![0; args.size];
        let n = infile.read(&mut buffer)?;
        if n == 0 {
            break;
        }

        assert!(n == buffer.len());

        let now = Instant::now();
        let c = rsa::BigUint::from_bytes_be(&buffer);
        let _ =  rsa::hazmat::rsa_decrypt(Some(&mut rand_core::OsRng), &privkey, &c);
        writeln!(outfile, "{}", now.elapsed().as_nanos())?;
    }

Note you'll need to add rand_core as a dependency and enable the hazmat feature of rsa:

https://github.com/tomato42/marvin-toolkit/pull/4/files#diff-76856434fe4ad8f1f778ba0452c8d8e49e764d25adf1374d385634cd251e1ca2R6-R9

[dependencies]
anyhow = "1"
clap = { version = "4", features = ["derive"] }
rand_core = { version = "0.6", features = ["getrandom"] }
rsa = { version = "0.9", features = ["hazmat"] }

@tomato42
Copy link

(will test rsa_decrypt from hazmat later)

With 1 million observations per sample (same setup) I'm getting:

Sign test mean p-value: 0.09834, median p-value: 2.633e-08, min p-value: 0.0
Friedman test (chisquare approximation) for all samples
p-value: 0.0
Worst pair: 2(no_padding_48), 4(signature_padding_8)
Mean of differences: -2.06196e-06s, 95% CI: -2.09851e-06s, -2.022175e-06s (±3.817e-08s)
Median of differences: -3.22400e-06s, 95% CI: -3.24600e-06s, -3.205000e-06s (±2.050e-08s)
Trimmed mean (5%) of differences: -1.99461e-06s, 95% CI: -2.02364e-06s, -1.965729e-06s (±2.895e-08s)
Trimmed mean (25%) of differences: -2.08608e-06s, 95% CI: -2.10654e-06s, -2.067761e-06s (±1.939e-08s)
Trimmed mean (45%) of differences: -3.09282e-06s, 95% CI: -3.11547e-06s, -3.070944e-06s (±2.227e-08s)
Trimean of differences: -2.22769e-06s, 95% CI: -2.25800e-06s, -2.198494e-06s (±2.975e-08s

conf_interval_plot_trim_mean_25

and pairwise results:
report.txt

Which show that the errors in padding checks also leak (compare valid_48 to valid_246: sign test p-value of 5.13e-7)

@tomato42
Copy link

ran the tests against this:

        let c = rsa::BigUint::from_bytes_be(&buffer);
        let _ =  rsa::hazmat::rsa_decrypt(Some(&mut rand_core::OsRng), &privkey, &c);

and have confirmed that it's leaking too.

Same overall configuration but with 2.5 million observations per probe:

Sign test mean p-value: 0.1915, median p-value: 0.008017, min p-value: 1.428e-15
Friedman test (chisquare approximation) for all samples
p-value: 6.50448690941627e-27
Worst pair: 0(no_padding_48), 3(too_short_payload_0_1)
Mean of differences: -1.11105e-07s, 95% CI: -1.42260e-07s, -7.775684e-08s (±3.225e-08s)
Median of differences: -9.50000e-08s, 95% CI: -1.19000e-07s, -7.300000e-08s (±2.300e-08s)
Trimmed mean (5%) of differences: -9.89875e-08s, 95% CI: -1.25208e-07s, -7.384255e-08s (±2.568e-08s)
Trimmed mean (25%) of differences: -9.23689e-08s, 95% CI: -1.18946e-07s, -6.803432e-08s (±2.546e-08s)
Trimmed mean (45%) of differences: -9.30858e-08s, 95% CI: -1.17708e-07s, -7.039496e-08s (±2.366e-08s)
Trimean of differences: -9.47500e-08s, 95% CI: -1.20250e-07s, -7.056250e-08s (±2.484e-08s)

conf_interval_plot_trim_mean_45

Since for raw RSA padding doesn't matter I've executed a slightly different set of tests:

ID,Name
0,no_padding_48
1,no_structure
2,signature_padding_8
3,too_short_payload_0_1
4,too_short_payload_0_3
5,too_short_payload_0_7
6,too_short_payload_0_15
7,valid_0
8,valid_repeated_byte_payload_245_0

and pairwise statistical test results:
report.txt

@tarcieri
Copy link
Member

I'm not sure what solution we can provide here short of a fully constant time implementation (which was the planned long-term solution for this problem, using e.g. a Barrett reduction as provided by crypto-bigint, but that will require a substantial amount of work)

I guess I need to figure out how to run your reproducer.

Can you explain a bit more what those charts are showing? Are you actually able to recover keys?

@tomato42
Copy link

tomato42 commented Nov 23, 2023

I'm not sure what solution we can provide here short of a fully constant time implementation

what's necessary, is ensuring that the unblinding happens in constant time with respect to the output; that means you need to convert the whatever arbitrary precision format is in use for the modulo exponentiation into constant length integers, then multiply them using real constant-time code, and finally do constant time reduction modulo. Something like what's in https://github.com/tomato42/ctmpi but in rust, not in C. Leakage in conversion from one format to the other is not a problem as that value is uncorrelated with the RSA plaintext, so leakage of it doesn't provide useful information to the attacker (as long as the blinding/unblinding factors remain secret).

That being said, if your mod_exp is leaky, you really have to employ both base blinding and exponent blinding. Details of that, as well as links to papers showing attacks against implementations that used just one kind of blinding are in the https://datatracker.ietf.org/doc/html/draft-kario-rsa-guidance-02
But to fix raw RSA implementation against Bleichenbacher/Marvin you just need to fix the last multiplication and reduction modulo.

Can you explain a bit more what those charts are showing?

they show the estimation of the difference in timing for different inputs. Like in the last one, no_padding_48 (probe 0) is processed about 83 ns slower than no_structure (probe 1): that's why it's marked 1-0 (or "probe 1 time subtract probe 0 time")

Are you actually able to recover keys?

those graphs show that it's possible, using time of the decryption, to execute one instance of the Bleichenbacher oracle. To decrypt a RSA ciphertext (or forge a signature) the attacker would need to run the test good few thousand times. See the details on the Marvin vulnerability page and in the associated papers. Since my goal is proving that there is no side-channel, not actually attacking implementations, I don't have good tooling to actually perform the attack (but then there's 25 years of literature on the topic, so once you have a working oracle, there are ready solutions for the rest).

@tomato42
Copy link

Another run for rsa_decrypt, this time with 10.5 million observations per sample:

Sign test mean p-value: 0.1359, median p-value: 2.134e-07, min p-value: 1.433e-60
Friedman test (chisquare approximation) for all samples
p-value: 9.61782206869971e-128
Worst pair: 0(no_padding_48), 8(valid_repeated_byte_payload_245_0)
Mean of differences: -8.28395e-08s, 95% CI: -9.87044e-08s, -6.762672e-08s (±1.554e-08s)
Median of differences: -9.10000e-08s, 95% CI: -1.02000e-07s, -8.000000e-08s (±1.100e-08s)
Trimmed mean (5%) of differences: -8.62429e-08s, 95% CI: -9.87246e-08s, -7.492710e-08s (±1.190e-08s)
Trimmed mean (25%) of differences: -8.64124e-08s, 95% CI: -9.79358e-08s, -7.520178e-08s (±1.137e-08s)
Trimmed mean (45%) of differences: -9.07003e-08s, 95% CI: -1.00972e-07s, -7.931308e-08s (±1.083e-08s)
Trimean of differences: -9.07500e-08s, 95% CI: -1.02000e-07s, -8.025000e-08s (±1.087e-08s)

conf_interval_plot_trim_mean_45

and pairwise statistical results: report.txt

Which suggests that for the leakage to happen, the whole most significant word needs to be equal 0. This will make attacks against OAEP with 2048 bit keys rather impractical against 64 bit architectures. But it does mean that both 32 bit architectures, and less common key sizes, like 2049 or 2056 bit keys, are rather realistic to attack.

Note: I haven't excluded the possibility of leakage happening with probe 3 or probe 4 (16 and 32 most significant bits being zero respectively), but it does look exactly the same as the leakage pattern for CVE-2022-4304, where I did do that.

@tarcieri
Copy link
Member

what's necessary, is ensuring that the unblinding happens in constant time with respect to the output; that means you need to convert the whatever arbitrary precision format is in use for the modulo exponentiation into constant length integers, then multiply them using real constant-time code, and finally do constant time reduction modulo. Something like what's in https://github.com/tomato42/ctmpi but in rust, not in C.

The core modpow operation in num-bigint-dig should already implemented in terms of Montgomery multiplication: https://github.com/dignifiedquire/num-bigint/blob/6f73f0a4025164325e85f8645dad6712b3110c51/src/monty.rs#L129

That alone is insufficient, however, per the OP. I'd generally worry that num-bigint is a general-purpose arbitrary precision bignum library that wasn't designed for constant-time operation.

I could potentially attempt to completely sidestep num-bigint for this, extracting the raw limbs out of the BigUints and performing modpow in code which has been carefully written to avoid any secret-dependent branching, similar to what we have already in crypto-bigint: https://github.com/RustCrypto/crypto-bigint/blob/a02c505/src/uint/modular/reduction.rs

antonengelhardt added a commit to antonengelhardt/wasm-oidc-plugin that referenced this issue Jan 12, 2024
RustCrypto/RSA#19 (comment)

Signed-off-by: Anton Engelhardt <a.e@wwu.de>
antonengelhardt added a commit to antonengelhardt/wasm-oidc-plugin that referenced this issue Jan 15, 2024
RustCrypto/RSA#19 (comment)

Signed-off-by: Anton Engelhardt <a.e@wwu.de>
antonengelhardt added a commit to antonengelhardt/wasm-oidc-plugin that referenced this issue Jan 15, 2024
RustCrypto/RSA#19 (comment)

Signed-off-by: Anton Engelhardt <a.e@wwu.de>
@tarcieri
Copy link
Member

For posterity, here's one source of timing variability: calls to "normalize" within Karatsuba

The comment says "the adds go faster if we drop any unneeded 0s from the end".

Similar problems exist within the implementation of Almost Montgomery Multiplication, which not only calls normalize repeatedly but also does some data-dependent branching/operations:

jrchatruc added a commit to lambdaclass/zksync-era that referenced this issue Jan 25, 2024
* feat(merkle tree): Remove enumeration index assignment from Merkle tree (#551)

## What ❔

Since enumeration indices are now fully stored in Postgres, it makes
sense to not duplicate their assignment in the Merkle tree. Instead, the
tree could take enum indices as inputs.

## Why ❔

This allows simplifying tree logic and unify "normal" L1 batch
processing and tree recovery. (This unification is not a part of this
PR; it'll be implemented separately.)

## Checklist

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.

* feat(en): Support arbitrary genesis block for external nodes (#537)

## What ❔

Support non-zero genesis block specified in executor configuration.
Check whether this block exists on initialization; validate its
correspondence if it does, and persist consensus fields if it doesn't.

## Why ❔

This is necessary to support gossip-based syncing in practice; we likely
won't back-sign all blocks in all envs.

## Checklist

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.

* fix(witness_generator): Disable BWIP dependency (#573)

This revert is done to facilitate boojum upgrade on mainnet2. Without
this, old provers would be halt and boojum upgrade could take longer
than anticipated.

`waiting_for_artifacts` forced witness to wait on BWIP run. `queued`
makes them run instantly.

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [ ] Tests for the changes have been added / updated.
- [ ] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [ ] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

---------

Signed-off-by: Danil <deniallugo@gmail.com>
Co-authored-by: Danil <deniallugo@gmail.com>

* chore(main): release core 18.4.0 (#560)

:robot: I have created a release *beep* *boop*
---


##
[18.4.0](https://github.com/matter-labs/zksync-era/compare/core-v18.3.1...core-v18.4.0)
(2023-12-01)


### Features

* adds spellchecker workflow, and corrects misspelled words
([#559](https://github.com/matter-labs/zksync-era/issues/559))
([beac0a8](https://github.com/matter-labs/zksync-era/commit/beac0a85bb1535b05c395057171f197cd976bf82))
* **en:** Support arbitrary genesis block for external nodes
([#537](https://github.com/matter-labs/zksync-era/issues/537))
([15d7eaf](https://github.com/matter-labs/zksync-era/commit/15d7eaf872e222338810243865cec9dff7f6e799))
* **merkle tree:** Remove enumeration index assignment from Merkle tree
([#551](https://github.com/matter-labs/zksync-era/issues/551))
([e2c1b20](https://github.com/matter-labs/zksync-era/commit/e2c1b20e361e6ee2f5ac69cefe75d9c5575eb2f7))
* Restore commitment test in Boojum integration
([#539](https://github.com/matter-labs/zksync-era/issues/539))
([06f510d](https://github.com/matter-labs/zksync-era/commit/06f510d00f855ddafaebb504f7ea799700221072))


### Bug Fixes

* Change no pending batches 404 error into a success response
([#279](https://github.com/matter-labs/zksync-era/issues/279))
([e8fd805](https://github.com/matter-labs/zksync-era/commit/e8fd805c8be7980de7676bca87cfc2d445aab9e1))
* **vm:** Expose additional types and traits
([#563](https://github.com/matter-labs/zksync-era/issues/563))
([bd268ac](https://github.com/matter-labs/zksync-era/commit/bd268ac02bc3530c1d3247cb9496c3e13c2e52d9))
* **witness_generator:** Disable BWIP dependency
([#573](https://github.com/matter-labs/zksync-era/issues/573))
([e05d955](https://github.com/matter-labs/zksync-era/commit/e05d955036c76a29f9b6e900872c69e20278e045))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

* ci: Runs spellcheck in merge queue. (#574)

## What ❔

Runs spellcheck in merge queue.
<!-- What are the changes this PR brings about? -->
<!-- Example: This PR adds a PR template to the repo. -->
<!-- (For bigger PRs adding more context is appreciated) -->

## Why ❔

<!-- Why are these changes done? What goal do they contribute to? What
are the principles behind them? -->
<!-- Example: PR templates ensure PR reviewers, observers, and future
iterators are in context about the evolution of repos. -->

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [ ] Tests for the changes have been added / updated.
- [ ] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [ ] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

* chore: fix typo (#575)

## What ❔

- fix typo

## Why ❔

- fix typo

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

---------

Co-authored-by: Igor Aleksanov <popzxc@yandex.ru>

* chore: fix typos in document (#577)

## What ❔

- fixed typo

## Why ❔

fix typos in document

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

---------

Co-authored-by: Igor Aleksanov <popzxc@yandex.ru>

* chore: Fix typos (#567)

Hi, I have just resolve conflict #432

Co-authored-by: Igor Aleksanov <popzxc@yandex.ru>

* feat: Add metric to CallTracer for calculating maximum depth of the calls (#535)

## What ❔

Add metric to CallTracer for calculating maximum depth of the calls

## Why ❔

We need to know what our limits are.

## Checklist

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [ ] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.

* feat: Add various metrics to the Prover subsystems (#541)

## What ❔

1. Add various metrics to the Prover subsystems, especially:
* oldest block, that wasn't sent to
prover(`fri_prover.oldest_unprocessed_block`)
* oldest block, that didn't go through basic/leaf/node aggregation
levels (`fri_prover.oldest_unprocessed_block_by_round`)
* how much time is spent on waiting for available prover to send data to
(`prover_fri_witness_vector_generator.prover_waiting_time)
* count for attempts to send data to prover
(`prover_fri_witness_vector_generator.prover_attempts_count`)
2. Refactor metrics in prover to use vise.

## Why ❔

We have some metric coverage on the prover subsystem, but it's
incomplete.

## Checklist

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [ ] Tests for the changes have been added / updated.
- [ ] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.

* chore: fix wrong line  (#592)

## What ❔

fix wrong line 

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

* chore(docs): fixed docs typo (#588)

## What ❔

- Hello, fixed typo
## Why ❔

- fixed typo

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

---------

Co-authored-by: Roman Brodetski <Roman.Brodetski@gmail.com>

* chore(docs):  fix typos in document (#589)

## What ❔

Hello, I corrected the typo.

## Why ❔

- fixed typo

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

---------

Co-authored-by: Igor Aleksanov <popzxc@yandex.ru>

* chore: fix typo (#587)

## What ❔

fixed typos

## Why ❔

fixed typos

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

---------

Co-authored-by: Igor Aleksanov <popzxc@yandex.ru>

* chore(docs): fix broken link (#590)

## What ❔

fixed broken link


## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

---------

Co-authored-by: Igor Aleksanov <popzxc@yandex.ru>

* feat: faster and less noisy zk fmt (#513)

## What ❔

I've added caching to prettier and changed so that noisy output about
changed files is redirected to /dev/null. `zk fmt` is 3 times faster
after those changes

## Why ❔

`zk fmt` output was too verbose and we didn't use cache

## Checklist

- [X] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [ ] Tests for the changes have been added / updated.
- [ ] Documentation comments have been added / updated.
- [X] Code has been formatted via `zk fmt` and `zk lint`.

* chore: the errors in the document have been correct (#583)

## What ❔

the errors in the document have been correct

## Why ❔

the errors in the document have been correct

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

---------

Co-authored-by: Igor Aleksanov <popzxc@yandex.ru>

* chore(docs): the errors in the document have been corrected. (#461)

## What ❔

- the errors in the document have been corrected.

## Why ❔

- the errors in the document have been corrected.

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.

---------

Co-authored-by: perekopskiy <53865202+perekopskiy@users.noreply.github.com>

* chore: update document (#601)

## What ❔

- update document


## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

---------

Co-authored-by: Igor Aleksanov <popzxc@yandex.ru>
Co-authored-by: perekopskiy <53865202+perekopskiy@users.noreply.github.com>

* chore: fixed typos in documentation (#603)

## What ❔

- fixed typos in documentation

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

---------

Co-authored-by: perekopskiy <53865202+perekopskiy@users.noreply.github.com>

* chore: remove incorrect branch prompts (#594)

## What ❔

remove incorrect branch prompts

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

---------

Co-authored-by: Igor Aleksanov <popzxc@yandex.ru>

* fix: Sync protocol version between consensus and server blocks (#568)

## What ❔

Aligns the protocol version for consensus blocks with that of
`SyncBlock`s.

## Why ❔

Required for gossip-based block syncing to work correctly.

## Checklist

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

* chore(main): release core 18.5.0 (#593)

:robot: I have created a release *beep* *boop*
---


##
[18.5.0](https://github.com/matter-labs/zksync-era/compare/core-v18.4.0...core-v18.5.0)
(2023-12-05)


### Features

* Add metric to CallTracer for calculating maximum depth of the calls
([#535](https://github.com/matter-labs/zksync-era/issues/535))
([19c84ce](https://github.com/matter-labs/zksync-era/commit/19c84ce624d53735133fa3b12c7f980e8c14260d))
* Add various metrics to the Prover subsystems
([#541](https://github.com/matter-labs/zksync-era/issues/541))
([58a4e6c](https://github.com/matter-labs/zksync-era/commit/58a4e6c4c22bd7f002ede1c6def0dc260706185e))


### Bug Fixes

* Sync protocol version between consensus and server blocks
([#568](https://github.com/matter-labs/zksync-era/issues/568))
([56776f9](https://github.com/matter-labs/zksync-era/commit/56776f929f547b1a91c5b70f89e87ef7dc25c65a))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

* chore: fix link (#576)

## What ❔

fix link

## Why ❔

- fix link

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

---------

Co-authored-by: Igor Aleksanov <popzxc@yandex.ru>
Co-authored-by: perekopskiy <53865202+perekopskiy@users.noreply.github.com>

* chore(main): release prover 9.1.0 (#460)

:robot: I have created a release *beep* *boop*
---


##
[9.1.0](https://github.com/matter-labs/zksync-era/compare/prover-v9.0.0...prover-v9.1.0)
(2023-12-05)


### Features

* Add various metrics to the Prover subsystems
([#541](https://github.com/matter-labs/zksync-era/issues/541))
([58a4e6c](https://github.com/matter-labs/zksync-era/commit/58a4e6c4c22bd7f002ede1c6def0dc260706185e))
* adds spellchecker workflow, and corrects misspelled words
([#559](https://github.com/matter-labs/zksync-era/issues/559))
([beac0a8](https://github.com/matter-labs/zksync-era/commit/beac0a85bb1535b05c395057171f197cd976bf82))
* **dal:** Do not load config from env in DAL crate
([#444](https://github.com/matter-labs/zksync-era/issues/444))
([3fe1bb2](https://github.com/matter-labs/zksync-era/commit/3fe1bb21f8d33557353f447811ca86c60f1fe51a))
* **en:** Implement gossip fetcher
([#371](https://github.com/matter-labs/zksync-era/issues/371))
([a49b61d](https://github.com/matter-labs/zksync-era/commit/a49b61d7769f9dd7b4cbc4905f8f8a23abfb541c))
* **hyperchain:** Adding prover related commands to zk stack
([#440](https://github.com/matter-labs/zksync-era/issues/440))
([580cada](https://github.com/matter-labs/zksync-era/commit/580cada003bdfe2fff686a1fc3ce001b4959aa4d))
* **job-processor:** report attempts metrics
([#448](https://github.com/matter-labs/zksync-era/issues/448))
([ab31f03](https://github.com/matter-labs/zksync-era/commit/ab31f031dfcaa7ddf296786ddccb78e8edd2d3c5))
* **merkle tree:** Allow random-order tree recovery
([#485](https://github.com/matter-labs/zksync-era/issues/485))
([146e4cf](https://github.com/matter-labs/zksync-era/commit/146e4cf2f8d890ff0a8d33229e224442e14be437))
* **witness-generator:** add logs to leaf aggregation job
([#542](https://github.com/matter-labs/zksync-era/issues/542))
([7e95a3a](https://github.com/matter-labs/zksync-era/commit/7e95a3a66ea48be7b6059d34630e22c503399bdf))


### Bug Fixes

* Change no pending batches 404 error into a success response
([#279](https://github.com/matter-labs/zksync-era/issues/279))
([e8fd805](https://github.com/matter-labs/zksync-era/commit/e8fd805c8be7980de7676bca87cfc2d445aab9e1))
* **ci:** Use the same nightly rust
([#530](https://github.com/matter-labs/zksync-era/issues/530))
([67ef133](https://github.com/matter-labs/zksync-era/commit/67ef1339d42786efbeb83c22fac99f3bf5dd4380))
* **crypto:** update shivini to switch to era-cuda
([#469](https://github.com/matter-labs/zksync-era/issues/469))
([38bb482](https://github.com/matter-labs/zksync-era/commit/38bb4823c7b5e0e651d9f531feede66c24afd19f))
* Sync protocol version between consensus and server blocks
([#568](https://github.com/matter-labs/zksync-era/issues/568))
([56776f9](https://github.com/matter-labs/zksync-era/commit/56776f929f547b1a91c5b70f89e87ef7dc25c65a))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: Artem Makhortov <13339874+artmakh@users.noreply.github.com>

* chore(main): release prover 10.0.0 (#608)

:robot: I have created a release *beep* *boop*
---


##
[10.0.0](https://github.com/matter-labs/zksync-era/compare/prover-v9.1.0...prover-v10.0.0)
(2023-12-05)


### ⚠ BREAKING CHANGES

* boojum integration
([#112](https://github.com/matter-labs/zksync-era/issues/112))
* Update to protocol version 17
([#384](https://github.com/matter-labs/zksync-era/issues/384))

### Features

* Add various metrics to the Prover subsystems
([#541](https://github.com/matter-labs/zksync-era/issues/541))
([58a4e6c](https://github.com/matter-labs/zksync-era/commit/58a4e6c4c22bd7f002ede1c6def0dc260706185e))
* adds spellchecker workflow, and corrects misspelled words
([#559](https://github.com/matter-labs/zksync-era/issues/559))
([beac0a8](https://github.com/matter-labs/zksync-era/commit/beac0a85bb1535b05c395057171f197cd976bf82))
* boojum integration
([#112](https://github.com/matter-labs/zksync-era/issues/112))
([e76d346](https://github.com/matter-labs/zksync-era/commit/e76d346d02ded771dea380aa8240da32119d7198))
* **boojum:** Adding README to prover directory
([#189](https://github.com/matter-labs/zksync-era/issues/189))
([c175033](https://github.com/matter-labs/zksync-era/commit/c175033b48a8da4969d88b6850dd0247c4004794))
* **config:** Extract everything not related to the env config from
zksync_config crate
([#245](https://github.com/matter-labs/zksync-era/issues/245))
([42c64e9](https://github.com/matter-labs/zksync-era/commit/42c64e91e13b6b37619f1459f927fa046ef01097))
* **core:** Split config definitions and deserialization
([#414](https://github.com/matter-labs/zksync-era/issues/414))
([c7c6b32](https://github.com/matter-labs/zksync-era/commit/c7c6b321a63dbcc7f1af045aa7416e697beab08f))
* **dal:** Do not load config from env in DAL crate
([#444](https://github.com/matter-labs/zksync-era/issues/444))
([3fe1bb2](https://github.com/matter-labs/zksync-era/commit/3fe1bb21f8d33557353f447811ca86c60f1fe51a))
* **en:** Implement gossip fetcher
([#371](https://github.com/matter-labs/zksync-era/issues/371))
([a49b61d](https://github.com/matter-labs/zksync-era/commit/a49b61d7769f9dd7b4cbc4905f8f8a23abfb541c))
* **fri-prover:** In witness - panic if protocol version is not
available ([#192](https://github.com/matter-labs/zksync-era/issues/192))
([0403749](https://github.com/matter-labs/zksync-era/commit/040374900656c854a7b9de32e5dbaf47c1c47889))
* **hyperchain:** Adding prover related commands to zk stack
([#440](https://github.com/matter-labs/zksync-era/issues/440))
([580cada](https://github.com/matter-labs/zksync-era/commit/580cada003bdfe2fff686a1fc3ce001b4959aa4d))
* **job-processor:** report attempts metrics
([#448](https://github.com/matter-labs/zksync-era/issues/448))
([ab31f03](https://github.com/matter-labs/zksync-era/commit/ab31f031dfcaa7ddf296786ddccb78e8edd2d3c5))
* **merkle tree:** Allow random-order tree recovery
([#485](https://github.com/matter-labs/zksync-era/issues/485))
([146e4cf](https://github.com/matter-labs/zksync-era/commit/146e4cf2f8d890ff0a8d33229e224442e14be437))
* **merkle tree:** Snapshot recovery for Merkle tree
([#163](https://github.com/matter-labs/zksync-era/issues/163))
([9e20703](https://github.com/matter-labs/zksync-era/commit/9e2070380e6720d84563a14a2246fc18fdb1f8f9))
* Rewrite server binary to use `vise` metrics
([#120](https://github.com/matter-labs/zksync-era/issues/120))
([26ee1fb](https://github.com/matter-labs/zksync-era/commit/26ee1fbb16cbd7c4fad334cbc6804e7d779029b6))
* Update to protocol version 17
([#384](https://github.com/matter-labs/zksync-era/issues/384))
([ba271a5](https://github.com/matter-labs/zksync-era/commit/ba271a5f34d64d04c0135b8811685b80f26a8c32))
* **vm:** Move all vm versions to the one crate
([#249](https://github.com/matter-labs/zksync-era/issues/249))
([e3fb489](https://github.com/matter-labs/zksync-era/commit/e3fb4894d08aa98a84e64eaa95b51001055cf911))
* **witness-generator:** add logs to leaf aggregation job
([#542](https://github.com/matter-labs/zksync-era/issues/542))
([7e95a3a](https://github.com/matter-labs/zksync-era/commit/7e95a3a66ea48be7b6059d34630e22c503399bdf))


### Bug Fixes

* Change no pending batches 404 error into a success response
([#279](https://github.com/matter-labs/zksync-era/issues/279))
([e8fd805](https://github.com/matter-labs/zksync-era/commit/e8fd805c8be7980de7676bca87cfc2d445aab9e1))
* **ci:** Use the same nightly rust
([#530](https://github.com/matter-labs/zksync-era/issues/530))
([67ef133](https://github.com/matter-labs/zksync-era/commit/67ef1339d42786efbeb83c22fac99f3bf5dd4380))
* **crypto:** update deps to include circuit fixes
([#402](https://github.com/matter-labs/zksync-era/issues/402))
([4c82015](https://github.com/matter-labs/zksync-era/commit/4c820150714dfb01c304c43e27f217f17deba449))
* **crypto:** update shivini to switch to era-cuda
([#469](https://github.com/matter-labs/zksync-era/issues/469))
([38bb482](https://github.com/matter-labs/zksync-era/commit/38bb4823c7b5e0e651d9f531feede66c24afd19f))
* **crypto:** update snark-vk to be used in server and update args for
proof wrapping
([#240](https://github.com/matter-labs/zksync-era/issues/240))
([4a5c54c](https://github.com/matter-labs/zksync-era/commit/4a5c54c48bbc100c29fa719c4b1dc3535743003d))
* **docs:** Add links to setup-data keys
([#360](https://github.com/matter-labs/zksync-era/issues/360))
([1d4fe69](https://github.com/matter-labs/zksync-era/commit/1d4fe697e4e98a8e64642cde4fe202338ce5ec61))
* **path:** update gpu prover setup data path to remove extra gpu suffix
([#454](https://github.com/matter-labs/zksync-era/issues/454))
([2e145c1](https://github.com/matter-labs/zksync-era/commit/2e145c192b348b2756acf61fac5bfe0ca5a6575f))
* **prover-fri:** Update setup loading for node agg circuit
([#323](https://github.com/matter-labs/zksync-era/issues/323))
([d1034b0](https://github.com/matter-labs/zksync-era/commit/d1034b05754219b603508ef79c114d908c94c1e9))
* **prover-logging:** tasks_allowed_to_finish set to true for 1 off jobs
([#227](https://github.com/matter-labs/zksync-era/issues/227))
([0fac66f](https://github.com/matter-labs/zksync-era/commit/0fac66f5ff86cc801ea0bb6f9272cb397cd03a95))
* Sync protocol version between consensus and server blocks
([#568](https://github.com/matter-labs/zksync-era/issues/568))
([56776f9](https://github.com/matter-labs/zksync-era/commit/56776f929f547b1a91c5b70f89e87ef7dc25c65a))
* Update prover to use the correct storage oracle
([#446](https://github.com/matter-labs/zksync-era/issues/446))
([835dd82](https://github.com/matter-labs/zksync-era/commit/835dd828ef5610a446ec8c456e4df1def0e213ab))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

* refactor: Removed protobuf encoding from zksync_types (#562)

## What ❔

Removed protobuf encoding from zksync_types.

## Why ❔

To make zksync_types have less dependencies.

* fix: use powers array in plonkSetup function (#508)

## What ❔

This PR modifies the `plonkSetup` function in `run.ts` to use the
`powers` array when downloading key files.

## Why ❔

Previously, the function forget to use the argument values `powers`.
Now, it will download keys for any powers specified in the `powers`
array.

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [NA] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.

---------

Co-authored-by: Igor Aleksanov <popzxc@yandex.ru>

* fix: Fix database connections in house keeper (#610)

## What ❔

Use correct connections for databases in house keeper.

## Why ❔

Databases are divided in 2 on mainnet and testnet

## Checklist

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [ ] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

* feat(contract-verifier): Support verification for zksolc v1.3.17 (#606)

## What ❔

Adds support for zksolc v1.3.17 to contract-verifier.

## Why ❔

Contract-verifier should support latest version

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

* chore(main): release core 18.6.0 (#613)

:robot: I have created a release *beep* *boop*
---


##
[18.6.0](https://github.com/matter-labs/zksync-era/compare/core-v18.5.0...core-v18.6.0)
(2023-12-05)


### Features

* **contract-verifier:** Support verification for zksolc v1.3.17
([#606](https://github.com/matter-labs/zksync-era/issues/606))
([b65fedd](https://github.com/matter-labs/zksync-era/commit/b65fedd6894497a4c9fbf38d558ccfaca535d1d2))


### Bug Fixes

* Fix database connections in house keeper
([#610](https://github.com/matter-labs/zksync-era/issues/610))
([aeaaecb](https://github.com/matter-labs/zksync-era/commit/aeaaecb54b6bd3f173727531418dc242357b2aee))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

* chore: Mainnet upgrade calldata (#564)

## What ❔

Includes mainnet upgrade preparation as well as some minor fixes for the
upgrade tool

## Why ❔

<!-- Why are these changes done? What goal do they contribute to? What
are the principles behind them? -->
<!-- Example: PR templates ensure PR reviewers, observers, and future
iterators are in context about the evolution of repos. -->

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [ ] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [ ] Tests for the changes have been added / updated.
- [ ] Documentation comments have been added / updated.
- [ ] Code has been formatted via `zk fmt` and `zk lint`.

---------

Co-authored-by: koloz <zach.kolodny@gmail.com>

* chore: Update generated Prover FRI CPU setup-data keys from branch main (#609)

"Update generated Prover FRI CPU setup-data keys from branch main"

* perf(external-node): Use async miniblock sealing in external IO (#611)

## What ❔

External IO uses async miniblock sealing. 

## Why ❔

Execution of transactions and miniblock sealing (writing data to
postgres) happen in parallel so the perfomance is better.

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

* chore: fix document path (#615)

## What ❔

fix document path

## Why ❔

<!-- Why are these changes done? What goal do they contribute to? What
are the principles behind them? -->
<!-- Example: PR templates ensure PR reviewers, observers, and future
iterators are in context about the evolution of repos. -->

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

---------

Co-authored-by: Igor Aleksanov <popzxc@yandex.ru>

* chore: Remove era-reviewers from codeowners (#618)

## What ❔

Removes era-reviewers group from codeowners.

## Why ❔

- Too noisy.
- We have internal processes for that anyways.

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [ ] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [ ] Tests for the changes have been added / updated.
- [ ] Documentation comments have been added / updated.
- [ ] Code has been formatted via `zk fmt` and `zk lint`.
- [ ] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

* chore(main): release core 18.6.1 (#616)

:robot: I have created a release *beep* *boop*
---


##
[18.6.1](https://github.com/matter-labs/zksync-era/compare/core-v18.6.0...core-v18.6.1)
(2023-12-06)


### Performance Improvements

* **external-node:** Use async miniblock sealing in external IO
([#611](https://github.com/matter-labs/zksync-era/issues/611))
([5cf7210](https://github.com/matter-labs/zksync-era/commit/5cf7210dc77bb615944352f23ed39fad324b914f))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

* feat(hyperchain-wizard): zkStack CLI GPU support (#612)

## What ❔

Support for creating zk hyperchain via zk cli with GPU-based provers

## Why ❔


## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [ ] Tests for the changes have been added / updated.
- [ ] Documentation comments have been added / updated.
- [X] Code has been formatted via `zk fmt` and `zk lint`.
- [ ] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

---------

Co-authored-by: Igor Borodin <hatemosphere@protonmail.com>

* fix: Cursor not moving correctly after poll in `get_filter_changes` (#546)

## What ❔

When polling filter changes, add 1 to actual from_block value

## Why ❔

Otherwise, last block that was included in poll will be included to the
next one.

## Checklist

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [ ] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.

---------

Co-authored-by: Fedor Sakharov <fedor.sakharov@gmail.com>

* fix: update google cloud dependencies that do not depend on rsa (#622)

## What ❔

This PR updates the dependencies of `google-cloud-storage` and
`google-cloud-auth`. The changes are as follows:

- From google-cloud-storage = "0.12.0" to google-cloud-storage =
"0.15.0"
- From google-cloud-auth = "0.11.0" to google-cloud-auth = "0.13.0"

Relevant google-cloud changes:
https://github.com/yoshidan/google-cloud-rust/pull/217

## Why ❔

<!-- Why are these changes done? What goal do they contribute to? What
are the principles behind them? -->
<!-- Example: PR templates ensure PR reviewers, observers, and future
iterators are in context about the evolution of repos. -->

The primary reason for these updates is to address a security
vulnerability associated with the `rsa` crate, as indicated by a recent
`cargo-deny` check. The vulnerability (Marvin Attack, RUSTSEC-2023-0071)
was detected in rsa v0.6.1, which is a dependency of
`google-cloud-storage v0.12.0`. By updating to `google-cloud-storage
v0.15.0`, we eliminate the use of the `rsa` crate, as the newer version
of `google-cloud-storage` does not depend on it. Similarly,
`google-cloud-auth` is updated for compatibility.

Cargo deny output:

```
error[vulnerability]: Marvin Attack: potential key recovery through timing sidechannels
    ┌─ /Users/dustinbrickwood/Documents/dev/dut/forks/foundry-zksync/Cargo.lock:759:1
    │
759 │ rsa 0.6.1 registry+https://github.com/rust-lang/crates.io-index
    │ --------------------------------------------------------------- security vulnerability detected
    │
    = ID: RUSTSEC-2023-0071
    = Advisory: https://rustsec.org/advisories/RUSTSEC-2023-0071
    = ### Impact
      Due to a non-constant-time implementation, information about the private key is leaked through timing information which is observable over the network. An attacker may be able to use that information to recover the key.

      ### Patches
      No patch is yet available, however work is underway to migrate to a fully constant-time implementation.

      ### Workarounds
      The only currently available workaround is to avoid using the `rsa` crate in settings where attackers are able to observe timing information, e.g. local use on a non-compromised computer is fine.

      ### References
      This vulnerability was discovered as part of the "[Marvin Attack]", which revealed several implementations of RSA including OpenSSL had not properly mitigated timing sidechannel attacks.

      [Marvin Attack]: https://people.redhat.com/~hkario/marvin/
    = Announcement: https://github.com/RustCrypto/RSA/issues/19#issuecomment-1822995643
    = Solution: No safe upgrade is available!
    = rsa v0.6.1
      └── google-cloud-storage v0.12.0
          └── zksync_object_store v0.1.0
              ├── zksync_core v0.1.0
              │   └── era_test_node v0.1.0-alpha.12
              │       └── era_revm v0.0.1-alpha
              │           ├── foundry-common v0.2.0
              │           │   ├── anvil v0.2.0
              │           │   │   ├── (dev) forge v0.2.0
              │           │   │   └── (dev) zkforge v0.2.0
              │           │   ├── cast v0.2.0
              │           │   ├── chisel v0.2.0
              │           │   ├── forge v0.2.0 (*)
              │           │   ├── foundry-cli v0.2.0
              │           │   │   ├── cast v0.2.0 (*)
              │           │   │   ├── chisel v0.2.0 (*)
              │           │   │   ├── forge v0.2.0 (*)
              │           │   │   ├── zkcast v0.2.0
              │           │   │   │   └── zkforge v0.2.0 (*)
              │           │   │   └── zkforge v0.2.0 (*)
              │           │   ├── foundry-debugger v0.2.0
              │           │   │   ├── forge v0.2.0 (*)
              │           │   │   ├── foundry-cli v0.2.0 (*)
              │           │   │   └── zkforge v0.2.0 (*)
              │           │   ├── foundry-evm v0.2.0
              │           │   │   ├── anvil v0.2.0 (*)
              │           │   │   ├── anvil-core v0.2.0
              │           │   │   │   └── anvil v0.2.0 (*)
              │           │   │   ├── cast v0.2.0 (*)
              │           │   │   ├── chisel v0.2.0 (*)
              │           │   │   ├── forge v0.2.0 (*)
              │           │   │   ├── foundry-cli v0.2.0 (*)
              │           │   │   ├── foundry-debugger v0.2.0 (*)
              │           │   │   ├── zkcast v0.2.0 (*)
              │           │   │   └── zkforge v0.2.0 (*)
              │           │   ├── foundry-test-utils v0.2.0
              │           │   │   ├── (dev) cast v0.2.0 (*)
              │           │   │   ├── (dev) forge v0.2.0 (*)
              │           │   │   ├── (dev) zkcast v0.2.0 (*)
              │           │   │   └── (dev) zkforge v0.2.0 (*)
              │           │   ├── (dev) foundry-utils v0.2.0
              │           │   │   ├── anvil v0.2.0 (*)
              │           │   │   ├── anvil-core v0.2.0 (*)
              │           │   │   ├── cast v0.2.0 (*)
              │           │   │   ├── chisel v0.2.0 (*)
              │           │   │   ├── forge v0.2.0 (*)
              │           │   │   ├── forge-doc v0.2.0
              │           │   │   │   ├── forge v0.2.0 (*)
              │           │   │   │   └── zkforge v0.2.0 (*)
              │           │   │   ├── foundry-cli v0.2.0 (*)
              │           │   │   ├── foundry-debugger v0.2.0 (*)
              │           │   │   ├── (dev) foundry-evm v0.2.0 (*)
              │           │   │   ├── foundry-test-utils v0.2.0 (*)
              │           │   │   ├── zkcast v0.2.0 (*)
              │           │   │   └── zkforge v0.2.0 (*)
              │           │   ├── zkcast v0.2.0 (*)
              │           │   └── zkforge v0.2.0 (*)
              │           └── foundry-evm v0.2.0 (*)
              └── zksync_prover_utils v0.1.0
                  ├── zksync_core v0.1.0 (*)
                  └── zksync_verification_key_generator_and_server v0.1.0
                      └── zksync_core v0.1.0 (*)
```

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [ ] Tests for the changes have been added / updated.
- [ ] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

* docs: Include command to create rich L2 wallets. (#569)

## What ❔

Improve documentation by including the command to create rich L2
wallets.

## Why ❔

Save other people time figuring out the exact invocation.

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [ ] Code has been formatted via `zk fmt` and `zk lint`.
- [ ] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

* chore: Enforce uniform import structure (#617)

## What ❔

...using `zk fmt` command by suppling relevant command-line args to
rustfmt. These args work on stable Rust (at least for now) despite being
unstable.

## Why ❔

More structured imports are easier to read.

## Checklist

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

* fix(job-processor): `max_attepts_reached` metric (#626)

## What ❔

`max_attepts_reached` metric is now reported on job start rather
failure. With this change metric will be reported not only if last
attempt failed but also if it got stuck/stopped/etc.

## Why ❔

Reporting `max_attepts_reached` metric for all cases.

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

* chore(vm): Expose more pubs and make inmemory clonable (#632)

## What ❔

Expose AppFramestack public and make InMemoryStorage Clonable.

## Why ❔

For supporting era-test-node

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [ ] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [ ] Tests for the changes have been added / updated.
- [ ] Documentation comments have been added / updated.
- [ ] Code has been formatted via `zk fmt` and `zk lint`.
- [ ] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

---------

Signed-off-by: Danil <deniallugo@gmail.com>

* chore: remove old witness generator (#619)

* fix: improve docs repositories (#570)

## What ❔

* Add new/missing zkSync repositories
* Add missing descriptions
* Remove deprecated repositories

## Why ❔

To make the list up-to-date

## Checklist

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

* docs(setup): Added TL;DR instructions for new zkstack setup (#621)

## What ❔

* Added a TL;DR set of instructions needed to setup the system to run
the zk stack from scratch.


## Why ❔
* To have a list of commands in one place.

* chore: upgrades local test network to cancun+deneb compatible one (#580)

## What ❔

Upgrades local testnet to `Cancun+Deneb` compatible one. So far:

Cancun gets enabled:

```
2023-12-01 21:57:49 INFO [12-01|20:57:49.152] Merge configured: 
2023-12-01 21:57:49 INFO [12-01|20:57:49.152]  - Hard-fork specification:    https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/paris.md 
2023-12-01 21:57:49 INFO [12-01|20:57:49.152]  - Network known to be merged: true 
2023-12-01 21:57:49 INFO [12-01|20:57:49.152]  - Total terminal difficulty:  0 
2023-12-01 21:57:49 INFO [12-01|20:57:49.152]  
2023-12-01 21:57:49 INFO [12-01|20:57:49.152] Post-Merge hard forks (timestamp based): 
2023-12-01 21:57:49 INFO [12-01|20:57:49.152]  - Shanghai:                    @1701464272 (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/shanghai.md) 
2023-12-01 21:57:49 INFO [12-01|20:57:49.152]  - Cancun:                      @1701464272 
```

New network has been built into CI workflows.


## Why ❔

<!-- Why are these changes done? What goal do they contribute to? What
are the principles behind them? -->
<!-- Example: PR templates ensure PR reviewers, observers, and future
iterators are in context about the evolution of repos. -->

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [ ] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [ ] Tests for the changes have been added / updated.
- [ ] Documentation comments have been added / updated.
- [ ] Code has been formatted via `zk fmt` and `zk lint`.
- [ ] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

* chore(zk init): Removed plonk setup (#638)

## What ❔

* Removed plonk setup (where we downloaded the CRS keys)

## Why ❔

* It is needed only for prover setup (and then this is handled within
the prover_setup.ts directly)
* it will save a lot of network bandwidth and time during zk stack setup

* chore(CI): Speeding up docker builds in CI (#640)

## What ❔

* Removed zk contract compilation that was run before prover docker
builds
* Removed docker builds for old prover and old circuit_synthesizer
* Downloading CRS file only for the snark wrapper / compressor job

## Why ❔

* to speed up docker CI that runs on every PR

* chore(zk): finishing migration to docker compose (#646)

## What ❔

* replaced docker-compose with docker compose 

## Why ❔

* we moved to use docker compose (instead of docker-compose) - which is
a newer version

* chore(ci): Pre-download compilers, as a workaround for old hardhat plugins (#645)

## What ❔

Add hack way to pre-download needed compileres

## Why ❔

Hardhat plugins, which we are using right now, are pretty often rate
limited by github for downloading compilers, due to unoptimized download
procedure. This issue was fixed in later versions of plugins, but we
can't update _some_ of the hardhat plugins due to changes in deps for
them. This pre-download will help us till the time we can update them.

## Checklist


- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [ ] Tests for the changes have been added / updated.
- [ ] Documentation comments have been added / updated.
- [ ] Code has been formatted via `zk fmt` and `zk lint`.
- [ ] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

* feat(en): Remove `SyncBlock.root_hash` (#633)

## What ❔

Removes `root_hash` field from `SyncBlock`.

## Why ❔

It's not used anywhere, set to a dummy value (miniblock hash) and
doesn't make sense in general (state hashes are computed on L1 batch
level, not miniblock level).

## Checklist

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

* docs: New protocol specification (#641)

## What ❔

New docs, focusing on protocol specs.  

Note: don't merge yet, waiting for review.

## Why ❔

We want to have good docs so people can understand the zkVM and its
benefits.

## Checklist

- [ X] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [ X] Tests for the changes have been added / updated.
- [ X] Documentation comments have been added / updated.
- [ X] Code has been formatted via `zk fmt` and `zk lint`.
- [ ] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

---------

Co-authored-by: kelemeno <kl@matterlabs.dev>
Co-authored-by: MexicanAce <nicolasvillanueva@msn.com>
Co-authored-by: Jack Hamer <47187316+JackHamer09@users.noreply.github.com>
Co-authored-by: Marcin M <128217157+mm-zk@users.noreply.github.com>
Co-authored-by: Fedor Sakharov <fedor.sakharov@gmail.com>

* feat(zk tool): Added yarn & directory checks (#188)

# What ❔

* zk will now print a warning if you run it from outside of $ZKSYNC_HOME
directory
* it will also warn you if your yarn has a wrong version

## Why ❔

* we use ZKSYNC_HOME to figure out which binaries to use, so if you are
working on couple versions of era in multiple different directories, and
forget to update ZKSYNC_HOME, then you might be pushing wrong binaries
without knowing.
* if your version of yarn is incorrect, you're going to get a lot of
strange typescript compilation errors along the way.

These are only printed as warnings, they don't prevent you from running
the tool.


![image](https://github.com/matter-labs/zksync-era/assets/128217157/e8186e36-953d-4307-9449-048bdd589321)

* fix: follow up metrics fixes (#648)

## What ❔

Fixes for previous metrics PRs.

* Fix oldest unproved block by round (we have `manually_skipped` status
in DB, is this correct?), SQL query and number of rounds
* Rename some API server metrics
* May filter count work incorrect?

## Why ❔

For metrics to work correctly.

## Checklist

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [ ] Tests for the changes have been added / updated.
- [ ] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

* chore(ci): Pre-download one more version of viper compiler (#652)

## What ❔

Pre-download one more version of viper compiler

## Why ❔

Workaround for rate limiting

## Checklist

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [ ] Tests for the changes have been added / updated.
- [ ] Documentation comments have been added / updated.
- [ ] Code has been formatted via `zk fmt` and `zk lint`.
- [ ] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

* feat(en): Check block hash correspondence (#572)

## What ❔

Checks that the block hash received by EN corresponds to the locally
computed block hash. The check occurs reasonably early (i.e., before the
block is executed).

## Why ❔

Allows to ensure that there's nothing fundamentally wrong with EN
implementation.

## Checklist

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

* fix: fix docs error (#635)

## What ❔

fix docs error

## Why ❔

<!-- Why are these changes done? What goal do they contribute to? What
are the principles behind them? -->
<!-- Example: PR templates ensure PR reviewers, observers, and future
iterators are in context about the evolution of repos. -->

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

---------

Co-authored-by: Igor Aleksanov <popzxc@yandex.ru>
Co-authored-by: Igor Borodin <hatemosphere@protonmail.com>
Co-authored-by: AnastasiiaVashchuk <72273339+AnastasiiaVashchuk@users.noreply.github.com>

* chore(core/lib): typo fix (#624)

few minor typo fix.

3 comments, 1 error message

---------

Co-authored-by: AnastasiiaVashchuk <72273339+AnastasiiaVashchuk@users.noreply.github.com>

* chore: remove tslint related comments (#636)

## What ❔

This pull request aims to remove TSLint-related comments and
configurations from the codebase.

## Why ❔

The removal is necessary because the repository has transitioned to
ESLint, TSLint-related comments and configurations obsolete. This
cleanup ensures a more streamlined and consistent codebase, aligning
with the migration to ESLint for improved code quality and
maintainability.

## Checklist

- [X] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [X] Tests for the changes have been added / updated.
- [X] Documentation comments have been added / updated.
- [X] Code has been formatted via `zk fmt` and `zk lint`.
- [X] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

---------

Co-authored-by: AnastasiiaVashchuk <72273339+AnastasiiaVashchuk@users.noreply.github.com>

* feat: Snapshot Creator (#498)

## What ❔
Snapshot creator is small command line tool for creating a snapshot of
zkSync node for EN node to be able to initialize
to a certain L1 Batch.

Snapshots do not contain full transactions history, but rather a minimal
subset of information needed to bootstrap EN
node.

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [X] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [X] Tests for the changes have been added / updated.
- [X] Documentation comments have been added / updated.
- [X] Code has been formatted via `zk fmt` and `zk lint`.

* chore(ci): Pre-download more versions of compilers + less verbose (#653)

## What ❔

Pre-download more versions of compilers

## Checklist

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [ ] Tests for the changes have been added / updated.
- [ ] Documentation comments have been added / updated.
- [ ] Code has been formatted via `zk fmt` and `zk lint`.
- [ ] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

* feat(contract-verifier): Add zksolc v1.3.18 (#654)

## What ❔

Adds zksolc v1.3.18 to contract verifier

## Why ❔

Adds zksolc v1.3.18 to contract verifier

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [ ] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [ ] Tests for the changes have been added / updated.
- [ ] Documentation comments have been added / updated.
- [ ] Code has been formatted via `zk fmt` and `zk lint`.
- [ ] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

* fix: Follow up metrics fixes vol.2 (#656)

## What ❔

Fix oldest not generated batch query

## Why ❔

For metrics to work correctly

## Checklist

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [ ] Tests for the changes have been added / updated.
- [ ] Documentation comments have been added / updated.
- [x] Code has been formatted via `zk fmt` and `zk lint`.
- [x] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

* fix: removing sqlx check from pre-push (#658)

Removing this check for now, I will re-add is as an opt-in check,
probably with other checks bundled in. It's best not to require built
project on every push.

* chore(main): release core 18.7.0 (#620)

:robot: I have created a release *beep* *boop*
---


##
[18.7.0](https://github.com/matter-labs/zksync-era/compare/core-v18.6.1...core-v18.7.0)
(2023-12-12)


### Features

* **contract-verifier:** Add zksolc v1.3.18
([#654](https://github.com/matter-labs/zksync-era/issues/654))
([77f91fe](https://github.com/matter-labs/zksync-era/commit/77f91fe253a0876e56de4aee47071fe249386fc7))
* **en:** Check block hash correspondence
([#572](https://github.com/matter-labs/zksync-era/issues/572))
([28f5642](https://github.com/matter-labs/zksync-era/commit/28f5642c35800997879bc549fca9e960c4516d21))
* **en:** Remove `SyncBlock.root_hash`
([#633](https://github.com/matter-labs/zksync-era/issues/633))
([d4cc6e5](https://github.com/matter-labs/zksync-era/commit/d4cc6e564642b4c49ef4a546cd1c86821327683c))
* Snapshot Creator
([#498](https://github.com/matter-labs/zksync-era/issues/498))
([270edee](https://github.com/matter-labs/zksync-era/commit/270edee34402ecbd1761bc1fca559ef2205f71e8))


### Bug Fixes

* Cursor not moving correctly after poll in `get_filter_changes`
([#546](https://github.com/matter-labs/zksync-era/issues/546))
([ec5907b](https://github.com/matter-labs/zksync-era/commit/ec5907b70ff7d868a05b685a1641d96dc4fa9d69))
* fix docs error
([#635](https://github.com/matter-labs/zksync-era/issues/635))
([883c128](https://github.com/matter-labs/zksync-era/commit/883c1282f7771fb16a41d45391b74243021271e3))
* follow up metrics fixes
([#648](https://github.com/matter-labs/zksync-era/issues/648))
([a317c7a](https://github.com/matter-labs/zksync-era/commit/a317c7ab68219cb376d08c8d1ec210c63b3c269f))
* Follow up metrics fixes vol.2
([#656](https://github.com/matter-labs/zksync-era/issues/656))
([5c1aea2](https://github.com/matter-labs/zksync-era/commit/5c1aea2a94d7eded26c3a4ae4973ff983c15e7fa))
* **job-processor:** `max_attepts_reached` metric
([#626](https://github.com/matter-labs/zksync-era/issues/626))
([dd9b308](https://github.com/matter-labs/zksync-era/commit/dd9b308be9b0a6e37aad75f6f54b98e30a2ae14e))
* update google cloud dependencies that do not depend on rsa
([#622](https://github.com/matter-labs/zksync-era/issues/622))
([8a8cad6](https://github.com/matter-labs/zksync-era/commit/8a8cad6ce62f2d34bb34adcd956f6920c08f94b8))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

* ci: removes docker-compose-runner.yml (#649)

## What ❔

<!-- What are the changes this PR brings about? -->
<!-- Example: This PR adds a PR template to the repo. -->
<!-- (For bigger PRs adding more context is appreciated) -->

## Why ❔

<!-- Why are these changes done? What goal do they contribute to? What
are the principles behind them? -->
<!-- Example: PR templates ensure PR reviewers, observers, and future
iterators are in context about the evolution of repos. -->

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [ ] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [ ] Tests for the changes have been added / updated.
- [ ] Documentation comments have been added / updated.
- [ ] Code has been formatted via `zk fmt` and `zk lint`.
- [ ] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

* chore(en): adds version metric collecting (#655)

## What ❔

This PR adds a metric that logs release version and protocol version of
the external node. That is needed for provisioning purposes.



## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [ ] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [ ] Tests for the changes have been added / updated.
- [ ] Documentation comments have been added / updated.
- [ ] Code has been formatted via `zk fmt` and `zk lint`.
- [ ] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

* ci(local-node): replace deprecated node setup (#642)

## What ❔

As in commit 33174aa59 and `docker/zk-environment/Dockerfile` use the
repo to setup node, instead of the `curl | sh`.

<!-- What are the changes this PR brings about? -->
<!-- Example: This PR adds a PR template to the repo. -->
<!-- (For bigger PRs adding more context is appreciated) -->

## Why ❔
The old method is deprecated and it saves one minute waiting time
instead of the deprecation banner being displayed.

<!-- Why are these changes done? What goal do they contribute to? What
are the principles behind them? -->
<!-- Example: PR templates ensure PR reviewers, observers, and future
iterators are in context about the evolution of repos. -->

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [ ] Tests for the changes have been added / updated.
- [ ] Documentation comments have been added / updated.
- [ ] Code has been formatted via `zk fmt` and `zk lint`.
- [ ] Spellcheck has been run via `cargo spellcheck
--cfg=./spellcheck/era.cfg --code 1`.

Signed-off-by: Harald Hoyer <harald@matterlabs.dev>

* chore(en): Add sepolia en config (#663)

## What ❔

- marks goerli testnet EN config as deprecated
- adds sepolia testnet EN config
- removes `EN_BOOTLOADER_HASH`, `EN_DEFAULT_AA_HASH` from configs as
these vars are not used anymore

## Why ❔

Prepare docs for sepolia testnet EN launch

## Checklist

<!-- Check your PR fulfills the following items. -->
<!-- For draft PRs check the boxes as you complete them. -->

- [x] PR title corresponds to the body of PR (we generate changelog
entries from PRs).
- [x] Tests for the changes have been added / updated.
- [x] Documentation comme…
@exFalso
Copy link

exFalso commented Apr 29, 2024

Any update on this?

@tarcieri
Copy link
Member

#394 is where work on this is happening. You can see updates there.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

9 participants