The following standard intends to enable the use of administrators or owners in Sway contracts.
The standard seeks to provide a method for restricting access to particular users within a Sway contract.
The sway-libs repository contains a pre-existing Ownership library.
Ownership libraries exist for other ecosystems such as OpenZeppelin's Ownership library.
There SHALL be 3 states for any library implementing an ownership module in the following order:
The Uninitialized
state SHALL be set as the initial state if no owner or admin is set. The Uninitialized
state MUST be used when an owner or admin MAY be set in the future.
The Initialized
state SHALL be set as the state if an owner or admin is set with an associated Identity
type.
The Revoked
state SHALL be set when there is no owner or admin and there SHALL NOT be one set in the future.
Example:
pub enum State {
Uninitialized: (),
Initialized: Identity,
Revoked: (),
}
The following functions MUST be implemented to follow the SRC-5 standard:
This function SHALL return the current state of ownership for the contract where State
is either Uninitialized
, Initialized
, or Revoked
.
There SHALL be error handling.
This error MUST be emitted when only_owner()
reverts.
In order to provide a universal method of administrative capabilities, SRC-5 will further enable interoperability between applications and provide safeguards for smart contract security.
The SRC-5 standard is compatible with the sway-libs repository pre-existing Ownership library. Considerations should be made to best handle multiple owners or admins.
There are no standards that SRC-5 requires to be compatible with.
The SRC-5 standard should help improve the security of Sway contracts and their interoperability.
abi SRC5 {
#[storage(read)]
fn owner() -> State;
}
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.