This page contains source code for experimental results in the following paper:
[1] Yucheng Sun, Haifeng Yu, and Ruomu Hou. 2025. Committee Selection with Non-Proportional Weights. In CCS.The source code is available here. The remainder of this page provides step-by-step instructions on how to reproduce all our experimental results.
All input data (stake distributions) that we use are stored in the subdirectory ./data/.
The source code to regenerate results in Figure 2, 3, and 5 in [1] is in the subdirectory ./figure235/.
For Figure 2, one can obtain the error of the 2 example committee selection schemes \(\mathsf{Prop}\) and \(\mathsf{NProp}\) by running:
python3 f235.py two_scheme
For Figure 3, one can obtain the error of TPL schemes by running
python3 f235.py tpl
For Figure 5, one can obtain results on how the error of TPL schemes changes with \(\beta\), by running
python3 f235.py beta
The source code for the results presented in Figure 6 and 7 in [1] is in the subdirectory ./figure67/.
For Figure 6, one can generate the error of our TPL scheme under different stake distributions (with \(f=\frac{1}{5}\) and \(t=\frac{1}{3}\) by running
javac *.java
java Algorithm1 figure6
For Figure 7, one can generate the error of our TPL scheme under Ethereum stake distribution (with various \(f\) and \(t\) values) by running
javac *.java
java Algorithm1 figure7
After Algorithm1 finishes, one can see its output in the output directory with the following example format:
200 3.526483e-38 3.732795e-14 0.001004 0.001320 120 148 0.500122 0.597315 0.564538
This means with committee size \(m=200\), the error of the TPL scheme that we found is \(3.526483\cdot 10^{-38}\). The internal parameters are \(h=0.001004\), \(k=120\), and \(\beta=0.500122\). In this example, the stake distribution \(\mathbb{S}\) used is Ethereum, and \(f=\frac{1}{5}\), \(t=1/3\), under public randomness.
In [1], we say "Besides the Ethereum distribution, using the stake distributions of the 5 other cryptocurrencies, we have also similarly experimented with various \(f\) and \(t\) values. The findings there are similar, and due to space constraints, we do not separately plot those.". To generate these results, one can run
javac *.java
java Algorithm1 other_settings