This repository contains the research data, simulation code, and analysis tools for the Proof of Synergy (PoSyg) consensus protocol doctoral research.
posyg-research/
├── simulations/
│ ├── posyg_simulation.py # Main Python simulation framework
│ ├── run_experiments.sh # Batch experiment runner
│ └── config/
│ ├── baseline.json # Baseline scenario configuration
│ ├── attacks.json # Attack scenario configurations
│ └── stress_test.json # Stress test parameters
├── specifications/
│ ├── PoSyg.tla # TLA+ formal specification
│ ├── PoSygMC.tla # Model checking configuration
│ └── invariants.tla # Additional invariants
├── analysis/
│ ├── posyg_analysis.ipynb # Main analysis notebook
│ ├── attack_analysis.ipynb # Attack resistance analysis
│ └── economic_analysis.ipynb # Economic model analysis
├── results/
│ ├── baseline/
│ │ ├── metrics_history.csv
│ │ ├── final_validator_states.csv
│ │ └── simulation_config.json
│ ├── cartel_attack/
│ │ └── [simulation output files]
│ ├── high_byzantine/
│ │ └── [simulation output files]
│ └── summary_statistics.csv
├── docs/
│ ├── usage_guide.md # How to run simulations
│ ├── metrics_glossary.md # Explanation of metrics
│ └── tla_guide.md # TLA+ specification guide
└── requirements.txt # Python dependencies
## Quick Start
### 1. Install Dependencies
```bash
pip install -r requirements.txt
Required packages:
- numpy>=1.21.0
- pandas>=1.3.0
- matplotlib>=3.4.0
- seaborn>=0.11.0
- networkx>=2.6
- scipy>=1.7.0
- jupyter>=1.0.0
python simulations/posyg_simulation.pyThis will run three default scenarios:
- baseline: Normal network conditions
- cartel_attack: 30% cartel coordination
- high_byzantine: 33% Byzantine validators
jupyter notebook analysis/posyg_analysis.ipynbSimulationConfig(
# Network parameters
num_validators=100, # Number of validators
initial_stake_distribution="pareto", # Stake distribution type
# Consensus parameters
block_time=6.0, # Seconds per block
epoch_length=32, # Blocks per epoch
finality_threshold=0.67, # 2/3 + 1 Byzantine threshold
# Synergy score weights
stake_weight=0.4, # Weight for stake component
activity_weight=0.4, # Weight for activity component
governance_weight=0.2, # Weight for governance component
# Attack parameters
byzantine_ratio=0.05, # Fraction of Byzantine validators
cartel_size=0.0, # Fraction in coordinated cartel
sybil_nodes=0, # Number of Sybil identities
# Simulation settings
simulation_epochs=1000, # Duration of simulation
random_seed=42 # For reproducibility
)- HONEST: Always follows protocol rules
- BYZANTINE: Actively tries to disrupt consensus
- LAZY: Minimal participation, occasional attestations
- OPPORTUNISTIC: Defects when profitable
- CARTEL_MEMBER: Coordinates with other cartel members
- ADAPTIVE: Learns and adapts behavior based on network state
Time-series data with per-epoch metrics:
| Column | Description |
|---|---|
| epoch | Current epoch number |
| height | Current blockchain height |
| active_validators | Number of active validators |
| total_stake | Sum of all active validator stakes |
| gini_coefficient | Stake distribution inequality (0-1) |
| avg_synergy_score | Mean synergy score across validators |
| finality_rate | Recent block finalization rate |
| slashing_events | Cumulative slashing count |
| governance_participation | Fraction participating in governance |
| cartel_control | Stake fraction controlled by cartel |
| byzantine_stake_ratio | Stake fraction held by Byzantine validators |
Final state of each validator:
| Column | Description |
|---|---|
| id | Validator identifier |
| final_stake | Remaining stake after simulation |
| final_synergy_score | Final synergy score (0-1000) |
| blocks_proposed | Total blocks proposed |
| blocks_attested | Total blocks attested |
| governance_votes | Governance participation count |
| slashing_count | Times slashed for violations |
| strategy | Validator behavior strategy |
| is_active | Whether validator is still active |
| reputation_mean | Average reputation over time |
| reputation_std | Reputation volatility |
- Install TLA+ Toolbox
- Open
specifications/PoSyg.tla - Create model with configuration from
PoSygMC.tla - Check properties:
- TypeInvariant: Type correctness
- SafetyInvariant: No conflicting finalized blocks
- ByzantineFaultTolerance: < 1/3 Byzantine control
- DecentralizationInvariant: No validator > 33% power
- CartelResistance: No small group majority
\* No two finalized blocks at same height
SafetyInvariant ==
\A i, j \in 1..Len(blockchain) :
(i # j /\ blockchain[i].height = blockchain[j].height) =>
~(blockchain[i].status = "finalized" /\
blockchain[j].status = "finalized")
\* Byzantine fault tolerance maintained
ByzantineFaultTolerance ==
byzantineStake < TotalStake * (1 - FinalizationThreshold)- Network health metrics
- Validator strategy performance
- Synergy score dynamics
- Attack resistance analysis
- Economic analysis
- Statistical tests
- Sybil attack scenarios
- Cartel coordination patterns
- Nothing-at-stake analysis
- Long-range attack resistance
- Token distribution evolution
- Reward optimization
- Slashing economics
- Stability fund modeling
def _make_attestation_decision(self, validator: ValidatorState, block: Block) -> bool:
if validator.strategy == AgentStrategy.YOUR_STRATEGY:
# Implement custom decision logic
return your_decision_logic(validator, block)config = SimulationConfig(
num_validators=200,
byzantine_ratio=0.2,
cartel_size=0.15,
# Custom parameters
your_parameter=value
)Add to collect_metrics() method:
metrics = {
# ... existing metrics ...
"your_metric": calculate_your_metric(),
}- Memory Error: Reduce
simulation_epochsornum_validators - Slow Simulation: Use multiprocessing or reduce network size
- Missing Results: Check file paths and permissions
- Use PyPy for 2-3x speedup
- Parallelize scenarios with multiprocessing
- Profile with cProfile for bottlenecks
If you use this code in your research, please cite:
@misc{krizhanovskyi2025posyg,
title={A Multi-Dimensional Analysis of Proof of Synergy},
author={Krizhanovskyi, Daniil},
year={2025},
institution={Independent Research}
}This research code is provided for academic use. See LICENSE file for details.
- Author: Daniil Krizhanovskyi
- Email: [email protected]
- Area of research: Distributed Systems, Blockchain Technology