The purpose of this repository is to contain standards for the Sway Language which users can import and use.
Standards in this repository may be in various stages of development. Use of draft standards and feedback on the proposed standards is encouraged. To use a draft, search for a standard using the appropriate GitHub label and implement the standard abi into your contract.
If you don't find what you're looking for, feel free to create an issue and propose a new standard!
Note Sway is a language under heavy development therefore the standards may not be the most ergonomic. Over time they should receive updates / improvements in order to demonstrate how Sway can be used in real use cases.
- SRC-20; Native Asset Standard defines the implementation of a standard API for Native Assets using the Sway Language.
- SRC-3; Mint and Burn is used to enable mint and burn functionality for fungible assets.
- SRC-7; Arbitrary Asset Metadata Standard is used to store metadata for Native Assets.
- SRC-9; Metadata Keys Standard is used to store standardized metadata keys for Native Assets in combination with the SRC-7 standard.
- SRC-6; Vault Standard defines the implementation of a standard API for asset vaults developed in Sway.
- SRC-13; Soulbound Address provides a predicate interface to lock Native Assets as soulbound.
- SRC-5; Ownership Standard is used to restrict function calls to admin users in contracts.
- SRC-12; Contract Factory defines the implementation of a standard API for contract factories.
- SRC-14; Simple Upgradable Proxies defines the implementation of a standard API for simple upgradable proxies.
- SRC-8; Bridged Asset defines the metadata required for an asset bridged to the Fuel Network.
- SRC-10; Native Bridge Standard defines the standard API for the Native Bridge between the Fuel Chain and the canonical base chain.
- SRC-2; Inline Documentation defines how to document your Sway files.
To import a standard the following should be added to the project's Forc.toml
file under [dependencies]
with the most recent release:
standards = { git = "https://github.com/FuelLabs/sway-standards", tag = "v0.5.1" }
NOTE: Be sure to set the tag to the latest release.
You may then import your desired standard in your Sway Smart Contract as so:
use standards::<standard>::<standard_abi>;
For example, to import the SRC-20 Native Asset Standard use the following statement in your Sway Smart Contract file:
use standards::src20::SRC20;
Minimal example implementations for every standard can be found in the examples/
folder.
Example of the SRC-20 implementation where a contract contains a single asset with one SubId
. This implementation is recommended for users that intend to deploy a single asset with their contract.
Example of the SRC-20 implementation where a contract contains multiple assets with differing SubId
s. This implementation is recommended for users that intend to deploy multiple assets with their contract.
Example of the SRC-3 implementation where a contract only mints a single asset with one SubId
.
Example of the SRC-3 implementation where a contract mints multiple assets with differing SubId
s.
Example of the SRC-5 implementation where a contract does not have an owner set at compile time with the intent to set it during runtime.
Example of the SRC-5 implementation where a contract has an owner set at compile time.
A basic implementation of the vault standard that supports any number of sub vaults being created for every AssetId
.
A basic implementation of the vault standard demonstrating how to restrict deposits and withdrawals to a single AssetId
.
A basic implementation of the vault standard demonstrating how to restrict deposits and withdrawals to a single AssetId
, and to a single Sub vault.
Example of the SRC-7 implementation where metadata exists for only a single asset with one SubId
.
Example of the SRC-7 implementation where metadata exists for multiple assets with differing SubId
s.
Example of the SRC-12 implementation where contract deployments contain configurable values that differentiate the bytecode root from other contracts with the same bytecode.
Example of the SRC-12 implementation where all contract deployments are identical and thus have the same bytecode and root.
Example of a minimal SRC-14 implementation with no access control.
Example of a SRC-14 implementation that also implements SRC-5.
Note All standards currently use
forc v0.60.0
.
Note The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in these documents are to be interpreted as described in RFC 2119: https://www.ietf.org/rfc/rfc2119.txt