|
| 1 | +Contributing to Rust-Lightning |
| 2 | +============================== |
| 3 | + |
| 4 | +The Rust-Lightning project operates an open contributor model where anyone is |
| 5 | +welcome to contribute towards development in the form of peer review, documentation, |
| 6 | +testing and patches. |
| 7 | + |
| 8 | +Anyone is invited to contribute without regard to technical experience, "expertise", OSS |
| 9 | +experience, age, or other concern. Though developing cryptocurrencies demand a |
| 10 | +high-level of rigor, adversial thinking, thorough testing and risk-minimization. |
| 11 | +Any bug may cost users real money. That said we're deeply welcoming people contributing |
| 12 | +for the first time to an open source project or pick up Rust while contributing. Don't be shy, |
| 13 | +you'll learn. |
| 14 | + |
| 15 | +Communications Channels |
| 16 | +----------------------- |
| 17 | + |
| 18 | +Communication about Rust-Lightning happens primarily on #ldk-dev on the LDK slack |
| 19 | +or #rust-bitcoin on IRC Freenode. |
| 20 | + |
| 21 | +Discussion about code base improvements happens in GitHub issues and on pull |
| 22 | +requests. |
| 23 | + |
| 24 | +Contribution Workflow |
| 25 | +-------------------- |
| 26 | + |
| 27 | +The codebase is maintained using the "contributor workflow" where everyone |
| 28 | +without exception contributes patch proposals using "pull requests". This |
| 29 | +facilitates social contribution, easy testing and peer review. |
| 30 | + |
| 31 | +To contribute a patch, the worflow is a as follows: |
| 32 | + |
| 33 | + 1. Fork Repository |
| 34 | + 2. Create topic branch |
| 35 | + 3. Commit patches |
| 36 | + |
| 37 | + |
| 38 | +In general commits should be atomic and diffs should be easy to read. |
| 39 | +For this reason do not mix any formatting fixes or code moves with |
| 40 | +actual code changes. Further, each commit, individually, should compile |
| 41 | +and pass tests, in order to ensure git bisect and other automated tools |
| 42 | +function properly. |
| 43 | + |
| 44 | +When adding a new feature, like implementing a BOLT spec object, thought |
| 45 | +must be given to the long term technical debt. Every new features should |
| 46 | +be covered by functional tests. |
| 47 | + |
| 48 | +When refactoring, structure your PR to make it easy to review and don't |
| 49 | +hesitant to split in multiple small, focused PRs. |
| 50 | + |
| 51 | +The Minimal Supported Rust Version is 1.22.0 (enforced by our Travis). |
| 52 | + |
| 53 | +Commit should expose both issues fixed and solutions rational. |
| 54 | +these [guidelines](https://chris.beams.io/posts/git-commit/) should be kept in mind. |
| 55 | + |
| 56 | +Peer review |
| 57 | +----------- |
| 58 | + |
| 59 | +Anyone may participate in peer review which is expressed by comments in the pull |
| 60 | +request. Typically reviewers will review the code for obvious errors, as well as |
| 61 | +test out the patch set and opine on the technical merits of the patch. PR should |
| 62 | +be reviewed first on the conceptual level before focusing on code style or grammar |
| 63 | +fixes. |
| 64 | + |
| 65 | +Coding Conventions |
| 66 | +------------ |
| 67 | + |
| 68 | +Use tabs. If you want to align lines, use spaces. Any desired alignment should |
| 69 | +display fine at any tab-length display setting. |
| 70 | + |
| 71 | +Security |
| 72 | +-------- |
| 73 | + |
| 74 | +Security is the primary focus of Rust-Lightning, disclosure of security vulnerabilites |
| 75 | +helps prevent user loss of funds. If you believe vulnerability may effect other Lightning |
| 76 | +implementations please inform them. |
| 77 | + |
| 78 | +Note that Rust-Lightning is currently considered "pre-production" during this time, there |
| 79 | +is no special handling of security issues. Please simpy open an issue on Github. |
| 80 | + |
| 81 | +Testing |
| 82 | +------- |
| 83 | + |
| 84 | +Deeply tied with the security aspect, Rust-Lightning developers take testing |
| 85 | +very seriously. Due to the modular nature of the project writing new functional |
| 86 | +tests is easy and good test coverage of the codebase is an important goal. Refactoring |
| 87 | +the project to enable fine-grained unit testing is also an ongoing work. |
| 88 | + |
| 89 | +Fuzzing is heavily-encouraged, you will find all related fuzzing stuff under `fuzz/` |
| 90 | + |
| 91 | +Mutation testing is work-in-progess, any contribution there would be warmly welcomed. |
| 92 | + |
| 93 | +Going further |
| 94 | +------------- |
| 95 | + |
| 96 | +You may be interested by Jon Atack guide on [How to review Bitcoin Core PRs](https://github.com/jonatack/bitcoin-development/blob/master/how-to-review-bitcoin-core-prs.md) |
| 97 | +and [How to make Bitcoin Core PRs](https://github.com/jonatack/bitcoin-development/blob/master/how-to-make-bitcoin-core-prs.md). |
| 98 | +Modulo projects context and diffference of maturity there is a lot to stick to. |
| 99 | + |
| 100 | +Overall, have fun :) |
0 commit comments