For protocol teams · Monad mainnet

Find what's quietly throttling your protocol.

Monad runs transactions in parallel. But when many touch the same storage, they collide and have to re-run one at a time. That hidden serialization caps your throughput. pev traces every block and shows you exactly where it happens, and how to fix it.

parallel · fastcollision · re-runsharedstate
A real contract, audited

Here's pev on a live Monad contract

Perpl0x34b6…2a6f✓ measured on-chain
1.39M
transactions touched
1,390,935 in 2d
1.39M
re-executions forced
1,385,354 storage collisions
1.00
conflicts per transaction
measured · 2d window
The diagnosis

One storage slot is being written by many transactions at once, forcing them to run one at a time.

hottest slot 0xd98b3c…67b8 · 747,285kind write-writetop method 0x39435dac

The slot, kind and method above are measured. What the slot holds is inferred from its access pattern, the 32-byte key is most likely a mapping or array entry, so it's a specific shared resource rather than a global variable. Confirming it needs the contract's source.

Storage slots ranked by collisions

Each cell is a storage slot. Size and heat show how much contention it causes, the hot ones are where transactions queue up.

0xd98b3c…67b8747K
0x22e0cc…ad0d243K
0x089132…f0df232K
0x326a02…8dad102K
0xc82446…642583K
0x6fbc2e…e69c79K
0xd99b3b…1c9561K
0xac2a02…721b57K
0xea0247…154231K
0x4f4bda…ffba29K
0x21e43e…d2f628K
0x41be9e…977326K
0x482471…122f25K
0xf6476f…358024K
0x2484cc…5afc24K
0xb5b3a3…aba920K
Candidate fix · Shard the hot slotneeds review

Write-write contention means two transactions wrote the same storage slot, so Monad had to run them one after another. Splitting that one slot into N independent shards lets unrelated writers stop colliding, contention on it drops roughly N-fold.

before · one shared slotafter · shardedcollideparallel
Before
// before: every tx writes the same slot, forced serial
uint256 public total;

function record(uint256 amt) external {
    total += amt;            // <- the hot slot, all writers collide here
}
After
// after: writers hit independent shards, run in parallel
mapping(uint256 => uint256) private totalShard;
uint256 constant SHARDS = 16;

function record(uint256 amt) external {
    totalShard[uint256(uint160(msg.sender)) % SHARDS] += amt;
}
// read total = sum(totalShard[0..SHARDS-1]) when you actually need it

A starting point, the common remedy for the conflict pattern we measured, not a verified fix. Because the hot slot looks like a mapping or array entry, the right change depends on what it actually holds. Your team knows instantly; Silk Nodes can confirm the remedy and verify the contention drop on-chain.

Methods causing conflicts
0x39435dac911K
0x98717539217K
0x5a5d9a99154K
0x0f6795d996K
0x5bf9264c6K
0x4d8dc985736
0xd3b8c49d71
0xcef6d2092

4-byte selectors. Resolve to names with the contract's ABI.

Conflict kinds (recent sample)
write-write95%
mixed5%
read-write0%

2-day window · updated 2026-06-19 07:12 UTC

What pev delivers to your team

A full contract performance audit

Top contention sources, ranked
The exact storage slots colliding
Method-level collision breakdown
Who your contract collides with
Conflict kinds (write-write vs read-write)
Architecture changes by ROI
Historical contention trend
Per-contract API access
Why it matters

Every collision is work the chain did twice

Monad executes optimistically in parallel, then re-runs any transaction whose reads or writes conflicted with an earlier one. High contention means more re-execution: wasted compute, higher latency under load, and a lower effective throughput than the chain could deliver. Cutting contention is the single highest-leverage performance win for a busy contract, and almost nobody can see it today. pev can.

Audit your contract

We'll identify your biggest contention sources, the contracts colliding with you, the storage slots forcing re-execution, and the architecture changes with the highest ROI, all from Monad mainnet data. Built by Silk Nodes.

Request a protocol audit →Explore the contract graph

← back to pev