Three-way comparison of hardforks returning -1, 0, or 1
-1 // a < b (a is before b chronologically) 0 // a === b (same hardfork) 1 // a > b (a is after b chronologically)
import { Hardfork, CANCUN, BERLIN, SHANGHAI, LONDON, MERGE } from 'tevm' const forks = [CANCUN, BERLIN, SHANGHAI, LONDON, MERGE] // Sort chronologically (oldest first) forks.sort(Hardfork.compare) // [BERLIN, LONDON, MERGE, SHANGHAI, CANCUN] // Sort reverse chronological (newest first) forks.sort((a, b) => -Hardfork.compare(a, b)) // [CANCUN, SHANGHAI, MERGE, LONDON, BERLIN]
import { Hardfork } from 'tevm' function getSortedSupportedVersions(config: NetworkConfig): BrandedHardfork[] { return config.supportedHardforks .slice() .sort(Hardfork.compare) }
import { Hardfork } from 'tevm' function binarySearchHardfork( sorted: BrandedHardfork[], target: BrandedHardfork ): number { let left = 0 let right = sorted.length - 1 while (left <= right) { const mid = Math.floor((left + right) / 2) const cmp = Hardfork.compare(sorted[mid], target) if (cmp === 0) return mid if (cmp < 0) left = mid + 1 else right = mid - 1 } return -1 }
import { Hardfork } from 'tevm' function isInRange( fork: BrandedHardfork, min: BrandedHardfork, max: BrandedHardfork ): boolean { return Hardfork.compare(fork, min) >= 0 && Hardfork.compare(fork, max) <= 0 } // Check if fork is between Berlin and Shanghai (inclusive) isInRange(LONDON, BERLIN, SHANGHAI) // true
FRONTIER (0) < HOMESTEAD (1) < ... < CANCUN (16) < PRAGUE (17)
function compare(a, b) { const indexA = HARDFORK_ORDER.indexOf(a) const indexB = HARDFORK_ORDER.indexOf(b) if (indexA < indexB) return -1 if (indexA > indexB) return 1 return 0 }
import { Hardfork } from 'tevm' const merge = Hardfork("merge") const paris = Hardfork("paris") Hardfork.compare(merge, paris) // 0 (same hardfork)
Was this page helpful?
Suggestions