> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cosmos.network/llms.txt
> Use this file to discover all available pages before exploring further.

# Creating a proposal

A block consists of a header, transactions, votes (the commit),
and a list of evidence of malfeasance (ie. signing conflicting votes).

We include no more than 1/10th of the maximum block size
(`ConsensusParams.Block.MaxBytes`) of evidence with each block.

## Reaping transactions from the mempool

When we reap transactions from the mempool, we calculate maximum data
size by subtracting maximum header size (`MaxHeaderBytes`), the maximum
amino overhead for a block (`MaxAminoOverheadForBlock`), the size of
the last commit (if present) and evidence (if present). While reaping
we account for amino overhead for each transaction.

```go theme={"theme":{"light":"github-light-high-contrast","dark":"github-dark-high-contrast"}}
func MaxDataBytes(maxBytes int64, valsCount, evidenceCount int) int64 {
 return maxBytes -
  MaxOverheadForBlock -
  MaxHeaderBytes -
  int64(valsCount)*MaxVoteBytes -
  int64(evidenceCount)*MaxEvidenceBytes
}
```

## Validating transactions in the mempool

Before we accept a transaction in the mempool, we check if it's size is no more
than {MaxDataSize}. {MaxDataSize} is calculated using the same formula as
above, except we subtract the max number of evidence, {MaxNum} by the maximum size of evidence

```go theme={"theme":{"light":"github-light-high-contrast","dark":"github-dark-high-contrast"}}
func MaxDataBytesUnknownEvidence(maxBytes int64, valsCount int) int64 {
 return maxBytes -
  MaxOverheadForBlock -
  MaxHeaderBytes -
  (maxNumEvidence * MaxEvidenceBytes)
}
```
