ContentionData — Storage Contention Analysis
Subscribe
{"subscribe": ["ContentionData"]}
{
"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
| Field | Type | Description |
|---|
block_number | u64 | Block number |
block_wall_time_ns | u64 | Block execution wall time (nanoseconds) |
total_tx_time_ns | u64 | Sum of all transaction execution times (ns) |
parallel_efficiency_pct | f64 | Parallel execution efficiency (%) |
total_unique_slots | u32 | Total unique storage slots accessed |
contended_slot_count | u32 | Slots contended by multiple transactions |
contention_ratio | f64 | contended_slot_count / total_unique_slots |
total_txn_count | u32 | Total transactions in block |
top_contended_slots | array | Top slots with highest contention |
top_contended_contracts | array | Top contracts by contention |
contract_edges | array | Contract relationships via shared transactions |
top_contended_slots[]
| Field | Type | Description |
|---|
address | string | Contract address |
slot | string | Storage slot (bytes32) |
txn_count | number | Transactions competing for this slot |
access_count | number | Total accesses to this slot |
top_contended_contracts[]
| Field | Type | Description |
|---|
address | string | Contract address |
total_slots | number | Total slots |
contended_slots | number | Contended slots |
total_accesses | number | Total accesses |
contention_score | f64 | Contention score |
contract_edges[]
| Field | Type | Description |
|---|
contract_a | string | First contract |
contract_b | string | Second contract |
shared_txn_count | number | Number 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).