# EPF5 Week 15 Update
Earlier this week, I finished implementing the `SszDecode` trait along with the base type implementations. This leaves me with the derive macros to implement, which I will be working on for the rest of this month and October. Ample time in my opinion, so it looks like I'm on track :)
## Benchmarking with Divan
I [migrated ssz-arena](https://github.com/ghiliweld/ssz-arena/commit/7d0fdd5505ad537e14b2bbce9fda55e4b998d3fd) to use divan instead of criterion for benchmarking, namely for the easy support for alloc measuring. Here's what the output of the benchmarks looks like!

I also took the occasion to ship a few new features to complete my benchmarking suite:
- I've added some benchmarks for some simpler cases like: list of `u64` and list of structs encoding/decoding
- Encode benchmarks for beacon blocks and states. Up until now only decoding benchmarks were implemented.
- Fetching the latest checkpoint state and block from [sync-mainnet.beaconcha.in/](https://sync-mainnet.beaconcha.in/). This means users won't have to go and download the latest block and state themselves to run the benchmarks on real mainnet data!
By moving away from Criterion, I lose the plots it was generating that compared performance between crates. There's also no tooling for obtaining flamegraphs with divan. A simple fix would be running the benches on both criterion and divan. Divan for the alloc measurements, and Criterion for everything else. If I figure out how to implement alloc measurements in Criterion I can just move back to only using Criterion as well.
It's more or less complete now, but there's some minor bugs left to squash. I'll leave the polishing and usage guide for the end of the cohort (first week of November).
**Edit:**
Ok so turns out I have some more ideas on how to improve the benchmarking suite.
I want users to have the option between fetching live blockchain data or using their own data saved locally. Fetching data by default is a neat feature, but it does slow down our benchmarks by virtue of making outbound requests.
I should also only make the requests for block and state data *once* instead of in each benchmark. This is a trivial performance improvement.