-
Notifications
You must be signed in to change notification settings - Fork 1
Plot Format
Version: 1.0.0 Last Updated: 2025-10-13
Wiki Navigation: Plotter Guide | Miner Guide | Plot Format (you are here) | Technical Details
This document describes the PoCX plot format, an enhanced version of the POC2 format with improved security, SIMD optimizations, and scalable proof-of-work.
PoCX plot files contain pre-computed Shabal256 hash values organized for efficient mining operations. Following the PoC tradition since POC1, all metadata is embedded in the filename - there is no file header.
-
Standard:
.pocx(completed plots) -
In Progress:
.tmp(during plotting, renamed to.pocxwhen complete)
Two Major Vulnerabilities (Time-Memory Tradeoffs):
-
PoW Distribution Flaw
- Non-uniform distribution of proof-of-work across scoops
- Low scoop numbers could be calculated on-the-fly
- Impact: Reduced storage requirements for attackers
-
Helix Compression (50% Time-Memory Tradeoff)
- Exploited mathematical properties to achieve 50% storage reduction
- Impact: Attackers could mine with half the required storage
Layout Optimization: Basic sequential scoop layout for HDD efficiency
- ✅ Fixed PoW distribution flaw
- ❌ Helix vulnerability remained unpatched
- Layout: Maintained sequential scoop optimization
- ✅ Fixed PoW distribution (inherited from POC2)
- ✅ Patched Helix vulnerability (unique to PoCX)
- ✅ Enhanced SIMD/GPU layout optimized for parallel processing and memory coalescing
- ✅ Scalable proof-of-work prevents time–memory trade-offs as computation power grows (PoW is performed only when creating or upgrading plotfiles)
All plot metadata is encoded in the filename using this exact format:
{ACCOUNT_PAYLOAD}_{SEED}_{WARPS}_{SCALING}.pocx
-
ACCOUNT_PAYLOAD (40 hex characters)
- Raw 20-byte account payload as uppercase hex
- Network-independent (no network ID or checksum)
- Example:
DEADBEEFCAFEBABE1337C0DEBADC0FFEE15DEAD
-
SEED (64 hex characters)
- 32-byte seed value as lowercase hex
- New in PoCX: Random 32-byte seed in filename replaces consecutive nonce numbering — preventing plot overlaps
- Example:
c0ffeebeefcafebabedeadbeef1337c0de42424242feedfacecafed00dabad1dea
-
WARPS (decimal number)
- NEW size unit in PoCX: Replaces nonce-based sizing from POC1/POC2
- Anti-Helix design: Each warp = exactly 4,096 nonces (partition size required for helix-resistant transformation)
- Size: 1 warp = 1,073,741,824 bytes = 1 GiB (very comprehensible unit)
- Example:
1024(1 TiB plot = 1024 warps)
-
SCALING (X-prefixed decimal)
- Scaling level as
X{level} - Higher values = more proof-of-work required
- Example:
X4(2^4 = 16× POC2 difficulty)
- Scaling level as
DEADBEEFCAFEBABE1337C0DEBADC0FFEE15DEAD_c0ffeebeefcafebabedeadbeef1337c0de42424242feedfacecafed00dabad1dea_1024_X4.pocx
FEEDFACEDEADC0DE123456789ABCDEF012345678_b00b1e5feedc0debabeface5dea1deadc0de1337c0ffeebabeface5bad1dea5_2048_X1.pocx
Plot File (NO HEADER)
├── Scoop 0
│ ├── Warp 0 (All nonces for this scoop/warp)
│ ├── Warp 1
│ └── ...
├── Scoop 1
│ ├── Warp 0
│ ├── Warp 1
│ └── ...
└── Scoop 4095
├── Warp 0
└── ...
| Constant | Size | Description |
|---|---|---|
| HASH_SIZE | 32 B | Single Shabal256 hash output |
| SCOOP_SIZE | 64 B (2 × HASH_SIZE) | Hash pair read in a mining round |
| NUM_SCOOPS | 4,096 (2¹²) | Scoops per nonce; one selected per round |
| NONCE_SIZE | 262,144 B (256 KiB) | All scoops of a nonce (PoC1/PoC2 smallest unit) |
| WARP_SIZE | 1,073,741,824 B (1 GiB) | Smallest unit in PoCX |
PoCX implements a SIMD-aware nonce access pattern that enables vectorized processing of multiple nonces simultaneously. It builds on concepts from POC2×16 optimization research to maximize memory throughput and SIMD efficiency.
Sequential storage of nonces:
[Nonce 0: Scoop Data] [Nonce 1: Scoop Data] [Nonce 2: Scoop Data] ...
SIMD inefficiency: Each SIMD lane needs the same word across nonces:
Word 0 from Nonce 0 -> offset 0
Word 0 from Nonce 1 -> offset 512
Word 0 from Nonce 2 -> offset 1024
...
Scatter-gather access reduces throughput.
PoCX stores word positions across 16 nonces contiguously:
Cache Line (64 bytes):
Word0_N0 Word0_N1 Word0_N2 ... Word0_N15
Word1_N0 Word1_N1 Word1_N2 ... Word1_N15
...
ASCII Diagram
Traditional layout:
Nonce0: [W0][W1][W2][W3]...
Nonce1: [W0][W1][W2][W3]...
Nonce2: [W0][W1][W2][W3]...
PoCX layout:
Word0: [N0][N1][N2][N3]...[N15]
Word1: [N0][N1][N2][N3]...[N15]
Word2: [N0][N1][N2][N3]...[N15]
- One cache line supplies all SIMD lanes.
- Eliminates scatter-gather operations.
- Reduces cache misses.
- Fully sequential memory access for vectorized computation.
- GPUs also gain from 16-nonce alignment, maximizing cache efficiency.
| SIMD | Vector Width* | Nonces | Processing Cycles per Cache Line |
|---|---|---|---|
| SSE2/AVX | 128-bit | 4 | 4 cycles |
| AVX2 | 256-bit | 8 | 2 cycles |
| AVX512 | 512-bit | 16 | 1 cycle |
* For integer operations
- X0: POC2 baseline (1× POC2, theoretical)
- X1: PoCX baseline (2× POC2)
- X2: 4× POC2
- X3: 8× POC2
- …
- Xn: Difficulty = 2^n relative to POC2 format
- Adjustable PoW difficulty: Increases computational requirements to keep up with faster hardware
- Format longevity: Enables flexible scaling of mining difficulty over time
When the network increases the PoW (Proof of Work) scale by 1, existing plots require an upgrade to maintain the same effective plot size. Essentially, you now need twice the PoW in your plot files to achieve the same contribution to your account.
The good news is that the PoW you have already completed when creating your plot files is not lost—you simply need to add additional PoW to the existing files. No need to replot.
Alternatively, you may continue using your current plots without upgrading, but note that they will now only contribute 50% of their previous effective size toward your account. Your mining software can scale a plotfile on-the-fly.
| Feature | POC1 | POC2 | PoCX |
|---|---|---|---|
| PoW Distribution | ❌ Flawed | ✅ Fixed | ✅ Fixed |
| Helix Resistance | ❌ Vulnerable | ❌ Vulnerable | ✅ Fixed |
| SIMD Optimization | ❌ None | ❌ None | ✅ Advanced |
| GPU Optimization | ❌ None | ❌ None | ✅ Optimized |
| Scalable Proof-of-Work | ❌ None | ❌ None | ✅ Yes |
| Seed Support | ❌ None | ❌ None | ✅ Yes |
The PoCX format represents the current state-of-the-art in Proof-of-Capacity plot formats, addressing all known vulnerabilities while providing significant performance improvements for modern hardware.
- POC1/POC2 Background: Burstcoin Mining Overview - Comprehensive guide to traditional Proof-of-Capacity mining formats
- POC2×16 Research: CIP Announcement: POC2×16 - A new optimized plot format - Original SIMD optimization research that inspired PoCX
- Shabal Hash Algorithm: The Saphir Project: Shabal, a Submission to NIST's Cryptographic Hash Algorithm Competition - Technical specification of the Shabal256 algorithm used in PoC mining
- Plotter Guide - How to create PoCX plot files
- Miner Guide - How to mine using plot files
- GitHub Repository - Source code and issues
- Proof of Capacity Consortium - Organization homepage
Document Version: 1.0.0 Last Updated: 2025-10-13 Maintained by: Proof of Capacity Consortium