/ CONTRIBUTING.md
CONTRIBUTING.md
  1  # Contributing
  2  
  3  Welcome to the Fedimint project! We're thrilled that you're interested in contributing to our open-source community. Below are some resources to help you get started:
  4  
  5  > Please note that all contributions happen under the MIT license as described at the bottom of this page.
  6  
  7  ## Getting involved
  8  
  9  Here are the recommended steps for new developers:
 10  
 11  1. Start by reading our [non-technical primer](https://fedimint.org/docs/intro) and viewing the [videos and articles on the blog](https://fedimint.org/blog)
 12  2. Before writing code you will need to [set up the dev environment](docs/dev-env.md)
 13  3. [Run the dev environment](docs/tutorial.md) to ensure that everything works on your computer
 14  4. Contact @kodylow to get a good first issue matched to your skillset: you can schedule a [call with Kody here](https://cal.com/kody-low-ix8qoa/30min) or just shoot him a DM in our [Developer discord](https://chat.fedimint.org) with your background, skillset, and what you're interested in working on.
 15  5. Now take a look at our [GitHub Issues](https://github.com/fedimint/fedimint/issues) you may want to search for [good first issues](https://github.com/fedimint/fedimint/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22)
 16  6. Join our [Developer calls](https://calendar.google.com/calendar/u/0/embed?src=fedimintcalendar@gmail.com) especially the ones for new contributors
 17  
 18  > Small PRs fixing typos, TODOs, broken links are always welcome, but please discuss bigger changes on Discord or GitHub first.
 19  
 20  <!-- markdown-link-check-disable -->
 21  
 22  For commits, please use [imperative mood](https://stackoverflow.com/questions/3580013/should-i-use-past-or-present-tense-in-git-commit-messages/3580764#3580764).
 23  
 24  <!-- markdown-link-check-enable -->
 25  
 26  ## Areas of Contribution
 27  
 28  Below are some broad and general areas of contribution to get you started
 29  
 30  - [Fedimint Modules](docs/architecture.md)
 31  - [Fedimint Database System](docs/database.md)
 32  - [The Lightning Gateway](docs/gateway.md)
 33    - [Developing gateway-lnrpc-extension](docs/gateway.md#developing-gateway-lnrpc-extension)
 34    - [Developing Gateway UI](https://github.com/fedimint/ui)
 35  - [Fedimint Guardian UI](https://github.com/fedimint/ui)
 36  - [Nix Build System](docs/nix-ci.md)
 37  - [Devimint](devimint/)
 38  - [Scripts](scripts/README.md)
 39  
 40  ### New Contributors
 41  
 42  If you are new to contributing to Fedimint, please come through @kodylow as your point of contact to get a good first issue matched to your skillset. You can schedule a [call with Kody here](https://cal.com/kody-low-ix8qoa/30min) or just shoot him a DM with your background, skillset, and what you're interested in working on.
 43  
 44  **Contributing to the core Fedimint repo requires expertise with Rust and distributed systems**. There are a bunch of other projects in and around fedimint like UIs, clients, and other services that are far more approachable, so if you're new to coding/bitcoin/rust please try to start with one of those to get a feel for Fedimint before trying to contribute to the core repo. The hardest part with new contributors is finding a good issue to match your skillset! Again, please go through @kodylow so we can get a good match for you so you can get started.
 45  
 46  Once you have an issue you're working on, please post blockers or questions in the [#new-contributors channel](https://discord.gg/BGFMXSkNJW) if you're stuck on something.
 47  
 48  There is almost always a simple/fast answer to early contributor problems and we'd like to get you past those as quickly as possible to making valuable contributions.
 49  
 50  Things like dev environment issues, build errors, "what does this state machine do", "I don't understand how this contract is structured", etc. Just ask in the #new-contributors channel and someone will get back to you ASAP.
 51  
 52  If you have any questions or need assistance, don't hesitate to reach out to us on our [Developer Discord](https://chat.fedimint.org) in the [#new-contributors channel](https://discord.gg/BGFMXSkNJW). Our community is friendly and supportive, and we're here to help you succeed.
 53  
 54  Happy Hacking!
 55  
 56  
 57  # Code Review Policy
 58  
 59  * CI must pass (enforced)
 60  * 1 review is mandatory (enforced), 2 or more ideal
 61  * If you believe your change is simple, and non-controversial enough, and you want
 62    to avoid merge conflicts, or blocking work before it gets enough reviews, label it with
 63    `needs further review` label and Merge it.
 64  
 65  Feel free to post a link to a PR on #code-review to ask for more code reviews.
 66  
 67  The goal of the policy is to strike a balance between good review coverage
 68  and fast iteration time in a globally distributed team consisting of mostly
 69  volunteers with varying levels of availability.
 70  
 71  1 mandatory review is meant to enforce basic sanity and security cross-checking.
 72  
 73  2 ideal reviews is a target we would like to maintain at the current level of project
 74  maturity.
 75  
 76  PRs labeled with `needs further review` label are meant to enable flexible
 77  "code review debt". The label can be removed after further reviews are done.
 78  Regular contributors are encouraged to review PRs even after they were merged.
 79  Furthermore, PRs with `needs further review` will be reviewed during weekly
 80  "Code Review" meetings.
 81  
 82  
 83  ## Developer Certificate of Origin
 84  
 85  ```
 86  Developer Certificate of Origin
 87  Version 1.1
 88  
 89  Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
 90  
 91  Everyone is permitted to copy and distribute verbatim copies of this
 92  license document, but changing it is not allowed.
 93  
 94  
 95  Developer's Certificate of Origin 1.1
 96  
 97  By making a contribution to this project, I certify that:
 98  
 99  (a) The contribution was created in whole or in part by me and I
100      have the right to submit it under the open source license
101      indicated in the file; or
102  
103  (b) The contribution is based upon previous work that, to the best
104      of my knowledge, is covered under an appropriate open source
105      license and I have the right under that license to submit that
106      work with modifications, whether created in whole or in part
107      by me, under the same open source license (unless I am
108      permitted to submit under a different license), as indicated
109      in the file; or
110  
111  (c) The contribution was provided directly to me by some other
112      person who certified (a), (b) or (c) and I have not modified
113      it.
114  
115  (d) I understand and agree that this project and the contribution
116      are public and that a record of the contribution (including all
117      personal information I submit with it, including my sign-off) is
118      maintained indefinitely and may be redistributed consistent with
119      this project or the open source license(s) involved.
120  ```