---
# System prepended metadata

title: Feijoa Specs Jordi

---

# Feijoa Specs (Jordi Proposal)

## Publics BatchProof / BatchRecursion

requiredL1InfoTreeRoot[8] // If 0 then do not check
requiredL1InfoTreeIdx
oldStateRoot[8]
oldAccInputHash[8]  // Mayybe [4] using Poseidon 
oldBlockNum
chainId
forkId
newStateRoot[8]
newAccInputHash[8] // Mayybe [4] using Poseidon 
newBlockNum
newLocalExitRoot[8]
assumedL1InfoTreeRoot[8]
assumedL1InfoTreeIdx[8]


## Publics BlobProofInner

oldStateRoot[8] // NO
oldAccInputHash[8]   // NO     // Mayybe [4] using Poseidon 
oldBlobAccInputHash[8]
oldBlockNum // // NO
chainId // NO
forkId // NO
newAccInputHash[8] // NO       // Mayybe [4] using Poseidon 
newBlobAccInputHash[8]
dataIsValid // NO // Boolean, If false no batch proof is required and the state is maintained

oldBlobNum
newBlobNum
forkId

finalAccBatchHashdata

## Publics BlobProofOuter / BlobRecursion

oldStateRoot[8]
oldBlobAccInputHash[8]
oldBlockNum
oldBlobNum
chainId
forkId
newStateRoot[8]
newBlobAccInputHash[8]
newBlockNum
newBlobNum
newLocalExitRoot[8]

## Publics Final

sha256(
    aggregatorAddr -> 160
    oldStateRoot -> 256
    oldBlobInputHash -> 256
    oldBlockNum -> 64
    oldBlobNum -> 64
    chainId -> 64
    forkId -> 64
    newStateRoot -> 256
    newBlobAccInputHash -> 256 
    newBlockNum -> 64
    newBlobNum -> 64
    newLocalExitRoot -> 256
)


## In the L2Block Header (in DA):

L1InfoTreeRoot
L1InfoTreeIdx
BlockNum
CoinBase
Timestamp (Absolute)


## BlobAccInputHash
Hash (
    oldAccInputHash
    firstL1InfoTreeIdx
    lastL1InfoTreeIdx
    lastL1InfoTreeRoot
    minTimestamp
    maxTimestamp
    isEIP4844
    z,y    // When isEIP4844 is true
    keccakData // When isEIP4844 is false
    coinBase
    zkGasgLimit
)

## AccInputHash (Poseidon)
Hash (
    oldAccInputHash
    L1InfoTreeRoot
    L1InfoTreeIdx
    L2Block
    CoinBase
    Timestamp
    L2TXData
)

This hash is calculated inside the proof so it guarantiees consecutive block numbers and coherent timestamps with previus and next and minTimestamp and maxTimestamp

```graphviz
digraph {
    // rankdir="LR";

    batchProof_1 -> recursive1proof_1
    batchProof_2 -> recursive1proof_2
    batchProof_3 -> recursive1proof_3

    recursive1proof_1 -> recursive2proof_1
    recursive1proof_2 -> recursive2proof_1

    recursive2proof_1 -> recursive2proof_2
    recursive1proof_3 -> recursive2proof_2

    blobProofInner -> blobProofOuter_1
    recursive2proof_2 -> blobProofOuter_1

    blobProofOuter_1 -> recursive2blob_1
    blobProofOuter_2 -> recursive2blob_1
    blobProofOuter_3 -> recursive2blob_2

    recursive2blob_1 -> recursive2blob_2

    recursive2blob_2 -> recursivefblob

    recursivefblob -> final
    
    subgraph cluster_2 {
        peripheries=0
        blobProofOuter_1
        blobProofOuter_2
        blobProofOuter_3
    }

    subgraph cluster_1 {
        peripheries=0
        recursive1proof_1
        recursive1proof_2
        recursive1proof_3
    }
    
    batchProof_1 [shape="box" label="batchProof" style=filled fillcolor="lightyellow"]
    batchProof_2 [shape="box" label="batchProof" style=filled fillcolor="lightyellow"]
    batchProof_3 [shape="box" label="batchProof" style=filled fillcolor="lightyellow"]
    
        recursive1proof_1 [shape="box" label="recursive1p" style=filled fillcolor="aquamarine"]
        recursive1proof_2 [shape="box" label="recursive1p" style=filled fillcolor="aquamarine"]
        recursive1proof_3 [shape="box" label="recursive1p" style=filled fillcolor="aquamarine"]
        
        recursive2proof_1 [shape="box" label="recursive2p" style=filled fillcolor="aquamarine3"]
        recursive2proof_2 [shape="box" label="recursive2p" style=filled fillcolor="aquamarine3"]
        
        blobProofInner [shape="box" label="blobProofInner" style=filled fillcolor="cyan"]

        blobProofOuter_1 [shape="box" label="blobProofOuter" style=filled fillcolor="cornflowerblue"]
        blobProofOuter_2 [shape="box" label="blobProofOuter" style=filled fillcolor="cornflowerblue"]
        blobProofOuter_3 [shape="box" label="blobProofOuter" style=filled fillcolor="cornflowerblue"]

        recursive2blob_1 [shape="box" label="recursive2b" style=filled fillcolor="coral"]
        recursive2blob_2 [shape="box" label="recursive2b" style=filled fillcolor="coral"]
        
        recursivefblob [shape="box" label="recursivefb" style=filled fillcolor="coral3"]
        
        final [shape="box" label="final" style=filled fillcolor="darkorchid1"]
}
```

* Batch  (3)
    * zkevm
    * c12aBatch
    * recursive1Batch
* AggBatch (1)
    * recursive2Batch
* BlobInner (3)
    * blobInner
    * c12aBlob
    * c12bBlob
* BlobOuter (1)
    * blobOuter
* AggBlob (1)
    * recursive2Blob
* Final (2)
    * recursivefBlob
    * final