This is the implementation of the paper SquirRL: Automating Attack Discovery on Blockchain Incentive Mechanisms with Deep Reinforcement Learning (https://arxiv.org/abs/1912.01798).
We test 3 different chain rules: Bitcoin(longest chain rule), Ethereum(uncle block rule) and GHOST (heaviest sub-tree rule).
In \SingleAgent
, run
python btc.py
python eth.py
python ghost.py
and you can train the RL agents and test them.
\SingleAgent\environment.py
The interactive environment for 3 different protocols. OpenAI gym type APIs.
\SingleAgent\btc.py
, \SingleAgent\eth.py
, \SingleAgent\ghost.py
The training and testing part of the RL agent for the Bitcoin/Ethereum/GHOST protocols. You can find more detailed comments of training in \SingleAgent\btc.py
.
\SingleAgent\optimal_policy.py
The implementation of Optimal Selfish Mining. We saved the policy in optimal_policy.txt
.
We reproduce the two-agent block withholding result in The Miner's Dilemma. Given the proportion of mining power two mining pools possess, there exists a unique Nash equilibirium which they fall in when deciding how much mining power to infiltrate in each other's pool. We use the SquirRL framework to find such equilibrium.
In \BlockWithholding
, run
python blockwithholding.py > result.txt
to train the RL agents and find the strategies and rewards of them.
You can specify the mining power of the two agents via argument alphas
, e.g., for two mining pools possessing 30% and 50% mining power respectively, you can run the program with --alphas 0.3 0.5
.
The policies and rewards of our training result is saved in \result\result.csv
.
Ordered by alphabet:
Charlie Hou charlieh@andrew.cmu.edu
Mingxun Zhou : zhoumingxun@pku.edu.cn
Yan Ji : yj348@cornell.edu