Interested in contributing? That's awesome! Here are some guidelines to get started quickly and easily:
If you're about to raise an issue because you think you've found a problem with FIO, or you'd like to make a request for a new feature in the codebase, or any other reason… please read this first.
The GitHub issue tracker is the preferred channel for bug reports, feature requests, and submitting pull requests, but please respect the following restrictions:
-
Please search for existing issues. Help us keep duplicate issues to a minimum by checking to see if someone has already reported your problem or requested your idea.
-
Please be civil. Keep the discussion on topic and respect the opinions of others. See also our Contributor Code of Conduct.
A bug is a demonstrable problem that is caused by the code in the repository. Good bug reports are extremely helpful - thank you!
Guidelines for bug reports:
-
Use the GitHub issue search — check if the issue has already been reported.
-
Check if the issue has been fixed — look for closed issues in the current milestone or try to reproduce it using the latest
develop
branch.
A good bug report shouldn't leave others needing to chase you up for more information. Be sure to include the details of your environment and relevant tests that demonstrate the failure.
Feature requests are welcome. Before you submit one be sure to have:
- Use the GitHub search and check the feature hasn't already been requested.
- Take a moment to think about whether your idea fits with the scope and aims of the project.
- Remember, it's up to you to make a strong case to convince the project's leaders of the merits of this feature. Please provide as much detail and context as possible, this means explaining the use case and why it is likely to be common.
Change requests cover both architectural and functional changes to how FIO works. If you have an idea for a new or different dependency, a refactor, or an improvement to a feature, etc - please be sure to:
- Use the GitHub search and check someone else didn't get there first
- Take a moment to think about the best way to make a case for, and explain what you're thinking. Are you sure this shouldn't really be a bug report or a feature request? Is it really one idea or is it many? What's the context? What problem are you solving? Why is what you are suggesting better than what's already there?
FIO Protocol is an open-source project and anyone is welcomed and encouraged to contribute. Elevated permissions only exist for practical purposes and any developer can obtain them if they gain trust of the FIO developer community. Also, please follow these guidelines when submitting code.
Role name | Description | How to obtain role |
---|---|---|
Owner | This role can perform all admin and management of members, repositories, teams and other git information associated with the organization. Owners follow rules described in this document. | The Foundation delegates this role to a team behind a specific Worker Proposal. |
Member | An organization member is a pre-existing Github account that has been invited and accepted the invitation into the organization. Members can be assigned to teams within the organization. Members can be provided permissions/repository roles (see below). Members can be private or public (this is the choice of the member). | Membership can be requested of existing organization members via social media or in Discord. Membership is granted by Owner, if at least one existing member believes there is a potential benefit to the organization to grant membership. |
A team is a group of Members that is in charge of one or more repository. Teams self-organize and decide on how to best manage their project. All decisions require majority of Team and at least one Team Admin to concur. Disputes are arbitrated by Owners. Management of Teams (addition, deletions, etc.) is managed by Owners.
Team | Overseeing repository |
---|---|
Core Blockchain | fio.contracts, fio.devtools, fio, fio.test, fio.mainnet, fio.erc721, fio.erc20, fio.cdt, fio.localsign, fc, bp-tools, appbase, fio.validate, chainbase, berkeley-softfloat-3, wabt |
Front-end | fio-dashboard, fio-dashboard-tools, fiosdk_typescript, fiosdk_typescript-examples, fio-go, fiosdk_kotlin, edge-currency-accountbased, edge-react-gui, fio-website, fiojs, fiosdk_ios, yubihsm-shell |
Apps and Services | fio-bundles, fio.oracle, fio.etl, fio-registrations, fio-service-getwraps, fio-wrap-image, fio-staking-service, fio-service-getunwraps, fio-service-burnnfts, fio-service-paytpid, fio-service-getexpdom, fio-service-burndomains, fio-wrap-status-page, fio-wrap-status-backend, fio-wrap-uri, fio-wrap-proxy, fio-supply, fiostore |
Dev Ops | fio.package, fio.docker, fio.ready, fio.health, fio.start |
Ledger | ledgerjs-hw-app-fio, ledger-hw-app-fio |
Product | fips, fio-devhub |
A repository holds code for specific project. Each repository is managed by exactly one Team, although a single Team can manage multiple repositories. Management of repositories (addition, deletions, etc.) is managed by Owners.
Repository roles are assigned to the members of Team that manages it by the Admin of that Repository. For more information on Github permissions see https://docs.github.com/en/organizations/managing-user-access-to-your-organizations-repositories/repository-roles-for-an-organization.
Role name | Description | How to obtain role |
---|---|---|
Read | Read access to repo. Ability to: pull, fork, create issues; review PRs. | Available to all GitHub accounts. |
Triage | Read + apply labels, close/open/assign issues and PRs, request PR reviews, apply milestones. | A member can gain role when majority of Team and at least one Repository Admin concur. |
Write | Triage + push to repo, approve/merge PRs, manage labels, manage auto-merge, edit comments/commits, publish releases/packages. | A member can gain role when majority of Team and at least one Repository Admin concur. |
Maintain | Write + certain repo settings, push to protected branches. | A member can gain role when majority of Team and at least one Repository Admin concur. |
Admin | Complete control over repo including sensitive and destructive actions. | A member can gain role when majority of Team and at least one Repository Admin concur. |
To get it out of the way:
- develop is the development branch. All work on the next release happens here so you should generally branch off
develop
. Do NOT use this branch for a production site. - master contains the latest release of FIO. This branch may be used in production. Do NOT use this branch to work on FIO's source.
Pull requests are awesome. If you're looking to raise a PR for something which doesn't have an open issue, please think carefully about raising an issue which your PR can close, especially if you're fixing a bug. This makes it more likely that there will be enough information available for your PR to be properly tested and merged.
Never underestimate just how useful quality assurance is. If you're looking to get involved with the code base and don't know where to start, checking out and testing a pull request is one of the most useful things you could do.
Essentially, check out the latest develop branch, take it for a spin, and if you find anything odd, please follow the bug report guidelines and let us know!
While contributing, please be respectful and constructive, so that participation in our project is a positive experience for everyone.
Examples of behavior that contributes to creating a positive environment include:
- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Focusing on what is best for the community
- Showing empathy towards other community members
Examples of unacceptable behavior include:
- The use of sexualized language or imagery and unwelcome sexual attention or advances
- Trolling, insulting/derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others’ private information, such as a physical or electronic address, without explicit permission
- Other conduct which could reasonably be considered inappropriate in a professional setting
Whenever you make a contribution to this project, you license your contribution under the same terms as set out in LICENSE, and you represent and warrant that you have the right to license your contribution under those terms. Whenever you make a contribution to this project, you also certify in the terms of the Developer’s Certificate of Origin set out below:
Developer Certificate of Origin
Version 1.1
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
1 Letterman Drive
Suite D4700
San Francisco, CA, 94129
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
Developer's Certificate of Origin 1.1
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.
- Overall CONTRIB adapted from https://github.com/mathjax/MathJax/blob/master/CONTRIBUTING.md
- Conduct section adapted from the Contributor Covenant, version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html