Skip to content

Commit

Permalink
Expand with detail about relevant API methods
Browse files Browse the repository at this point in the history
  • Loading branch information
jlwllmr committed Sep 19, 2024
1 parent cc1950c commit feaa8a3
Showing 1 changed file with 15 additions and 3 deletions.
18 changes: 15 additions & 3 deletions docs/architecture/stack/trace-expansion-proving/prover-limits.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,30 @@ sidebar_position: 3

Linea has a built-in mechanism for ensuring that the prover can continue to generate proofs
without increasing proof complexity to such a level that current infrastructure cannot process them.
This buffer is represented by module limits.
This mechanism involves module limits.

Modules are the sections into which Linea's arithmetization specification is divided. Each module
represents a collection of operations (opcodes) at the EVM level, and corresponds to a specific
represents a collection of operations (opcodes) at the EVM level, or corresponds to a specific
function of Linea's zkEVM. Some of the modules process transaction data; some manage zkEVM memory;
others coordinate interactions between modules.

Regardless of its purpose, each module has a specific limit to the amount of lines of data that
its operations can generate. You can view each module's limits in the [Linea source code](https://github.com/Consensys/linea-monorepo/blob/main/config/common/traces-limits-besu-v2.toml).
Every time one of the operations in a module is
Every time one of the operations in a module is used, it generates additional lines.

Transactions with a high complexity—using a large volume of operations repeatedly—may generate too
many lines of data, and exceed that module's limit. Transactions that reach this point are
rejected by the [sequencer](../sequencer/index.mdx) to ensure that the trace data passed to the
prover is of a manageable scope, and that a proof can be generated.

Transaction rejections caused by module limits are prevented at one of three stages:
1. [`linea_estimateGas`](../../../developers/reference/api/linea-estimategas.mdx), which simulates
a transaction using given parameters. Transactions that exceed module limits cause an error.
2. [`eth_sendRawTransaction`](../../../developers/reference/api/eth-sendrawtransaction.mdx).
Similarly, `eth_sendRawTransaction` simulates the transaction before it is submitted, and
returns an error if module limits would be exceeded.
3. As a final protection, the [`linea_getTransactionExclusionStatusV1`](../../../developers/reference/api/linea-gettransactionexclusionstatusv1.mdx)
API method can be used to query the reason for transaction rejection in edge cases where
`linea_estimateGas` or `eth_sendRawTransaction` did not return an error. `linea_getTransactionExclusionStatusV1`
is only available for Infura nodes via request. View its [reference page](../../../developers/reference/api/linea-gettransactionexclusionstatusv1.mdx)
for more information on requesting it.

0 comments on commit feaa8a3

Please sign in to comment.