Bringing Bitcoin to all means also bringing Bitcoin development to all. NYDIG wants to incentivize Bitcoin development and expose new developers to the ecosystem. NYDIG is paying bounties for selected tasks in Bitcoin codebases. These are great starting points for those unaccustomed to Bitcoin development, as well as important but often under-prioritized by the existing community of developers.
The process for working on Bounties starts with a selection by a developer of a bounty they believe they’ll realistically complete. To provide a strict ordering and fairness, developers claim bounties by checking out and submitting a pull request on the Bitcoin Task Bounty program GitHub page. The developer is then free to work on the bounty. When the bounty is believed by the developer to be completed, the developer will issue a pull request into the relevant Bitcoin repository as detailed in the bounty itself. This is the Submission portion of the process and does not mean the bounty is completed nor does it mean the bounty will be accepted and thus paid. To complete the bounty, the developer must respond to code review and build consensus via the Bitcoin community that the task is completed. Only if the task is merged by the community is the bounty completed and thus Accepted in which case the bounty will be paid by NYDIG (provided all conditions are met as detailed in the Payment section below).
The Bitcoin Task Bounty program’s list of bounties are maintained on this public GitHub repository. To check out a bounty is to claim exclusive right to work on the bounty until either (a) Acceptance or (b) time on the bounty has elapsed in which case the bounty is released and others may check it out. Each bounty has a corresponding Markdown file. Within the bounty’s Markdown file there is a Status field. To check out a bounty means to check out the repository, modify the corresponding bounty’s Markdown file Status field to ‘Checked Out’, commit and submit a Pull Request. If the pull request is merged by the repository maintainers, then the bounty is checked out and will remain so until either (a) Acceptance or (b) time on the bounty has elapsed. There is a process to renew a check-out for a developer making meaningful progress on the bounty (see Renewal).
Once a developer has successfully checked out a bounty, it is up to them to manage and make progress on the work of completing the task.
If a developer has general questions about the task, the relevant subject matter, or fundamental Bitcoin development questions, they should feel free to contact firstname.lastname@example.org for assistance. Otherwise, the developer should feel free to continue discussion on the original issue if they are confident that their question or clarification is within scope and won’t be construed as noise on the issue.
For example, “what is fee bumping?” is a question that would be too fundamental and thus out of scope for commenting on this issue, and such a question should be routed to the email address above.
To mitigate scenarios where a developer checks out but then abandons a bounty, each bounty will be moved back to Available from Checked Out if meaningful progress is not demonstrated after the estimated time has elapsed. Once time on the bounty has elapsed, the NYDIG maintainers, in their sole discretion, will determine whether a bounty has made meaningful progress. If a developer has checked out a bounty and has not reached Acceptance but has Submitted and demonstrated engagement via the code review process before the time has elapsed they have a strong case for renewal of the bounty. To proactively renew a bounty, follow the process to Check Out the bounty in question but update the Status field, instead, to ‘Renewal’. The NYDIG maintainers will review the request and extend the elapsed time or reject the request with explanation.
After completing work on the bounty locally and performing adequate testing, the next step is to ready the task for submission to the relevant Bitcoin repository. Make sure to review the code guidelines of the repository as detailed in the bounty and ensure the code complies with the posted guidelines. Additionally, review the Definition of Done in the bounty details to ensure all necessary aspects of the bounty have been completed. Then submit a pull request to the repository which will solicit review of the change. Be sure to be responsive to comments and questions from repository reviewers and work through the changes requested. The goal of this step is to get the pull request merged into the repository. Ultimately, the decision of whether a pull request is merged into the repository is made by the repository reviewers and not NYDIG. NYDIG is not responsible for payment where pull requests are not merged into a repository, even if all other requirements of the applicable bounty may have been met. NYDIG is also not responsible in instances where a pull request is completed and merged into the repository by an individual unrelated to the Bitcoin Task Bounty program, regardless of the amount of work already completed by the developer.
Some good advice on creating and managing a Bitcoin pull request can be found here and here.
After getting the changes merged into the relevant repository, review again the Definition of Done in the bounty details to ensure all necessary aspects of the bounty have been completed as some steps may depend upon the completion of the Submission step. Then the final step is to mark the bounty completed. To do this, follow a similar procedure to checking out the bounty. Instead of marking the Status field ‘Checked Out’ mark it ‘Completed’ and then also put the git commit SHA of the post merged pull request into the ‘Commit’ field. The NYDIG maintainers will review this and, in their sole discretion, acknowledge acceptance by merging this pull request.
The developer will be paid the bounty following acceptance as described above. NYDIG will communicate with the developer via GitHub to set-up an off-GitHub communication channel. Within this channel, details will need to be captured regarding payment preference (either USD or equivalent BTC) as well as necessary information so that NYDIG can perform proper AML and Sanctions checks as required by law. The appropriate due diligence standards will be determined by NYDIG’s AMLCO, and the NYDIG maintainers may, in their sole discretion, refuse payment if a developer fails to meet such standards. NYDIG will make a single payment to the individual GitHub user whose submission was accepted by the NYDIG maintainers. NYDIG is not responsible for allocating or splitting payments between multiple developers who may have contributed to the accepted submission and accepts no liability for any payment disputes which may arise.
If the payment of the bounty is requested in BTC, the amount of BTC will be calculated by taking the price of BTC at the time of Acceptance. The price of BTC will be calculated using the method NYDIG uses for its own clients.
Each bounty includes an ‘Estimated Effort’ field. This is one of ‘Days’, ‘Weeks’ or ‘Months’. This is used to help calculate the bounty payment (i.e., scope of effort) as well as determine the maximum elapsed time before the bounty is moved from ‘Checked Out’ back to ‘Available’. In the case of ‘Days’, this equates to up to 6 full calendar days of effort. In the case of ‘Weeks’, this equates to up to 3 full calendar weeks of effort. In the case of ‘Months’, this equates to up to 3 full calendar months of effort.
Note that this estimation does not include the time required for all post-coding processes like waiting for PR review and addressing reviewer feedback. The estimation is a rough best-effort and may vary considerably based on skill-set and experience. Bounty payment amounts are final, and will not be modified based on actual invested effort.