GatewayRegistry.sol
The GatewayRegistry contract serves as a management system for gateways, facilitating their registration, staking, metadata updates, and lifecycle operations. It ensures secure, role-based access and maintains an organized registry of gateways.
Key Features
Gateway Registration:
Allows users to register gateways with unique identifiers and metadata.
Supports optional FUNC token staking during registration.
Metadata Management:
Provides functions to update metadata associated with gateways.
Lifecycle Operations:
Supports activation, deactivation, and wind-down of gateways.
Access Control:
Enforces role-based access for administrative functions.
Restricts gateway-specific actions to their respective owners.
Event Logging:
Logs key events such as gateway registration, updates, and lifecycle changes.
Contract Roles
Access Control
The contract uses OpenZeppelin's AccessControl to implement role-based permissions.
DEFAULT_ADMIN_ROLE:Grants access to administrative functions like toggling auto-whitelist.
Modifiers
onlyRegisteredGatewayOwner:Restricts certain actions to the owner of a registered gateway.
Data Structures
Gateway
Represents a registered gateway.
owner: Address of the gateway's owner.id: Unique identifier for the gateway.registeredAt: Block number when the gateway was registered.metadata: Metadata string associated with the gateway.active: Boolean indicating whether the gateway is active.
Key Functions
Constructor
Initializes the GatewayRegistry contract with references to the FUNC token and Router contract.
Parameters:
_FUNC: Address of the FUNC ERC20 token contract._router: Address of the Router contract.
Registration and Staking
register(bytes calldata _id, string memory metadata)
register(bytes calldata _id, string memory metadata)Registers a new gateway with optional metadata.
Parameters:
_id: Unique identifier for the gateway.metadata: Metadata string (max length:1024).
Emits:
GatewayRegistered(_id, metadata)
registerAndStake(bytes calldata _id, string memory metadata, uint256 amount)
registerAndStake(bytes calldata _id, string memory metadata, uint256 amount)Registers a new gateway and stakes FUNC tokens.
Parameters:
_id: Unique identifier for the gateway.metadata: Metadata string (max length:1024).amount: Amount of FUNC tokens to stake.
Emits:
GatewayRegisteredAndStaked(_id, amount, metadata)
Lifecycle Operations
windDownCluster()
windDownCluster()Winds down all gateways owned by the caller.
Emits:
GatewayClusterWindDown(msg.sender)
unstakeCluster()
unstakeCluster()Unstakes all gateways owned by the caller.
Emits:
GatewayClusterUnstake(msg.sender)Logs errors for failed unstaking attempts.
Metadata Management
updateMetadata(bytes calldata _id, string memory metadata)
updateMetadata(bytes calldata _id, string memory metadata)Updates the metadata of a registered gateway.
Parameters:
_id: Unique identifier for the gateway.metadata: New metadata string (max length:1024).
Emits:
GatewayMetadataUpdated(_id)
Activation and Deactivation
deactivate(bytes calldata _id)
deactivate(bytes calldata _id)Deactivates a registered gateway.
Parameters:
_id: Unique identifier for the gateway.
Emits:
GatewayDeactivated(_id)
reactivate(bytes calldata _id)
reactivate(bytes calldata _id)Reactivates a registered gateway.
Parameters:
_id: Unique identifier for the gateway.
Emits:
GatewayReactivated(_id)
Query Functions
getGatewayIds()
getGatewayIds()Returns the list of all registered gateway IDs.
Returns:
Array of all gateway IDs.
getGatewayIdsByOwner(address _owner)
getGatewayIdsByOwner(address _owner)Returns the list of gateway IDs owned by a specific address.
Parameters:
_owner: Address of the gateway owner.
Returns:
Array of gateway IDs owned by the specified address.
getActiveGatewayIds()
getActiveGatewayIds()Returns the IDs of all currently active gateways.
Returns:
Array of active gateway IDs.
getActiveGateways()
getActiveGateways()Returns a list of all currently active gateways.
Returns:
Array of
Gatewaystructs representing active gateways.
getActiveGatewayCount()
getActiveGatewayCount()Returns the count of currently active gateways.
Returns:
Number of active gateways.
getGateway(bytes calldata _id)
getGateway(bytes calldata _id)Returns the Gateway struct associated with a given _id.
Parameters:
_id: Unique identifier of the gateway.
Returns:
A
Gatewaystruct containing the gateway's details.
registered(bytes calldata _id)
registered(bytes calldata _id)Checks if a gateway is registered.
Parameters:
_id: Unique identifier of the gateway.
Returns:
Boolean indicating whether the gateway is registered.
Events
GatewayRegistered(bytes id, string metadata)Emitted when a gateway is registered.GatewayRegisteredAndStaked(bytes id, uint256 amount, string metadata)Emitted when a gateway is registered and staked.GatewayClusterWindDown(address indexed owner)Emitted when a gateway cluster is wound down.GatewayClusterUnstake(address indexed owner)Emitted when a gateway cluster is unstaked.GatewayMetadataUpdated(bytes id)Emitted when a gateway's metadata is updated.GatewayDeactivated(bytes id)Emitted when a gateway is deactivated.GatewayReactivated(bytes id)Emitted when a gateway is reactivated.LogError(string message)Emitted when an error occurs during gateway unstaking operations.
Last updated