The RustChain cryptocurrency implements a Proof-of-Antiquity (PoA) reward system that incentivizes preservation and operation of vintage computing hardware. Older CPUs receive higher mining reward multipliers, with time-based decay to reward early adopters.
This document provides comprehensive CPU generation detection patterns and antiquity multipliers for all supported architectures: Intel, AMD, PowerPC, Apple Silicon, Sun SPARC, SGI MIPS, Motorola 68K, Hitachi SuperH, Vintage ARM, RISC-V, Game Console CPUs, and ultra-rare/dead architectures.
- Vintage Hardware Premium - Older CPUs (pre-2010) get higher base multipliers
- Time Decay - Vintage bonuses decay 15% per year to reward early adoption
- Loyalty Bonus - Modern CPUs (post-2019) earn 15% bonus per year of uptime
- Server Bonus - Enterprise-class hardware gets +10% multiplier
- 1 CPU = 1 Vote - Fair distribution based on hardware, not money
| Era | Base Multiplier | Example CPUs |
|---|---|---|
| MYTHIC (pre-1985) | 3.5x - 4.0x | ARM2, DEC VAX, Inmos Transputer, IBM ROMP |
| LEGENDARY (1979-1994) | 2.5x - 3.5x | Motorola 68000-68060, SPARC v7/v8, MIPS R2000-R4000 |
| EXOTIC (1985-2007) | 1.8x - 3.0x | UltraSPARC, MIPS R10000+, SuperH, StrongARM, i860/i960 |
| PowerPC (2001-2006) | 1.8x - 2.5x | G4 (2.5x), G5 (2.0x) |
| Game Console (2000-2006) | 2.0x - 2.3x | PS2 EE, PS3 Cell, Dreamcast SH-4, GCN Gekko |
| Vintage x86 (2000-2008) | 1.3x - 1.5x | Pentium 4, Core 2, Athlon 64 |
| Vintage ARM (1987-2007) | 2.0x - 4.0x | ARM2/3, ARM7TDMI, StrongARM, XScale |
| Classic (2008-2013) | 1.1x - 1.3x | Nehalem, Sandy Bridge, Phenom II |
| RISC-V (2010+) | 1.4x - 1.5x | SiFive, StarFive, Kendryte |
| Mid-range (2014-2019) | 1.0x - 1.1x | Haswell, Skylake, Zen/Zen+ |
| Modern (2020-2025) | 1.0x - 1.5x | Zen3/4/5, Alder Lake (loyalty bonus) |
| Apple Silicon | 1.05x - 1.2x | M1 (1.2x), M2 (1.15x), M3 (1.1x), M4 (1.05x) |
| Modern aarch64 NAS/SBC | 0.0005x PENALTY | Synology, QNAP, Raspberry Pi 4/5 (anti-spam) |
Vintage Hardware (>5 years old):
decay_factor = 1.0 - (0.15 * (age - 5) / 5.0)
final_multiplier = 1.0 + (vintage_bonus * decay_factor)Example: PowerPC G4 (base 2.5x, age 24 years)
- Vintage bonus: 1.5x (2.5 - 1.0)
- Age beyond 5 years: 19 years
- Decay: 1.0 - (0.15 x 19/5) = 1.0 - 0.57 = 0.43
- Final: 1.0 + (1.5 x 0.43) = 1.645x
Modern Hardware (<=5 years old):
loyalty_bonus = min(0.5, uptime_years * 0.15) # Capped at +50%
final_multiplier = base + loyalty_bonus # Max 1.5x totalExample: AMD Ryzen 9 7950X (base 1.0x)
- 0 years uptime: 1.0x
- 1 year uptime: 1.15x
- 3 years uptime: 1.45x
- 5+ years uptime: 1.5x (capped)
| Architecture | Years | Model Patterns | Examples |
|---|---|---|---|
| Pentium 4 | 2000-2006 | Pentium(R) 4, P4 |
Pentium 4 3.0GHz |
| Pentium D | 2005-2006 | Pentium(R) D |
Pentium D 805 |
| Architecture | Years | Model Patterns | Examples |
|---|---|---|---|
| Core 2 | 2006-2008 | Core(TM)2, Core 2 Duo/Quad |
Core 2 Duo E8400, Core 2 Quad Q6600 |
| Architecture | Years | Model Patterns | Examples |
|---|---|---|---|
| Nehalem | 2008-2010 | i[3579]-[789]\d{2}, Xeon.*[EWX]55\d{2} |
i7-920, Xeon X5570 |
| Westmere | 2010-2011 | i[3579]-[89]\d{2}, Xeon.*[EWX]56\d{2} |
i7-980X, Xeon X5675 |
Detection Pattern: i[3579]-2\d{3} or E3-12\d{2} (no v-suffix)
| Model Family | Examples |
|---|---|
| Core i3/i5/i7 | i7-2600K, i5-2500K, i3-2120 |
| Xeon E3-1200 | E3-1230, E3-1270 |
| Xeon E5-1600/2600 | E5-1650, E5-2670 |
Detection Pattern: i[3579]-3\d{3} or v2 suffix on Xeon
| Model Family | Examples |
|---|---|
| Core i3/i5/i7 | i7-3770K, i5-3570K, i3-3220 |
| Xeon E3-1200 v2 | E3-1230 v2, E3-1270 v2 |
| Xeon E5 v2 | E5-1650 v2, E5-2670 v2 |
| Xeon E7 v2 | E7-4870 v2, E7-8870 v2 |
Detection Pattern: i[3579]-4\d{3} or v3 suffix on Xeon
| Model Family | Examples |
|---|---|
| Core i3/i5/i7 | i7-4770K, i5-4590, i3-4130 |
| Xeon E3-1200 v3 | E3-1230 v3, E3-1231 v3 |
| Xeon E5 v3 | E5-1650 v3, E5-2680 v3 |
Detection Pattern: i[3579]-5\d{3} or v4 suffix on Xeon
| Model Family | Examples |
|---|---|
| Core i5/i7 | i7-5775C, i5-5675C (rare desktop) |
| Xeon E3-1200 v4 | E3-1240 v4, E3-1280 v4 |
| Xeon E5 v4 | E5-2680 v4, E5-2699 v4 |
Detection Pattern: i[3579]-6\d{3} or Xeon Scalable 1st-gen (no letter suffix)
| Model Family | Examples |
|---|---|
| Core i3/i5/i7 | i7-6700K, i5-6600K, i3-6100 |
| Xeon E3-1200 v5/v6 | E3-1230 v5, E3-1270 v6 |
| Xeon Scalable 1st | Platinum 8180, Gold 6148 |
Detection Pattern: i[3579]-7\d{3}
| Model Family | Examples |
|---|---|
| Core i3/i5/i7 | i7-7700K, i5-7600K, i3-7100 |
Detection Pattern: i[3579]-[89]\d{3}
| Model Family | Examples |
|---|---|
| Core i3/i5/i7 (8th-gen) | i7-8700K, i5-8400, i3-8100 |
| Core i5/i7/i9 (9th-gen) | i9-9900K, i7-9700K, i5-9600K |
Detection Pattern: Xeon Scalable 2nd-gen with letter suffix (e.g., Gold 6248R)
| Model Family | Examples |
|---|---|
| Xeon Scalable 2nd | Platinum 8280L, Gold 6248R, Silver 4214R |
Detection Pattern: i[3579]-10\d{3}
| Model Family | Examples |
|---|---|
| Core i3/i5/i7/i9 (10th-gen) | i9-10900K, i7-10700K, i5-10400 |
Detection Pattern: i[3579]-11\d{3}
| Model Family | Examples |
|---|---|
| Core i5/i7/i9 (11th-gen) | i9-11900K, i7-11700K, i5-11600K |
Detection Pattern: i[3579]-12\d{3} or Core [3579] 12\d{3}
Note: First hybrid architecture with P-cores + E-cores
| Model Family | Examples |
|---|---|
| Core i3/i5/i7/i9 (12th-gen) | i9-12900K, i7-12700K, i5-12600K |
| New naming | Core 9 12900K, Core 7 12700K |
Detection Pattern: i[3579]-1[34]\d{3} or Core [3579] 1[34]\d{3}
| Model Family | Examples |
|---|---|
| Core i5/i7/i9 (13th-gen) | i9-13900K, i7-13700K, i5-13600K |
| Core i5/i7/i9 (14th-gen) | i9-14900K, i7-14700K, i5-14600K |
Detection Pattern: Xeon Scalable 4th-gen with 8xxx/9xxx model numbers
| Model Family | Examples |
|---|---|
| Xeon Scalable 4th | Platinum 8480+, Gold 8468, Silver 8420+ |
Detection Pattern: Core Ultra [579] or i[3579]-15\d{3}
| Model Family | Examples |
|---|---|
| Core Ultra (mobile) | Core Ultra 9 185H, Core Ultra 7 155H |
| Arrow Lake (desktop) | Core Ultra 9 285K, Core Ultra 7 265K |
| Architecture | Years | Model Patterns | Examples |
|---|---|---|---|
| Athlon/Duron | 1999-2005 | Athlon(tm), Athlon XP, Duron |
Athlon XP 2400+, Duron 1.3GHz |
| Athlon 64 X2 | 2005 | Athlon 64 X2 |
Athlon 64 X2 4200+ |
| Architecture | Years | Model Patterns | Examples |
|---|---|---|---|
| Athlon 64 | 2003-2007 | Athlon(tm) 64, Athlon 64 |
Athlon 64 3200+ |
| Opteron | 2003-2007 | Opteron(tm) |
Opteron 250, Opteron 2384 |
| Turion 64 | 2005-2007 | Turion 64 |
Turion 64 ML-32 |
| Architecture | Years | Model Patterns | Examples |
|---|---|---|---|
| Phenom | 2007-2009 | Phenom (no II) |
Phenom X4 9950 |
| Phenom II | 2009-2011 | Phenom II |
Phenom II X6 1090T, X4 965 |
| Athlon II | 2009-2011 | Athlon II |
Athlon II X4 640 |
| Architecture | Years | Model Patterns | Base | Examples |
|---|---|---|---|---|
| Bulldozer | 2011-2012 | FX-\d{4} (no suffix) |
1.3x | FX-8150, FX-6100 |
| Piledriver | 2012-2014 | FX-\d{4}[A-Z] |
1.3x | FX-8350, FX-6300 |
| Steamroller | 2014-2015 | A[468]-\d{4} |
1.2x | A10-7850K, A8-7600 |
| Excavator | 2015-2016 | A[468]-\d{4}[A-Z] |
1.2x | A12-9800, A10-9700 |
| Architecture | Years | Model Patterns | Base | Examples |
|---|---|---|---|---|
| Zen | 2017-2018 | Ryzen [3579] 1\d{3}, EPYC 7[0-2]\d{2} |
1.1x | Ryzen 7 1700X, EPYC 7551 |
| Zen+ | 2018-2019 | Ryzen [3579] 2\d{3} |
1.1x | Ryzen 7 2700X, Ryzen 5 2600 |
| Zen 2 | 2019-2020 | Ryzen [3579] 3\d{3}, EPYC 7[2-4]\d{2} |
1.05x | Ryzen 9 3900X, EPYC 7742 |
| Zen 3 | 2020-2022 | Ryzen [3579] 5\d{3}, EPYC 7[3-5]\d{2} |
1.0x | Ryzen 9 5950X, EPYC 7763 |
| Zen 4 | 2022-2024 | Ryzen [3579] [78]\d{3}, EPYC [89]\d{3} |
1.0x | Ryzen 9 7950X, EPYC 9654 |
| Zen 5 | 2024-2025 | Ryzen [3579] 9\d{3}, EPYC 9[5-9]\d{2} |
1.0x | Ryzen 9 9950X, EPYC 9754 |
Note: Ryzen 8000 series (e.g., 8645HS) are mobile Zen4 chips, not a separate generation.
| Architecture | Years | Model Patterns | Base | Examples |
|---|---|---|---|---|
| G3 | 1997-2003 | 750, PowerPC G3 |
1.8x | iMac G3, PowerBook G3 |
| G4 | 2001-2005 | 7450, 7447, 7455, PowerPC G4 |
2.5x | Power Mac G4, PowerBook G4 |
| G5 | 2003-2006 | 970, PowerPC G5 |
2.0x | Power Mac G5, iMac G5 |
Detection: Read /proc/cpuinfo for PowerPC-specific model numbers.
| Architecture | Years | Model Patterns | Base | Examples |
|---|---|---|---|---|
| M1 | 2020-2021 | Apple M1 |
1.2x | MacBook Air M1, Mac mini M1 |
| M2 | 2022-2023 | Apple M2 |
1.15x | MacBook Air M2, Mac mini M2 |
| M3 | 2023-2024 | Apple M3 |
1.1x | MacBook Pro M3, iMac M3 |
| M4 | 2024-2025 | Apple M4 |
1.05x | Mac mini M4, MacBook Pro M4 |
Detection: Use sysctl -n machdep.cpu.brand_string on macOS.
Sun Microsystems SPARC architecture dominated workstations and servers from the late 1980s through the early 2000s. These are genuinely rare mining platforms.
Detection: platform.machine() returns sparc, sparc64, sun4u, or sun4v
| Architecture | Years | Base | Detection Patterns | Examples |
|---|---|---|---|---|
| SPARC v7 | 1987-1992 | 2.9x | sparc_v7, MB86900, CY7C601 |
Sun-4, SPARCstation 1 |
| SPARC v8 | 1990-1998 | 2.7x | sparc_v8, MicroSPARC, SuperSPARC, HyperSPARC |
SPARCstation 5/10/20 |
| SPARC v9 | 1995-2002 | 2.5x | sparc_v9, UltraSPARC (early) |
Ultra 1/2, Ultra 60 |
| UltraSPARC II/III | 1997-2004 | 2.3x | UltraSPARC-II, UltraSPARC-III, UltraSPARC-IIIi |
Sun Blade 1000/2000, V240/V440 |
| UltraSPARC IV/IV+ | 2004-2007 | 2.1x | UltraSPARC-IV, UltraSPARC-IV+ |
Sun Fire E25K |
| UltraSPARC T1 (Niagara) | 2005-2007 | 1.9x | UltraSPARC-T1, T1000, T2000 |
Sun Fire T1000/T2000 |
| UltraSPARC T2 (Niagara 2) | 2007-2010 | 1.8x | UltraSPARC-T2, T5120, T5220 |
Sun SPARC Enterprise T5120 |
| Fujitsu SPARC64 | 2004-2015 | 2.0x | SPARC64, Fujitsu SPARC |
SPARC Enterprise M4000/M8000 |
| SPARC T3-T5 / M7-M8 | 2010-2017 | 1.7x | SPARC-T3, SPARC-T4, SPARC-T5, SPARC-M7 |
Oracle SPARC T-series |
CPU Brand Patterns (case-insensitive):
sparc|ultrasparc|fujitsu\s*sparc|niagara|sun4[uv]Example /proc/cpuinfo on SPARC:
cpu : UltraSparc IIIi
type : sun4u
ncpus probed : 1
MIPS architecture powered SGI workstations, many game consoles, and embedded systems. The R-series processors were legendary in the 1990s graphics workstation era.
Detection: platform.machine() returns mips, mips64, mipsel, mips64el
| Architecture | Years | Base | Detection Patterns | Examples |
|---|---|---|---|---|
| R2000 | 1985-1988 | 3.0x | R2000, MIPS R2000 |
SGI Personal IRIS 4D/20 |
| R3000 | 1988-1992 | 2.9x | R3000, MIPS R3000 |
SGI Indigo, DECstation 5000 |
| R4000 | 1991-1996 | 2.8x | R4000, R4400, MIPS R4000 |
SGI Indy, SGI Indigo2 |
| R4600 (Orion) | 1994-1997 | 2.6x | R4600, R4700 |
SGI Indy (budget) |
| R5000 | 1996-1999 | 2.5x | R5000, MIPS R5000 |
SGI O2 |
| R8000 | 1994-1996 | 2.7x | R8000, MIPS R8000 |
SGI Power Challenge |
| R10000 | 1996-2000 | 2.5x | R10000, R10K |
SGI Origin 200/2000, Octane |
| R12000 | 1998-2003 | 2.4x | R12000, R12K |
SGI Origin 3000, Octane2 |
| R14000 | 2001-2005 | 2.3x | R14000, R14K |
SGI Origin 3000 (late) |
| R16000 | 2002-2006 | 2.3x | R16000, R16K |
SGI Origin 350, Fuel |
| Architecture | Years | Base | Platform | Notes |
|---|---|---|---|---|
| R3000A | 1994 | 2.8x | PlayStation 1 | 33.8688 MHz |
| VR4300 | 1996 | 2.5x | Nintendo 64 | NEC variant, 93.75 MHz |
| Emotion Engine (R5900) | 2000 | 2.2x | PlayStation 2 | Custom MIPS R5900, 294.912 MHz |
| Allegrex | 2004 | 2.0x | PlayStation Portable | MIPS R4000-based, 333 MHz |
CPU Brand Patterns (case-insensitive):
mips|r[234568]0{3}|r1[024]0{3}|r1[46]0{3}|vr4300|emotion\s*engine|allegrex|r5900Example /proc/cpuinfo on MIPS:
system type : SGI Octane
processor : 0
cpu model : R10000 V2.6 FPU V0.0
The Motorola 68000 family powered the golden age of personal computing: Macintosh, Amiga, Atari ST, Sun-3, Sega Genesis, and countless others. These are among the most historically significant CPUs ever made.
Detection: platform.machine() returns m68k
| Architecture | Years | Base | Detection Patterns | Platforms |
|---|---|---|---|---|
| 68000 | 1979-1988 | 3.0x | 68000, MC68000 |
Original Mac, Amiga 500/1000, Atari ST, Sega Genesis |
| 68010 | 1982-1990 | 2.9x | 68010, MC68010 |
Sun-1, HP 9000/300 |
| 68020 | 1984-1993 | 2.7x | 68020, MC68020 |
Mac II, Amiga 1200, Sun-3, NeXT Cube |
| 68030 | 1987-1995 | 2.5x | 68030, MC68030 |
Mac IIci/IIfx, Amiga 3000/4000, Atari TT |
| 68040 | 1990-1996 | 2.4x | 68040, MC68040 |
Mac Quadra, Amiga 4000T, NeXTstation Turbo |
| 68060 | 1994-2002 | 2.2x | 68060, MC68060 |
Amiga accelerator cards, rare |
| ColdFire | 1994-2012 | 1.8x | ColdFire, MCF52, MCF54 |
Embedded (68K-derived) |
Notable Platforms:
- Amiga: 68000 (A500/A1000/A2000), 68020 (A1200), 68030 (A3000), 68040 (A4000)
- Classic Macintosh: 68000 (Mac 128K-Plus-SE), 68020 (Mac II), 68030 (IIci), 68040 (Quadra)
- Atari ST/TT/Falcon: 68000 (ST), 68030 (TT/Falcon)
- Sun-3: 68020 (workstations, pre-SPARC era)
- Sega Genesis/Mega Drive: 68000 (main CPU) + Z80 (sound)
CPU Brand Patterns (case-insensitive):
680[0-6]0|mc680[0-6]0|coldfire|mcf5[24]SuperH (SH) processors were developed by Hitachi and later Renesas. They powered Sega's arcade boards and home consoles, as well as numerous embedded systems.
Detection: platform.machine() returns sh, sh4, sh4a, sh3, sh2
| Architecture | Years | Base | Detection Patterns | Platforms |
|---|---|---|---|---|
| SH-1 | 1992-1995 | 2.7x | SH-1, SH7032, SH7034 |
Embedded controllers |
| SH-2 | 1994-2000 | 2.6x | SH-2, SH7604, SH7095 |
Sega Saturn (dual SH-2), Sega 32X |
| SH-3 | 1995-2002 | 2.5x | SH-3, SH7708, SH7709 |
Windows CE handhelds, HP Jornada |
| SH-4 | 1998-2005 | 2.3x | SH-4, SH7750, SH7751 |
Sega Dreamcast, NAOMI arcade |
| SH-4A | 2003-2010 | 2.2x | SH-4A, SH7780, SH7785 |
Set-top boxes, automotive |
| SH-2A | 2006-2015 | 2.0x | SH-2A, SH7216 |
Automotive, industrial |
Notable Platforms:
- Sega Saturn (1994): Dual SH-2 at 28.6 MHz + dedicated VDP processors
- Sega Dreamcast (1998): SH-4 at 200 MHz with hardware FPU (our Sophicast target!)
- NAOMI/NAOMI 2 Arcade: SH-4 based (Crazy Taxi, House of the Dead 2)
CPU Brand Patterns (case-insensitive):
sh-?[1234]a?|sh7[0-9]{3}|superh|hitachi\s*shEarly ARM processors are genuinely rare and historically significant. These are NOT the modern aarch64 NAS/SBC chips that get the spam penalty -- these are the original RISC pioneers from Acorn, DEC, Intel, and early mobile.
CRITICAL DISTINCTION: Vintage ARM chips with proper detection get FULL antiquity bonuses. Modern aarch64 (Cortex-A53/A55/A72/A76 NAS/SBC spam) gets the 0.0005x penalty. The server-side _detect_arm_evidence() function distinguishes between them.
| Architecture | Years | Base | Detection Patterns | Platforms |
|---|---|---|---|---|
| ARM2 | 1987-1992 | 4.0x | ARM2, ARM250 |
Acorn Archimedes A305/A310/A410 |
| ARM3 | 1989-1994 | 3.8x | ARM3, ARM3-26 |
Acorn Archimedes A540, A5000 |
| ARM6 | 1991-1997 | 3.5x | ARM610, ARM6 |
Acorn Risc PC 600, 3DO |
| Architecture | Years | Base | Detection Patterns | Platforms |
|---|---|---|---|---|
| ARM7 | 1993-1999 | 3.2x | ARM710, ARM7 |
Acorn Risc PC 700 |
| ARM7TDMI | 1994-2009 | 3.0x | ARM7TDMI, ARM7T |
Game Boy Advance, iPod (1st-3rd gen), Nokia phones |
| StrongARM SA-110 | 1996-2001 | 2.8x | SA-110, StrongARM |
DEC/Intel, Acorn Risc PC, Apple Newton MP2x00 |
| StrongARM SA-1100 | 1997-2003 | 2.7x | SA-1100, SA-1110, StrongARM SA |
iPAQ H3600/H3800, Compaq Aero |
| Architecture | Years | Base | Detection Patterns | Platforms |
|---|---|---|---|---|
| XScale | 2002-2006 | 2.5x | XScale, PXA2[5678]x, IXP4xx |
Intel PDAs, Dell Axim, Palm TX |
| ARM9TDMI | 1998-2005 | 2.5x | ARM920T, ARM922T, ARM9TDMI |
GP32, Nintendo DS (ARM9) |
| ARM926EJ-S | 2000-2010 | 2.3x | ARM926, ARM926EJ |
TI OMAP, many SoCs |
| ARM11 | 2002-2010 | 2.0x | ARM1136, ARM1176, ARM11 |
Original iPhone, Raspberry Pi 1 |
| ARM1176JZF-S | 2003-2012 | 2.0x | ARM1176JZF, BCM2835 |
Raspberry Pi 1 (original, gets vintage ARM, NOT penalty) |
| Architecture | Years | Base | Detection Patterns | Platforms |
|---|---|---|---|---|
| Cortex-A8 | 2007-2012 | 1.8x | Cortex-A8, OMAP3, AM335x |
BeagleBoard, BeagleBone, iPhone 3GS, Palm Pre |
| Cortex-A9 | 2009-2014 | 1.5x | Cortex-A9, OMAP4, Tegra 2/3 |
Pandaboard, Galaxy S2, Wii U |
Modern ARM processors (Cortex-A53 and later) running on NAS boxes and SBCs are penalized to prevent cheap ARM device spam:
| Architecture | Base | Detection Evidence | Common Platforms |
|---|---|---|---|
| Cortex-A53/A55 | 0.0005x | aarch64 + NAS/SBC markers |
Synology DS220+, QNAP, RPi 4/5 |
| Cortex-A72/A76 | 0.0005x | aarch64 + consumer SBC |
RPi 4, RockPro64, Odroid N2 |
| Ampere Altra | 0.0005x | aarch64 + cloud/server |
Oracle Cloud, Hetzner ARM |
| AWS Graviton | 0.0005x | aarch64 + graviton |
AWS EC2 ARM instances |
ARM Detection Evidence (server-side):
ARM_NAS_EVIDENCE = [
"synology", "qnap", "asustor", "terramaster", # NAS vendors
"rockchip", "allwinner", "amlogic", "broadcom", # SoC vendors
"cortex-a53", "cortex-a55", "cortex-a72", "cortex-a76",
"bcm2711", "bcm2712", # Raspberry Pi 4/5
"rk3588", "rk3399", # RockChip
]RISC-V is the open-source ISA. Currently rare enough for mining to qualify as EXOTIC, but this may be adjusted as adoption grows.
Detection: platform.machine() returns riscv, riscv64, riscv32
| Architecture | Years | Base | Detection Patterns | Platforms |
|---|---|---|---|---|
| RV32 (32-bit) | 2016+ | 1.5x | riscv32, rv32 |
Kendryte K210, ESP32-C3, GD32VF103 |
| RV64 (64-bit) | 2018+ | 1.4x | riscv64, rv64 |
SiFive Unmatched, StarFive VisionFive 2, Milk-V |
| RV128 (128-bit) | Future | 1.6x | riscv128, rv128 |
Not yet available -- reserved |
Known RISC-V Boards:
- SiFive HiFive Unmatched (2021): SiFive U740, quad-core RV64GC, 16GB RAM
- StarFive VisionFive 2 (2023): JH7110, quad-core RV64GC, up to 8GB RAM
- Milk-V Mars (2023): JH7110, similar to VisionFive 2
- Milk-V Pioneer (2023): SG2042, 64-core server RISC-V
- Kendryte K210 (2018): Dual RV64GC + AI accelerator, 8MB SRAM
CPU Brand Patterns (case-insensitive):
riscv|risc-v|rv[36][24]|sifive|starfive|kendryte|jh7110|sg2042|c906|c910Game console CPUs are custom silicon that cannot be easily replicated. Mining on original console hardware is a strong proof of antiquity.
| Console | CPU | Year | Base | Architecture | Notes |
|---|---|---|---|---|---|
| PlayStation 1 | R3000A | 1994 | 2.8x | MIPS | 33.8688 MHz, see MIPS section |
| Sega Saturn | Dual SH-2 | 1994 | 2.6x | SuperH | Two SH-2 at 28.6 MHz |
| Nintendo 64 | VR4300 | 1996 | 2.5x | MIPS | NEC variant at 93.75 MHz |
| Sega Dreamcast | SH-4 | 1998 | 2.3x | SuperH | 200 MHz, hardware FPU |
| PlayStation 2 | Emotion Engine | 2000 | 2.2x | MIPS | Custom R5900, 294.912 MHz |
| GameCube | Gekko | 2001 | 2.1x | PowerPC | IBM 750CXe derivative, 485 MHz |
| Xbox | Celeron (Coppermine) | 2001 | 1.5x | x86 | 733 MHz Pentium III variant |
| Nintendo DS | ARM7 + ARM9 | 2004 | 2.3x | ARM | Dual-CPU, 33/67 MHz |
| PlayStation Portable | Allegrex | 2004 | 2.0x | MIPS | R4000-based, 333 MHz |
| Xbox 360 | Xenon | 2005 | 2.0x | PowerPC | Tri-core IBM PPE, 3.2 GHz |
| PlayStation 3 | Cell BE | 2006 | 2.2x | PowerPC | PPE + 7 SPE, legendary parallel arch |
| Wii | Broadway | 2006 | 2.0x | PowerPC | IBM 750CL, 729 MHz |
| Game Boy Advance | ARM7TDMI | 2001 | 3.0x | ARM | See Vintage ARM section |
Console Detection Patterns (case-insensitive):
emotion\s*engine|cell\s*b\.?e\.?|xenon|gekko|broadway|allegrex|vr4300Note on PS3 Cell BE: The Cell Broadband Engine is one of the most unique architectures ever produced -- 1 PPE (PowerPC Processing Element) + 7 SPE (Synergistic Processing Elements). Anyone running a miner on a PS3 with Linux deserves every bit of that 2.2x multiplier.
These architectures are so rare that successfully mining on them is practically a museum exhibit. All receive premium multipliers.
| Architecture | Years | Base | Detection Patterns | Notes |
|---|---|---|---|---|
| DEC VAX | 1977-2000 | 3.5x | VAX, vax |
"Shall we play a game?" Digital Equipment minicomputer legend |
| Inmos Transputer | 1984-1993 | 3.5x | Transputer, T414, T800, T9000 |
Parallel computing pioneer, Occam language |
| Fairchild Clipper | 1985-1988 | 3.5x | Clipper, C100, C300, C400 |
Workstation RISC, ultra-rare, Intergraph |
| NS32K | 1982-1990 | 3.5x | NS32032, NS32332, NS32532 |
National Semiconductor, the failed x86 killer |
| IBM ROMP | 1986-1990 | 3.5x | ROMP, RT PC |
First commercial RISC CPU, IBM RT PC |
| Architecture | Years | Base | Detection Patterns | Notes |
|---|---|---|---|---|
| Intel i860 | 1989-1993 | 3.0x | i860, 80860 |
"Cray on a chip" -- failed spectacular attempt |
| Intel i960 | 1988-2007 | 3.0x | i960, 80960 |
Embedded RISC, military/aerospace, I/O controllers |
| Motorola 88000 | 1988-1992 | 3.0x | 88000, MC88100, MC88110 |
Killed by the PowerPC alliance (Apple-IBM-Motorola) |
| AMD Am29000 | 1988-1995 | 3.0x | Am29000, 29000, 29K |
AMD's RISC attempt, dominated laser printers |
| DEC Alpha | 1992-2004 | 3.0x | Alpha, alpha, EV[4-7] |
Fastest CPU of its era, killed by Compaq/HP |
| HP PA-RISC | 1986-2008 | 3.0x | PA-RISC, PA8[0-9]00, hppa |
HP workstations/servers, replaced by Itanium |
| Architecture | Years | Base | Detection Patterns | Notes |
|---|---|---|---|---|
| Intel Itanium (IA-64) | 2001-2021 | 2.5x | Itanium, IA-64, ia64 |
"Itanic" -- dead architecture, extremely rare in the wild |
| IBM S/390 / z/Architecture | 1990-present | 2.5x | s390, s390x, z/Architecture |
Mainframe; z/Architecture still runs but is exotic for mining |
| IBM POWER (non-Apple) | 2001-present | 2.5x | POWER[4-9], POWER10, power8, ppc64le |
Enterprise POWER servers (our S824 gets this!) |
| Tilera TILE | 2007-2014 | 2.5x | TILE, TILEPro, TILE-Gx |
Manycore network processors, 36-100 cores |
Detection for Ultra-Rare Architectures:
Most of these will report via platform.machine() or /proc/cpuinfo:
ULTRA_RARE_MACHINES = {
'vax': ('DEC VAX', 3.5),
'alpha': ('DEC Alpha', 3.0),
'hppa': ('HP PA-RISC', 3.0),
'hppa64': ('HP PA-RISC 64', 3.0),
'ia64': ('Intel Itanium', 2.5),
's390': ('IBM S/390', 2.5),
's390x': ('IBM z/Architecture', 2.5),
'ppc64': ('IBM POWER (big-endian)', 2.5),
'ppc64le': ('IBM POWER (little-endian)', 2.5),
}The RustChain server does not blindly trust self-reported architecture claims. This section describes the server-side validation pipeline that cross-checks miner submissions before assigning antiquity multipliers.
Miners submit their platform.machine() value and CPU brand string as part of the attestation payload. However, the server treats these as claims to be verified, not facts. A miner running on a Synology NAS could trivially set device_arch: "g4" in their payload. The server catches this through multiple cross-validation checks.
The server-side detection function checks three independent evidence sources:
def _detect_exotic_arch(device: dict, signals: dict) -> tuple:
"""
Server-side exotic architecture detection.
Returns (arch_name, multiplier) or (None, None) if not exotic.
Evidence sources:
1. platform.machine() field
2. CPU brand string
3. SIMD capability evidence (presence/absence)
4. Cache topology
5. /proc/cpuinfo raw fields
"""
machine = device.get('machine', '').lower()
brand = device.get('cpu_brand', '').lower()
simd = signals.get('simd_capabilities', [])
# Check machine field against known exotic architectures
for arch_key, (arch_name, multiplier) in EXOTIC_ARCH_MAP.items():
if arch_key in machine:
return arch_name, multiplier
# Check CPU brand for exotic keywords
for pattern, (arch_name, multiplier) in EXOTIC_BRAND_PATTERNS.items():
if re.search(pattern, brand, re.IGNORECASE):
return arch_name, multiplier
# Check SIMD evidence for architecture confirmation
if 'altivec' in simd or 'vsx' in simd:
return _classify_powerpc(device, signals)
if 'vis' in simd: # Visual Instruction Set = SPARC
return _classify_sparc(device, signals)
return None, NoneThis is the critical function that distinguishes genuine vintage ARM hardware from modern aarch64 NAS/SBC spam:
def _detect_arm_evidence(device: dict, signals: dict) -> tuple:
"""
Detect ARM architecture and classify as vintage vs modern.
Returns:
('vintage_arm', multiplier) - for genuine vintage ARM hardware
('modern_arm_penalty', 0.0005) - for NAS/SBC/cloud ARM spam
(None, None) - not ARM
"""
machine = device.get('machine', '').lower()
brand = device.get('cpu_brand', '').lower()
# Not ARM at all
if machine not in ('aarch64', 'armv7l', 'armv6l', 'armv5l', 'arm'):
return None, None
# Check for vintage ARM evidence
VINTAGE_ARM_PATTERNS = [
(r'arm[236]', 'ARM2/3/6', 3.8),
(r'arm7tdmi', 'ARM7TDMI', 3.0),
(r'strongarm|sa-1[01]', 'StrongARM', 2.7),
(r'xscale|pxa2', 'XScale', 2.5),
(r'arm9[2-4]', 'ARM9', 2.3),
(r'arm11[37]', 'ARM11', 2.0),
(r'cortex-a8', 'Cortex-A8', 1.8),
(r'cortex-a9', 'Cortex-A9', 1.5),
]
for pattern, name, mult in VINTAGE_ARM_PATTERNS:
if re.search(pattern, brand, re.IGNORECASE):
return f'vintage_arm_{name}', mult
# Check for NAS/SBC/cloud evidence (PENALTY)
NAS_SBC_EVIDENCE = [
'synology', 'qnap', 'asustor', 'terramaster',
'rockchip', 'allwinner', 'amlogic',
'bcm2711', 'bcm2712', # RPi 4/5
'graviton', # AWS
'ampere', # Oracle Cloud
'cortex-a53', 'cortex-a55', 'cortex-a72', 'cortex-a76', 'cortex-a78',
]
for evidence in NAS_SBC_EVIDENCE:
if evidence in brand:
return 'modern_arm_penalty', 0.0005
# Unknown ARM claiming x86 = flagged
if machine == 'aarch64':
return 'modern_arm_penalty', 0.0005 # Default penalty for unrecognized aarch64
return None, NoneThe system carefully preserves high multipliers for genuinely vintage ARM hardware while penalizing modern ARM spam. The key distinctions:
| Scenario | Result | Multiplier |
|---|---|---|
armv6l + ARM1176JZF brand |
Vintage ARM11 | 2.0x |
armv7l + Cortex-A8 brand |
Vintage Cortex | 1.8x |
aarch64 + Cortex-A72 brand |
Modern SBC penalty | 0.0005x |
aarch64 + BCM2712 brand |
Raspberry Pi 5 penalty | 0.0005x |
aarch64 + Graviton brand |
AWS cloud penalty | 0.0005x |
aarch64 + unknown brand |
Default ARM penalty | 0.0005x |
arm + ARM7TDMI brand |
Vintage ARM7 | 3.0x |
arm + StrongARM brand |
Vintage StrongARM | 2.7x |
A critical anti-fraud check: if a miner reports platform.machine() as x86_64 but the CPU brand string is empty, unknown, or contains ARM/MIPS keywords, the attestation is flagged:
def _validate_arch_consistency(device: dict, signals: dict) -> bool:
"""
Cross-validate architecture claims.
Returns False if claims are inconsistent (potential spoofing).
"""
machine = device.get('machine', '').lower()
brand = device.get('cpu_brand', '').lower()
simd = signals.get('simd_capabilities', [])
if machine in ('x86_64', 'i686', 'i386'):
# x86 MUST have SSE evidence
if not any(s in simd for s in ['sse', 'sse2', 'avx']):
# No x86 SIMD but claims x86? Likely ARM/MIPS spoofing
return False
# Brand should contain Intel/AMD keywords
if not any(k in brand for k in ['intel', 'amd', 'genuine', 'authentic']):
if brand and brand != 'unknown':
# Has a brand but not Intel/AMD -- suspicious
return False
return TrueThe server uses SIMD instruction set evidence to confirm architecture claims:
| SIMD Capability | Confirms Architecture | Contradicts |
|---|---|---|
sse, sse2, avx |
x86/x86_64 | Any non-x86 claim |
altivec |
PowerPC (G4/G5) | x86, ARM |
vsx |
POWER7+ (POWER8/9/10) | x86, ARM, early PowerPC |
neon |
ARM (Cortex-A and later) | x86, PowerPC |
vis |
SPARC (VIS 1.0+) | Everything else |
msa |
MIPS (MIPS SIMD Architecture) | Everything else |
vec_perm |
PowerPC with AltiVec | Confirms genuine PPC |
platform.machine() |
Expected Brand Keywords | SIMD Evidence | Multiplier Range |
|---|---|---|---|
x86_64, i686 |
Intel, AMD | SSE/AVX | 1.0x - 1.5x |
ppc, ppc64 |
PowerPC, G4, G5, 7450, 970 | AltiVec | 1.8x - 2.5x |
ppc64le |
POWER8, POWER9 | VSX, vec_perm | 2.5x |
sparc, sparc64 |
UltraSPARC, SPARC | VIS | 1.7x - 2.9x |
mips, mips64 |
R-series, MIPS | MSA | 2.3x - 3.0x |
m68k |
68000-68060, ColdFire | (none) | 1.8x - 3.0x |
sh4 |
SH-4, SH7750 | (none) | 2.2x - 2.7x |
armv6l, armv5l |
ARM11, ARM9 | (none) | 2.0x - 2.5x |
armv7l |
Cortex-A8/A9 vintage | NEON | 1.5x - 1.8x |
aarch64 |
(must match vintage) | NEON | 0.0005x (penalty default) |
riscv64 |
SiFive, StarFive | (varies) | 1.4x - 1.5x |
ia64 |
Itanium | (none) | 2.5x |
s390x |
z/Architecture | (none) | 2.5x |
alpha |
Alpha, EV4-EV7 | (none) | 3.0x |
hppa |
PA-RISC, PA8x00 | (none) | 3.0x |
vax |
VAX | (none) | 3.5x |
Enterprise-class CPUs receive a +10% multiplier on top of base:
| Vendor | Server Patterns | Examples |
|---|---|---|
| Intel | Xeon |
Xeon E5-2670 v2, Xeon Gold 6248R |
| AMD | EPYC, Opteron |
EPYC 7742, Opteron 6276 |
Example: Xeon E5-1650 v2 (Ivy Bridge)
- Base: 1.1x (Ivy Bridge)
- With time decay (13 years old): ~1.076x
- Server bonus: 1.076 x 1.1 = 1.18x final
from cpu_architecture_detection import calculate_antiquity_multiplier
# Detect from brand string
brand = "Intel(R) Xeon(R) CPU E5-1650 v2 @ 3.50GHz"
info = calculate_antiquity_multiplier(brand)
print(f"Architecture: {info.architecture}")
print(f"Generation: {info.generation}")
print(f"Year: {info.microarch_year}")
print(f"Server: {info.is_server}")
print(f"Multiplier: {info.antiquity_multiplier}x")Output:
Architecture: ivy_bridge
Generation: Intel Ivy Bridge (3rd-gen Core i)
Year: 2012
Server: True
Multiplier: 1.1836x
Intel Core i-series generation detection:
i[3579]-(\d+)\d{2,3} # Capture first 1-2 digits = generationi7-2600K-> 2 -> 2nd-gen (Sandy Bridge)i9-12900K-> 12 -> 12th-gen (Alder Lake)
Intel Xeon E3/E5/E7 version detection:
E[357]-\d+\s*v([2-6]) # Capture v-numberE5-1650(no v) -> Sandy BridgeE5-1650 v2-> Ivy BridgeE5-2680 v4-> Broadwell
AMD Ryzen generation detection:
Ryzen\s*[3579]\s*(\d)\d{3} # Capture first digit = seriesRyzen 7 1700X-> 1 -> ZenRyzen 9 5950X-> 5 -> Zen 3Ryzen 9 9950X-> 9 -> Zen 5
Intel dropped the "i" prefix for 2023+ CPUs:
- Old:
Core i7-12700K - New:
Core 7 12700KorCore Ultra 9 285K
Detection: Match both patterns:
(Core\(TM\)\s*i[3579]|Core\(TM\)\s*[3579])-(\d+)Ryzen 8000 series (e.g., Ryzen 5 8645HS) are mobile Zen4, NOT Zen5:
- Pattern:
Ryzen [3579] 8\d{3}-> Zen4 (2023) - Next mobile:
Ryzen AI 300series (Zen5)
APU series numbers are ahead of CPU series:
- Ryzen 7 7840HS (APU, Zen4) != Ryzen 7 7700X (CPU, Zen4)
- Both are Zen4 despite naming confusion
| Generation | Model Pattern | Examples |
|---|---|---|
| 1st-gen | \d{4} (no suffix) |
Platinum 8180, Gold 6148 |
| 2nd-gen | \d{4}[A-Z] (letter suffix) |
Platinum 8280L, Gold 6248R |
| 3rd-gen | \d{4}[A-Z]? (mixed) |
Platinum 8380, Gold 6338 |
| 4th-gen | [89]\d{3} (8xxx/9xxx) |
Platinum 8480+, Gold 8468 |
import platform
import subprocess
def get_cpu_brand():
if platform.system() == "Darwin": # macOS
return subprocess.check_output(
["sysctl", "-n", "machdep.cpu.brand_string"]
).decode().strip()
elif platform.system() == "Linux":
with open("/proc/cpuinfo") as f:
for line in f:
if "model name" in line or "cpu model" in line:
return line.split(":")[1].strip()
elif platform.system() == "Windows":
import winreg
key = winreg.OpenKey(
winreg.HKEY_LOCAL_MACHINE,
r"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"
)
return winreg.QueryValueEx(key, "ProcessorNameString")[0]
return "Unknown"
# Use in attestation
from cpu_architecture_detection import calculate_antiquity_multiplier
cpu_info = calculate_antiquity_multiplier(get_cpu_brand())
attestation = {
"miner_id": wallet_address,
"cpu_architecture": cpu_info.architecture,
"cpu_generation": cpu_info.generation,
"cpu_year": cpu_info.microarch_year,
"is_server": cpu_info.is_server,
"antiquity_multiplier": cpu_info.antiquity_multiplier,
# ... other attestation data
}def calculate_epoch_rewards(db_path: str, total_rtc: float) -> dict:
"""
Calculate rewards with CPU antiquity multipliers
"""
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# Get all active miners with attestations
cursor.execute("""
SELECT miner_id, cpu_brand, uptime_years
FROM miner_attest_recent
WHERE ts_ok > ?
""", (time.time() - ATTESTATION_TTL,))
miners = cursor.fetchall()
total_weight = 0
miner_weights = {}
for miner_id, cpu_brand, uptime_years in miners:
# Calculate antiquity multiplier
cpu_info = calculate_antiquity_multiplier(cpu_brand, loyalty_years=uptime_years)
weight = cpu_info.antiquity_multiplier
miner_weights[miner_id] = weight
total_weight += weight
# Distribute rewards proportionally
rewards = {}
for miner_id, weight in miner_weights.items():
share = weight / total_weight
rewards[miner_id] = total_rtc * share
return rewardsRun the demo script to verify detection:
cd /home/scott/rustchain-complete
python3 cpu_architecture_detection.pyExpected Output:
================================================================================
CPU ARCHITECTURE DETECTION & ANTIQUITY MULTIPLIER DEMO
================================================================================
CPU: Intel(R) Xeon(R) CPU E5-1650 v2 @ 3.50GHz
-> Vendor: INTEL
-> Architecture: ivy_bridge
-> Generation: Intel Ivy Bridge (3rd-gen Core i)
-> Year: 2012 (Age: 13 years)
-> Server: Yes
-> Antiquity Multiplier: 1.1836x
CPU: PowerPC G4 (7450)
-> Vendor: POWERPC
-> Architecture: g4
-> Generation: PowerPC G4 (7450/7447/7455)
-> Year: 2001 (Age: 24 years)
-> Server: No
-> Antiquity Multiplier: 1.645x
CPU: AMD Ryzen 9 7950X 16-Core Processor
-> Vendor: AMD
-> Architecture: zen4
-> Generation: AMD Zen 4 (Ryzen 7000/8000 / EPYC Genoa)
-> Year: 2022 (Age: 3 years)
-> Server: No
-> Antiquity Multiplier: 1.0x
This system is based on extensive research of CPU microarchitecture timelines:
- List of Intel CPU Microarchitectures - Wikipedia
- Intel Processor Names, Numbers and Generation List
- List of Intel Xeon Processors - Wikipedia
- Intel CPU Naming Convention Guide - RenewTech
- List of AMD CPU Microarchitectures - Wikipedia
- AMD EPYC - Wikipedia
- AMD Processor Naming Guide - TechConsumerGuide
- How to Read AMD CPU Names - CyberPowerPC
- SPARC - Wikipedia
- MIPS Architecture - Wikipedia
- Motorola 68000 Series - Wikipedia
- SuperH - Wikipedia
- ARM Architecture History - Wikipedia
- RISC-V - Wikipedia
- DEC Alpha - Wikipedia
- PA-RISC - Wikipedia
- VAX - Wikipedia
- Cell (Microprocessor) - Wikipedia
- Transputer - Wikipedia
- Auto-detection of model year - Parse more granular release dates
- CPUID integration - Use CPUID instruction for more precise detection
- GPU antiquity - Extend to GPUs (vintage Radeon, GeForce)
- Z80/6502 support - 8-bit CPUs for extreme antiquity (Commodore 64, ZX Spectrum)
- FPGA detection - Xilinx/Altera/Lattice FPGAs as mining accelerators
Last Updated: 2026-03-19
Version: 2.0.0
File: /home/scott/rustchain-complete/cpu_architecture_detection.py