interBTC is an open-source software project, providing a 1:1 Bitcoin-backed asset - fully collateralized, interoperable, and censorship-resistant.
When defining the specification use RFC 2119 language.
A specification file MUST have the following outline. A good example is the issue specification.
Title
=====
Overview
~~~~~~~~
Abstract of the module.
Step-by-step // Recommended
------------
A step-by-step of the implemented protocol.
Security // Optional
--------
Security-specific considerations.
Integrations with other modules // Optional
-------------------------------
Integration-specific considerations.
Data Model
~~~~~~~~~~
Constants
---------
.. _title_constant_const_a
ConstA
......
Scalars
-------
.. _title_scalar_scalar_a:
ScalarA
.......
Functions
~~~~~~~~~
.. _title_function_func_a:
func_a
------
Events
~~~~~~
.. _title_event_event_a:
EventA
------
Since the specification is implemented in Rust, we adopt Rust RFC 430 naming conventions. In particular:
Item | Convention | Example |
---|---|---|
Module title | text | Vault Nomination |
Constants | SCREAMING_SNAKE_CASE |
TARGET_TIMESPAN |
Types | UpperCamelCase |
RawBlockHeader |
Scalars, Map, Structs | UpperCamelCase |
PointHistory |
Functions | snake_case |
request_issue |
References | snake_case |
escrow_function_create_lock |
There are a few basic ground-rules for contributors (including the maintainer(s) of the project):
- Master must have the latest changes and its history must never be re-written.
- Non-master branches must be prefixed with the type of ongoing work.
- All modifications must be made in a pull-request to solicit feedback from other contributors.
- All commits must be signed, have a clear commit message to better track changes, and must follow the conventional commit standard.
- All tags must follow semantic versioning.
We use Github Flow, so all code changes should happen through Pull Requests.
We use GitHub issues to track feature requests and bugs.
Please provide as much detail as possible, see the GitHub templates if you are unsure.
Declaring formal releases remains the prerogative of the project maintainer(s).
By contributing, you agree that your contributions will be licensed under its Apache License 2.0.