Abstract
ECIP-1120's block elasticity feature affects network propagation dynamics. Larger blocks take longer to propagate, potentially increasing uncle rates and affecting network stability. This research analyzes ETC's network topology, measures propagation characteristics, and establishes safe operating bounds for the elasticity multiplier. Results inform both the Elasticity Multiplier Selection and Client Benchmarking research.
Research Objectives
- What is the current ETC network topology (node count, geographic distribution, connectivity)?
- How does block propagation time correlate with block size?
- What is the current uncle rate, and how would it change at higher gas limits?
- What are the bandwidth constraints for typical ETC node operators?
- What maximum block size maintains acceptable network stability?
Background
Network Propagation Fundamentals
When a miner produces a block:
- Block is announced to connected peers
- Peers request and receive full block data
- Peers validate and announce to their peers
- Propagation continues until all nodes have the block
Larger blocks = more data = longer propagation time.
Uncle Rate Impact
If a new block is found before the previous block fully propagates:
- Some miners may build on the old block
- This creates "uncle" blocks (valid but not in main chain)
- Uncle rate reflects network health and propagation efficiency
Current ETC uncle rate: ~3-5% (varies with network conditions)
ETC Network Context
Unlike Ethereum (post-merge), ETC remains a decentralized proof-of-work network:
- Nodes operated by individuals, pools, exchanges, infrastructure providers
- Geographic distribution across multiple continents
- Varying hardware and bandwidth capabilities
- No centralized infrastructure requirements
Methodology
Approach
- Network Topology Mapping: Discover and categorize active ETC nodes
- Propagation Measurement: Instrument test nodes to measure block arrival times
- Historical Analysis: Correlate past uncle rates with block characteristics
- Simulation: Model propagation under increased block sizes
Data Collection Methods
| Method | Purpose | Duration |
|---|---|---|
| Node crawling | Discover active nodes, map connections | 2 weeks |
| Instrumented nodes | Measure propagation latency | 4 weeks |
| Archive analysis | Historical uncle rate data | Full history |
| Synthetic testing | Controlled propagation experiments | 2 weeks |
Metrics Collected
- Node count and geographic distribution
- Peer connection topology
- Block announcement latency (time to first see block header)
- Block download latency (time to receive full block)
- Validation latency (time to verify and accept block)
- Uncle rate correlation with block gas used
Research Plan
Phase 1: Network Discovery
- Deploy node crawling infrastructure
- Enumerate active ETC mainnet nodes
- Classify nodes by client type (Core-Geth, Besu, other)
- Map geographic distribution (by IP geolocation)
- Document peer connection patterns
Phase 2: Topology Analysis
- Build network topology graph
- Calculate average path length between nodes
- Identify well-connected hubs and edge nodes
- Compare to Ethereum (historical) and other PoW networks
- Identify potential bottlenecks
Phase 3: Propagation Measurement
- Deploy instrumented nodes in diverse locations (NA, EU, Asia)
- Measure block propagation latency for 4+ weeks
- Record block size, gas used, propagation time for each block
- Calculate propagation time distributions (p50, p90, p95, p99)
- Identify correlation between block size and propagation time
Phase 4: Historical Uncle Analysis
- Extract all uncle blocks from ETC history
- Calculate uncle rate over time (daily, weekly, monthly)
- Correlate uncle rate with network conditions
- Correlate uncle rate with block gas used
- Build predictive model: uncle_rate = f(block_size)
Phase 5: Simulation & Projection
- Build network propagation simulator
- Calibrate simulator against measured data
- Simulate propagation at 2x, 4x, 8x, 16x, 32x gas limits
- Project uncle rate at each gas limit
- Identify maximum safe block size
Phase 6: Recommendations
- Synthesize findings into network capacity bounds
- Document bandwidth requirements for node operators
- Identify geographic regions at risk of higher uncle rates
- Prepare network constraints for Elasticity Multiplier Selection
Expected Outcomes
- Network Topology Report: Complete map of ETC network structure
- Propagation Model: Empirical relationship between block size and propagation time
- Uncle Rate Projections: Expected uncle rates at various gas limits
- Capacity Assessment: Maximum safe block size given network constraints
- Node Operator Guidelines: Bandwidth recommendations for participation
Success Criteria
- Network crawl discovers > 90% of active nodes
- Propagation measurements cover 4+ weeks of mainnet data
- Uncle rate model explains > 70% of historical variance
- Simulations validated against observed propagation times
- Recommendations keep uncle rate increase < 1% at chosen elasticity
Dependencies
- Elasticity Multiplier Selection - Depends on this research
- Client Benchmarking - Coordination on test methodology
- Geographic node placement - Access to servers in diverse regions
Current Status
Status: TODO
Progress Log
- 2025-11-28: Initial research plan drafted
- Pending: Begin Phase 1 network discovery
Appendix: Technical Details
Node Crawling Methodology
interface NodeDiscovery {
// Discovery methods
bootnodes: string[]; // Start from known bootnodes
peerExchange: boolean; // Request peer lists from connected nodes
dnsDiscovery: boolean; // Use DNS-based node discovery
// Collected data
nodes: {
enode: string; // Node identifier
ip: string; // IP address
port: number; // TCP/UDP port
clientVersion: string; // Client name and version
capabilities: string[]; // Supported protocols
firstSeen: Date;
lastSeen: Date;
geoLocation: {
country: string;
region: string;
coordinates: [number, number];
};
}[];
}Propagation Measurement Protocol
interface PropagationMeasurement {
blockHash: string;
blockNumber: number;
blockGasUsed: bigint;
blockSize: number; // Bytes
timestamps: {
minerTimestamp: number; // Block header timestamp
firstAnnouncement: number; // When we first heard about block
fullBlockReceived: number; // When we received full block
validated: number; // When we accepted block
};
sourceNode: string; // Node we received from
measurementNode: string; // Our instrumented node
}Uncle Rate Calculation
function calculateUncleRate(
blocks: Block[],
windowSize: number
): number {
const windowBlocks = blocks.slice(-windowSize);
const totalUncles = windowBlocks.reduce(
(sum, block) => sum + block.uncles.length,
0
);
return totalUncles / windowSize;
}