pub(crate) fn l2_block_hash(
    l2_block_number: L2BlockNumber,
    l2_block_timestamp: u64,
    prev_l2_block_hash: H256,
    txs_rolling_hash: H256,
) -> H256 {
    let mut digest: [u8; 128] = [0u8; 128];
    U256::from(l2_block_number.0).to_big_endian(&mut digest[0..32]);
    U256::from(l2_block_timestamp).to_big_endian(&mut digest[32..64]);
    digest[64..96].copy_from_slice(prev_l2_block_hash.as_bytes());
    digest[96..128].copy_from_slice(txs_rolling_hash.as_bytes());

    H256(keccak256(&digest))
}
Returns the hash of the l2_block.
`txs_rolling_hash` of the l2_block is calculated the following way:
If the l2_block has 0 transactions, then `txs_rolling_hash` is equal to `H256::zero()`.
If the l2_block has i transactions, then `txs_rolling_hash` is equal to `H(H_{i-1}, H(tx_i))`, where
`H_{i-1}` is the `txs_rolling_hash` of the first i-1 transactions.
core/lib/multivm/src/versions/vm_1_4_2/utils/l2_blocks.rs