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

# Protocol Constants and Limits

> Metal network constants, transaction bounds, and asset limits

Use this page for values enforced by the Metal testnet, protocol contracts, or
transaction admission.

## Network

| Constant | Value |
| - | - |
| Network name | Metal Testnet |
| Chain ID | `63825` (`0xf951`) |
| RPC URL | `https://rpc-testnet.metalntwx.com/v1/<endpoint-id>` |
| Wallet currency display | `USD Zero` (`USDZ`), 18 decimals |
| Explorer | `https://testnet.metalntwx.com` |
| Faucet | `https://faucet.metalntwx.com` |
| Consensus | Simplex |
| Native asset | None |
| Required transaction `value` | `0` |
| EVM revision | Osaka |
| Finality status method | `consensus_status` |
| Finality certificate method | `metal_getFinalityCertificate` |
| Future timestamp tolerance | `60,000` milliseconds, reducing to `2,000` milliseconds from the block where the [scheduler](https://docs.metalntwx.com/build/contracts/schedule-a-contract-call.md) activates |
| EVM `block.timestamp` precision | Seconds |
| Additive block timestamp field | `timestampMillisPart`, from `0` to `999` |

Get your endpoint ID from the [Metal console](https://console-testnet.metalntwx.com).
See [RPC endpoint setup](https://docs.metalntwx.com/start/connect-to-testnet.md#2-create-an-rpc-endpoint) for the setup steps.

## Fixed system contracts

[Contract addresses](https://docs.metalntwx.com/reference/contract-addresses.md) lists every fixed system
contract and the ones Metal Testnet does not have yet. Application contracts
use their deployment addresses.

## Transaction and gas limits

| Limit | Value | Enforcement |
| - | - | - |
| Accepted envelope types | `0x00`, `0x01`, `0x02`, `0x03`, `0x7f` | Transaction admission. `0x03` requires an EIP-7594 sidecar |
| Testnet block gas limit | `500,000,000` | Network genesis configuration |
| Per-transaction gas cap | `100,000,000` | Transaction admission and execution |
| Native transaction value | Exactly `0` | Transaction admission |
| Maximum `max_fee_per_gas` | `1_000_000_000_000` gas-token base units | Transaction admission |
| Minimum effective gas price | `1` gas-token base unit per gas | Transaction admission |
| Base fee | `0` | EVM block environment |
| Selectable gas token | Factory-allowlisted MIP20 | `0x7f` admission |
| Standard-envelope gas token | Chain default MIP20 | Transaction admission |
| EIP-7702 authorization transport | `authorization_list` inside `0x7f` | Transaction decoding |

The effective gas price is
`min(max_fee_per_gas, max_priority_fee_per_gas)`.

## Blobs and interoperability

| Limit | Value | Scope |
| - | - | - |
| Blobs per block | `6` | Sum across all blob transactions in the block |
| Blob sidecar retention | At least `18` days | Verified sidecars persisted by validators, eligible for pruning afterwards |
| Blob fee | `blobGasUsed × maxFeePerBlobGas` | Charged in full in the default gas token, with no refund |
| Interop message tree depth | `32` | Metal outbox |
| Finality certificate retention | `100,000` certificates by default | Node-local retention, not a time-based availability guarantee |

See [Blobs](https://docs.metalntwx.com/reference/network-fundamentals/blobs.md) and [Finality
Certificates](https://docs.metalntwx.com/reference/interop/finality-certificates.md) for retrieval conditions.

## MIP20

| Limit or invariant | Value |
| - | - |
| Gas-accounting balance slot | Storage slot `0` |
| ERC-3009 EOA signature | `65`-byte ECDSA signature, or the split `v`, `r`, `s` form |
| ERC-3009 contract signature | `bytes` form checked through ERC-1271 when the signer has code and ECDSA does not authenticate it |
| EIP-712 version | `"1"` |
| Standard token deployment | `MIP20Factory.deployMIP20` |
| Receive-policy configuration | Each account configures its own rules through calls from its address |
| Default receive behavior | Accepts incoming credits, with `REVERT` refusal mode if rules are later enabled |
| Refusal modes | `REVERT = 0`, `QUARANTINE = 1` |
| Forced quarantine on refusal | Mints, MIP20 hold captures, and payouts from the token's own balance |
| Recovery modes | `ORIGINATOR = 0`, `RECEIVER = 1`, `THIRD_PARTY = 2` |
| Quarantine receipt ID | `keccak256(abi.encode(receipt))` |
| Sender limit units | Token base units for amounts, arrivals for frequency, seconds for periods |
| Sender limit period | `0` for lifetime counting, otherwise fixed windows measured from the Unix epoch |
| Maximum amount and sender limits | A zero maximum disables the corresponding limit. [Not on Metal Testnet yet](https://docs.metalntwx.com/reference/compliance/receive-policy.md) |

MIP20 screens incoming credits through `ReceivePolicy`, the receive
policy contract at a fixed address.
Ordinary transfers do not call sender or recipient code. The `bytes` form of
ERC-3009 may make a read-only ERC-1271 signature check before changing state.
Use a send policy contract to enforce outgoing controls, or a routing contract
to forward funds.

See [Receive Policy](https://docs.metalntwx.com/reference/compliance/receive-policy.md) for screening order,
claim permissions, and the recipient fallback for contract originators.

## MIP410

| Limit or invariant | Value |
| - | - |
| Commitment tree depth | `32` |
| Maximum tree leaves | `4,294,967,296` |
| Commitment behavior | Append-only. Spending never removes a tree leaf |
| Known commitment tree roots | Every historical nonempty root, queried with `isKnownCommitmentRoot(root)` |
| VASP registry tree | Depth `10`, with `1,024` slots |
| Sanctions registry tree | Depth `20`, including the start-of-chain leaf |
| Accepted registry roots | Registration: current root and the previous root after an admission. Sanctions: current root only. Zero is never accepted |
| Note commitment | `Poseidon2(amount, asset_id, d, pk_x, pk_y, secret, P, bitmap_0, bitmap_1, depth, shieldTimestamp)` |
| Amount range | `0 < amount < 2^128` |
| MIP410 shielded pool | One protocol-deployed pool and one commitment tree across supported assets |
| Shielded payment and unshield inputs | Exactly two slots. The first slot is real, the second real or zero dummy |
| `Accept` resolution outputs | One recipient note commitment and one change note commitment. The change note commitment is canonically empty when no change remains |
| Active-hold input behavior | Input locks prevent another hold or spend |
| Accepted-hold input behavior | Input locks remain set permanently and nullifiers are recorded |
| Resolution entry points | `acceptPayment` and `rejectPayment`, each requiring a resolution proof and a policy-wrapper proof |
| Hold ID | The payment effect hash. A hold ID cannot be reused |
| Initiation deadline | `block.timestamp < deadline <= block.timestamp + maxHoldDuration()` |
| Shield timestamp | At most `3600` seconds before the block timestamp and never in the future |
| Expiry behavior | Makes an active hold reclaimable without releasing its inputs |
| Terminal hold states | `Accepted`, `Rejected`, or `Reclaimed`. Exactly one can succeed |
| Unshield destination | Authorized by the signature under the spending key, without a MIP410 destination-registration check |
| Payment transaction submission | Any account may submit prepared proofs or reclaim an expired hold. Administrative writes have separate authorization |
| Paused operations | Shield, initiate, accept, reject, unshield, bridge mint, and bridge withdraw. Reclaim and registry/admin writes remain available |
| Asset admission | Required for shielding. Revocation does not prevent unshielding |
| Transaction gas | Paid separately by the submitter account with MIP20 |

> [card] [Contract addresses](https://docs.metalntwx.com/reference/contract-addresses.md)
>
> Look up fixed system contract addresses.

> [card] [Signing and typed data](https://docs.metalntwx.com/reference/network-fundamentals/signing.md)
>
> Look up domains, primary types, and signed fields.

> [card] [Transactions](https://docs.metalntwx.com/reference/network-fundamentals/transactions.md)
>
> Review envelope fields and admission order.

> [card] [Block timestamps](https://docs.metalntwx.com/reference/network-fundamentals/block-timestamps.md)
>
> Interpret seconds and millisecond header fields.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.