Plot Range Evolution with Genesis Farming
How negative base ranges enable farming from blockchain genesis
Base Range (Initial, Immutable)
Effective Range (Tracks History)
Current History Size
Genesis Block (History = 0)
1000
[512 - 1024]
[512 - 1024]
✅ Yes
Range Evolution Timeline
-1000
1000
3000
5000
7000
Base
Effective
How Genesis Farming Works:
// Constants
const GENESIS_OFFSET: u64 = 256; // Allows negative ranges
// Calculate initial range with negative values
fn calculate_initial_range(offset: u64) -> HistoryRange {
let window_level = offset / 64;
let window_base_size = 256 * (2_u64.pow(window_level));
let offset_in_window = offset % 64;
// Subtract GENESIS_OFFSET to allow negative values
let min_value = (window_base_size * offset_in_window / 64) as i64 - 256;
let max_value = (window_base_size * (offset_in_window + 1) / 64) as i64 - 256;
HistoryRange {
min_history_size: min_value, // Can be negative!
max_history_size: max_value, // Can be negative initially
}
}
// Get effective range - ALWAYS extends to current history
fn get_current_effective_range(plot: &PlotMetadata, current_history: u64) -> HistoryRange {
let mut range = plot.base_range.clone();
// Key: effective max is always AT LEAST current history
range.max_history_size = max(range.max_history_size, current_history as i64);
range
}
Key Principle: The effective range maximum ALWAYS extends to current history size.
- At genesis (history=0): Range [-256, -252] becomes [-256, 0]
- At history=100: Range [-256, -252] becomes [-256, 100]
- At history=1000: Range [512, 1024] becomes [512, 1000]
- At history=2000: Range [512, 1024] becomes [512, 2000]