< Return to the Challenge Details.
Eligibility
- This Challenge is open to individuals who can speak, read and understand English (or “Teams” comprised of individuals, as listed below), who are the age of majority, and are otherwise qualified in their country of residence to compete (“Contestants”). An individual is a natural person who is solely responsible for the creation of the Challenge entry.
- Team submissions are permitted. Teams must designate one person (“Team Representative”) to represent the team in entering Team submissions. Any prize awarded to a Team shall be presented to the Team Representative.
- All Contestants must have a GitHub Account as a condition of eligibility.
- Employees, officers, directors, agents, representatives of the Zcash Company or Least Authority (“Challenge Entities”), the legal, promotion and advertising agencies of any aforementioned entity, or any person or entity directly connected with the production or administration of the Challenge, and each parent company, affiliate, subsidiary, agent and representative of any aforementioned entity are not eligible.
Submission Process
By participating, Contestants agree to be bound by the Official Rules on the Challenge website and the decisions of the judges and/or Sponsor, which are binding and final on matters relating to this Challenge.
Your entry on the application form is your submission to the Challenge (”Submission”). Only Submissions made by this form, online, will be considered by the judges. There is no limit to the number of Submissions a Contestant can make, but each Submission must be made on a separate application form.
To enter, follow all steps described below.
1) First, Contestants must create a Submission following the guidelines on this website.
2) Contestants must post their Submissions to a public repository with a GitHub account for which the individual entering is the contact person. The Submission must include a licensing statement making the Submission available under the MIT license. As an exception, Submissions under other OSI-approved licenses may also be accepted when they are built upon third-party components requiring those licenses.
3) After the Submissions have been publicly posted, Contestants must complete the online Challenge application form and submit by the end of the Challenge Submission Period. No other methods of delivery will be accepted. All contact information provided must be current, accurate, and valid.
4) Sponsor will start publishing Submissions on this website on October 14, 2016. You have the right, but not the obligation, to post Submissions early in the Contest Submission Period to potentially receive appropriate feedback from Judges (as defined below). If you choose to post your Submissions early, the judges will look at this favorably, as noted in the judging criteria.
Submission Guidelines
By uploading your Submission, you agree that your Submission conforms to the Submission Guidelines (as defined below), is otherwise qualified, and that Sponsor, in its sole discretion, may remove your Submission and disqualify you from the Challenge if it believes your Submission fails to conform to these Guidelines.
- Submissions may be modified until the end of the Challenge Submission Period by making commits to their GitHub repository designated in the Submission.
- Submissions will not be finally judged until after the Challenge Submission Period is complete.
- Any changes to the Submission after the Challenge Submission Period will not be considered for prize purposes, except as part of the “Further Potential” judging criterion.
- Submissions may contain code from other Contestants’ published Submissions, provided that proper acknowledgments are included in the Submission.
- Submissions must be or must include an Equihash solver. Full Zcash miner Submissions are also acceptable, provided that their Equihash implementation can easily be separated and meets the Submission Guidelines.
- The CPU code should be in plain C99, optionally with use of intrinsics, inline or standalone assembly, pthreads or/and OpenMP.
- The GPU code, if any, should be in OpenCL and/or CUDA (but we’ll favor OpenCL).
- The Equihash solver portion must build and run on Linux/x86_64, and in particular on recent Ubuntu and on CentOS 7 (systems where we test zcashd).
- At the minimum, the Equihash solver must support Zcash’s current Equihash parameters, which are n=200, k=9 (and preferably other parameters as well, especially n=144, k=5).
API
Unless a given Submission can justify its more efficient API (e.g., with multiple nonces per solver invocation in order to possibly maximize hardware utilization), our preferred C API for the Equihash solver is as follows:
int SolverFunction(const unsigned char* input,
bool (*validBlock)(void*, const unsigned char*),
void* validBlockData,
bool (*cancelled)(void*),
void* cancelledData,
int numThreads,
int n, int k);
- “input” is 140 bytes (block header up to end of the nonce, using Internal Byte Order)
- “validBlockData” and “cancelledData” are passed unchanged as the first argument to their respective callbacks
- Second argument to “validBlock” is the solution in the following minimal representation:
- For n = 200, k = 9: 512 21-bit big-endian indices concatenated at the bit level, (so the first 9 bytes are aaaaaaaa aaaaaaaa aaaaabbb bbbbbbbb bbbbbbbb bbcccccc cccccccc cccccccd dddddddd).
- For n = 144, k = 5: 32 25-bit big-endian indices concatenated at the bit level, (so the first 9 bytes are aaaaaaaa aaaaaaaa aaaaaaaa abbbbbbb bbbbbbbb bbbbbbbb bbcccccc cccccccc cccccccc).
- numThreads is the number of (host) CPU threads, and may (or may not) be ignored by implementations that fully off-load the computation to GPUs
- “n” and “k” are the Equihash parameters
- The return value is the number of solutions found or -1 on error (including on unsupported “n” and “k”)
The optional preferred CLI API for the Equihash solver is as follows:
./solver -i <input> -t <numThreads> -n <n> -k <k>
- “input” is the block header up to the end of the nonce, in hex (using RPC Byte Order, ie. equivalent to taking the first 280 characters of the block header hex output)
- “n” and “k” are the Equihash parameters
- Solutions are printed to stdout in the minimal representation above, in hex (ie. equivalent to taking the last 2688 characters of the block header hex output for n = 200, k = 9, or the last 200 characters for n = 144, k = 5)
- Other messages, such as any debugging or/and error messages, are printed to stderr
- The exit code is 0 on success, non-zero on failure (including on unsupported “n” and “k”)
Test Vectors
Zcash Equihash test vectors for n=200, k=9 and n=144, k=5 are currently available as part of this GitHub pull request:
github.com/zcash/zcash/pull/1487/commits
Prizes
The Zcash Company is sponsoring a prize fund, in total of $30,000 for the winner(s) of the challenge. Note that the winning CPU entry will receive a $10,000 prize and the winning GPU entry will receive a $10,000 prize and the other $10,000 of prizes will be distributed to the Runners Up.
Selected Contestants and Runners Up will be required to respond (as directed) to the phone and/or e-mail notification within seventy-two (72) hours of attempted notification (“Notification”). Selected Contestants and Runners Up may be sent a declaration of eligibility / liability / publicity release (“Release”). Unless restricted by law, Selected Contestant and Runners Up will be required to complete and return the Release within seventy-two (72) hours of the date notice is sent. If a Selected Contestant and/or Runner Up: (i) cannot be contacted; (ii) does not respond in a timely manner; or (iii) fails to return the Release as provided herein, such Contestant forfeits all rights to receive a prize, and an alternate Contestant may be selected (up to three attempts). Assumed notification by caller ID and any subsequent returned calls do not constitute a winner. Selected Contestant and Runners Up selection subject to verification, including verification of each Contestant’s eligibility.
Acceptance of any prize shall constitute and signify each Contestant’s agreement and consent that Sponsor may use the Contestant’s name, city, state, likeness, Submission and/or prize information in connection with the Challenge for promotional, advertising, or other purposes, worldwide, in any and all media now known or hereafter devised, including the Internet, without limitation and without further payment, notification, permission or other consideration, except where prohibited by law.
The prizes may be a taxable event for Selected Contestants and Runners Up. For all prizes, all federal, state and local taxes and other expenses in connection with the prize are the sole responsibility of the Selected Contestant and Runners Up. If Selected Contestant is not able or willing to accept the Grand Prize or any portion thereof for any reason, Grand Prize may be forfeited and may not be awarded.
Zcash may, at its sole discretion, provide additional cash and other incentives after the close of the Challenge and pursuant to prizes being awarded to give Winners and other Contestants incentives to complete or update their original Challenge Submission.
The Small Print
There are some more legal details on our Small Print page.