🙏 Thank you for spending some time to contribute! 🙏
We hope to outline some clear guidelines for contributing. This repository hopes to achieve its goal of showcasing many examples of Wormhole integrations. If we missed any important aspects of contributing in this document, please submit a pull request to modify this document.
Almost everything starts with a Github issue. And if your issue has a solution, it will end up being a pull request. The different types of issues are listed in the table of contents.
Currently we aim to structure this repository like the Wormhole repository, where each blockchain network has its own subdirectory. Each subdirectory will try to resemble how a typical repository looks for that specific network.
Whitepapers for each example exist here. If there are any whitepapers missing entirely or any info specific to a particular implementation is missing or wrong, please see Missing or Incorrect Documentation on how to submit an issue.
We have put together the EVM (Ethereum Virtual Machine) directory assuming a
smart contract structure similar to how forge init
creates your environment.
Here are the subdirectories:
forge-scripts
- Useful scripts written in Solidity.forge-test
- Scripts written in Solidity meant to be run usingforge test
.modules
- Work-in-progress modules that will eventually become dependencies that exist as annpm
library or as aforge
submodule.shell-scripts
- Useful shell scripts.src
- Smart contract source code, separated by each example (enumerated).ts-test
- Scripts written in Typescript (TS-Mocha) using ethers.js to interact with smart contracts deployed toanvil
as a mainnet fork.
Please read the evm README for more details.
We have put tgoether the Solana directory assuming a program structure similar
to how anchor init
creates your environment. Because of this, all of these
programs are written assuming the Anchor framework. Here are the
subdirectories:
dependencies
- Wormhole-related artifacts live here (built from the Wormhole repo).modules
- Work-in-progress modules that will eventually become dependencies that exist as acargo
library.programs
- Program source code, separated by each example (enumerated).shell-scripts
- Useful shell scripts.ts
- Web3 SDK and scripts written in Typescript (TS-Mocha) to interact with programs loaded in a Solana local validator run withanchor test
.
Please read the Solana README for more details.
These are the different categories of issues that exist in this repository. Some of these issues may be marked with "good first issue," which is an indication that the issue is good for a newcomer to Wormhole or blockchain development in general. And if for some reason an issue is not relevant to Wormhole integrations, an issue may be marked as "invalid."
You can find the list of issues here.
A bug in our examples constitutes anything that has undesirable behavior. This includes (and is not limited to) malfunctioning methods (unexpected state-changes and output), vulnerabilities (re-entrancy, fake account injection, etc) and undefined behavior.
With vulnerabilities, we hope to illustrate as much as we can with protections against known vulnerabilities. We encourage contributors to add more test coverage!
If a potential bug is found, be sure to write specifically:
- What the bug is at a high-level
- At least one example of how the bug can be exploited
- A potential solution (either written in the issue or submitted pull request)
Here are the list of bug-related issues.
Maybe missing or incorrect documentation is technically a bug. But we want to highlight the importance of documentation in a separate section.
We try our best to document everything. Because this repository warehouses examples of how to integrate with Wormhole, it is very important to describe the integration as clearly as possible. And each smart contract's implementation should reflect what is written in its respective whitepaper.
There may be some experimental features that we hope to capture in some examples. Because these example features may be changing frequently (e.g. if an example happens to reference a particular Wormhole PR), comments may not be accurate. These count as issues because if a feature changes, the example and its documentation needs to reflect these changes.
Here are some examples of some possible issues:
- Blockchain network environment set-up is wrong or outdated.
- Comments do not reflect a field, method or object accurately.
- Whitepaper mismatches implementation for a particular blockchain network.
Here is the list of documentation issues.
Introducing a new network is a big task. In order to adequately cover a Wormhole integration with a new network, the examples start with the whitepapers found in the docs. All of the smart contracts written in this repository must reflect the business logic written in these whitepapers.
Test coverage (unit tests and integration tests) are a main part of these smart contract examples. Because we aim to demonstrate these Wormhole integrations sending messages to their other network counterparts, there should be exhaustive test coverage that illustrates all functionality before it can be considered deployable to mainnet. We cannot accept a pull request for a new network if these tests are not met. We consider these examples incomplete. If you need help writing specific tests, we can try to help out whenever we can.
We also recommend that the subdirectory representing a specific network to
reflect how those applications exist in that specific ecosystem (e.g. our
EVM contracts closely resemble the directory structure when forge init
is
called). This network's subdirectory should be inviting to other developers
of that ecosystem.
Here is the list of new network issues.
Coming up with a new example network of smart contracts to illustrate a new use case is really exciting! Some examples of how smart contracts across different networks talk to each other can be modeled using networking designs like ZeroMQ Messaging Patterns for example.
If you have a new idea for an example, you should start by writing a whitepaper with some psuedocode at least (targeting specific blockchain development languages is preferred, though).
Here is the list of new example issues.
These issues can span any of the other categories of issues (new networks, documentation, etc). We will mark whichever issue with "help wanted" if we cannot prioritize working on these issues or if we do not have the background to fulfill these tasks.
Here is the list of help wanted issues.
A pull request (PR) is a request to merge changes from one branch with another
branch. Repositories each have their own procedures for submitting a PR, so
we will outline a simple procedure that you should follow. Following this
procedure will facilitate its merge to the main
branch because the code
owners will have an easier time understanding the code and documentation
changes, as well as the thought process behind these changes.
Only code owners can approve and merge a pull request. Only one approval is required before the code is merged.
In the PR description, please describe the following:
- The objective of the PR.
- A high-level description of what the PR aims to do and why it should
be merged into the
main
branch. - This objective may include an issue number, which you can reference by using a hash (#) followed by the issue number.
- A high-level description of what the PR aims to do and why it should
be merged into the
- How to review the PR.
- Before a PR gets merged, code owners need to review and approve the
changes before your branch gets merged into
main
. If the code owners have any problems reviewing the code, they will write comments referencing specific line numbers. You should then respond to by either writing a comment in response or checking in another commit reflecting the code owner's comment.
- Before a PR gets merged, code owners need to review and approve the
changes before your branch gets merged into
If there are any continuous integration (CI) tests, the existing tests must
pass. These repository tests are very important for making sure that core
logic existing in the main
branch has not changed. If a CI test is changed
or added, please be as descriptive as you can about what changed so we can pay
close attention to what happened with the test.
You can find the list of pull requests here.
Currently the only spot we can take questions is if there is a github issue outlining the problem. We will try to answer all questions. But keep in mind that more specific questions (with examples if appropriate) will probably be addressed sooner than others. Questions too vague may be marked as "won't fix."
Again, thank you for your contributions to the Wormhole Scaffolding repository. This repository becomes better when more of the community participates in its development.