# EPF Week 13 Update This week I am a bit late in submitting my update due to ongoing exams but I had opened a [PR](https://github.com/grandinetech/universal-precompiles/pull/2) to include Ziren zkVM compatibility for `bls12_381` field operations by implementing syscall-based arithmetic operations (like addmod, submod, mulmod) with Montgomery form handling following the same pattern as the SP1 implementation. I have extended the `bls12_381` to the base field (Fp), quadratic extension field (Fp2), Fp6, Fp12 and elliptic curve groups like G1 and G2. Some of the key additions include ZKM syscalls, Montgomery form conversion methods and conditional compilation. Some distinct additions across Fp6 and Fp12 include in-place arithmetic methods and Frobenius map implementation. Some other additions in G1 and G2 curve groups include projective point doubling, affine point arithmetic, scalar multiplication using affine coordinates and point decompression functionality. I have also implemented the scalar field arithmetic using modular arithmetic acceleration and pairing engine enhancements using miller loop and cyclotomic subgroup operations. Here are some of the benchmarks for Ziren zkVM over `execute` operation - Here are the specs of the device on which the benchmarks have been observed ## Device Specifications - **Name:** MacBook Air - **Chip:** Apple M3 - **CPU Cores:** 8 total - *4 performance* + *4 efficiency* - **Memory:** 16 GB - **System Version:** macOS Sequoia 15.6.1 - **Kernel Version:** 24.6.0 | Test case | Time elapsed | Number of cycles | |------|--------------------|-| |`pectra-devnet-6 with epoch transition`|797.576497458s |4176771642 |`pectra-devnet-6 without epoch transition` |109.507957541s |1565189314 |`consensus spec tests mainnet electra empty block transition` |9.996513125s |105916888 It has been verified my me that the added precompiles are indeed helping in reducing the time elapsed and number of cycles. Currently the `execute` operation is not working on the test case mainnet without epoch transition due to shortage of memory supported by the zkVM and the respective [issue](https://github.com/ProjectZKM/Ziren/issues/284) has been opened. For `prove` operation locally, only one test case works which is the `consensus spec tests mainnet electra empty block transition` The other test cases need GPU proving service to test the benchmarks. | Test case | Time elapsed | Number of cycles | |------|--------------------|-| |`consensus spec tests mainnet electra empty block transition`|4309.747308125s |147006769 | ## Conclusion I am approaching to opening the main PR on the Grandine consensus client repository soon, given that majority of the things are working as intended under my scope.