ContentionData — Storage Contention Analysis

Subscribe

{"subscribe": ["ContentionData"]}

Message Format

{
  "seq": 44,
  "ContentionData": {
    "block_number": 56147820,
    "block_wall_time_ns": 45000000,
    "total_tx_time_ns": 350000000,
    "parallel_efficiency_pct": 87.14,
    "total_unique_slots": 1523,
    "contended_slot_count": 42,
    "contention_ratio": 0.0275,
    "total_txn_count": 150,
    "top_contended_slots": [
      {"address": "0x...", "slot": "0x...", "txn_count": 5, "access_count": 12}
    ],
    "top_contended_contracts": [
      {"address": "0x...", "total_slots": 100, "contended_slots": 10, "total_accesses": 500, "contention_score": 0.1}
    ],
    "contract_edges": [
      {"contract_a": "0x...", "contract_b": "0x...", "shared_txn_count": 15}
    ]
  }
}

Fields

FieldTypeDescription
block_numberu64Block number
block_wall_time_nsu64Block execution wall time (nanoseconds)
total_tx_time_nsu64Sum of all transaction execution times (ns)
parallel_efficiency_pctf64Parallel execution efficiency (%)
total_unique_slotsu32Total unique storage slots accessed
contended_slot_countu32Slots contended by multiple transactions
contention_ratiof64contended_slot_count / total_unique_slots
total_txn_countu32Total transactions in block
top_contended_slotsarrayTop slots with highest contention
top_contended_contractsarrayTop contracts by contention
contract_edgesarrayContract relationships via shared transactions

top_contended_slots[]

FieldTypeDescription
addressstringContract address
slotstringStorage slot (bytes32)
txn_countnumberTransactions competing for this slot
access_countnumberTotal accesses to this slot

top_contended_contracts[]

FieldTypeDescription
addressstringContract address
total_slotsnumberTotal slots
contended_slotsnumberContended slots
total_accessesnumberTotal accesses
contention_scoref64Contention score

contract_edges[]

FieldTypeDescription
contract_astringFirst contract
contract_bstringSecond contract
shared_txn_countnumberNumber of shared transactions

Description

ContentionData is sent once per block on BlockEnd processing. Contains storage slot contention analysis, a key metric for Monad's parallel execution.

  • parallel_efficiency_pct: primary indicator: 100% = full parallelization, lower = more sequential execution
  • contract_edges: contract dependency graph (shared transactions = potential conflicts)

Usage Examples

Efficiency Monitoring

{"subscribe": ["ContentionData"]}
ws.onmessage = (event) => {
  const msg = JSON.parse(event.data);
  if (msg.contention-data) {
    const d = msg.ContentionData;
    console.log(`Block ${d.block_number}: ${d.parallel_efficiency_pct.toFixed(1)}% efficiency`);
    console.log(`Contended: ${d.contended_slot_count}/${d.total_unique_slots} slots`);
  }
};

Combined with Block Events

{"subscribe": ["BlockStart", "BlockEnd", "ContentionData"]}

REST Equivalent

curl http://localhost:8443/v1/contention

Frequency

Once per block (~every 400 ms).