This is the reference implementation for the VDF contest. It includes our source code, as well as our install and run scripts.
The install.sh script is run by the server to install any dependencies, and/or compile the code. For example, for ours we are installing the GMP library and the FLINT library.
The run.sh file is what is executed to run the VDF. It takes two arguments:
- A discriminant in hex
- The number of iterations, in decimal
The script should output the result of the VDF (but not the proof), encoded as a, b of the final classgroup element.
This implementation is written in C/C++ and is based on the results of the first round of the VDF competition. During that round we were made aware of a more efficient algorithm for squaring binary quadratic forms, called NUDUPL. Akashnil also came up with a more efficient way of reducing the forms by using integer approximation. We use the GMP and FLINT libraries for their big number arithmetic and other functions, such as GCD.
Also of particular note from the last round is Sundersoft's entry which used assembly encoding and SIMD instructions. It also contains written thoughts on how to improve the implementation further.
We will be judging the SIMD/GPU track entries on a Xeon W-2123 CPU, which supports AVX-512 instructions, and a RTX 2080 GPU which supports the Cuda API.
The non-SIMD/non-GPU track entries will be judged on a Pentium G4500 system with no AVX support and no external GPU.
Every submission will be ran on a fresh install of Ubuntu Linux with super user privileges.
We have split the competition into two tracks:
- SIMD and GPU optimizations allowed
- SIMD and GPU optimizations not allowed
This is to help us separate the different kinds of optimizations - however if somebody from track 2 is confident about their entry they can submit their code to both as there is no necessity for a track 1 submission to use those techniques.
The prize will be $50,000 for the winner of each track.
An Entry may be submitted by a team of individuals working collaboratively (a “Team Contestant”), in which case, each individual member of the team must complete the Entry Form and all members of the Team Contestant must designate the same point of contact to receive official Challenge correspondence.
Have any questions? Join Chia's public Keybase group