ERC-8063 - Groups - Multi-Member Containers

Created 2025-10-28
Status Draft
Category ERC
Type Standards Track
Authors
Requires

Abstract

This proposal specifies a general-purpose "Group" primitive as a first-class, onchain object. Each group is deployed as its own contract (identified by its contract address) and has an owner, an extensible set of members, and optional metadata. The standard defines a minimal interface for direct member management and membership introspection. Unlike token standards (e.g., ERC-20/ERC-721) that model units of transferable ownership, Groups model multi-party membership and coordination. The goal is to enable interoperable social, organizational, and collaborative primitives.

Motivation

Tokens typically model ownership and transfer. Many applications instead need an addressable set of accounts with controlled join/leave semantics and shared state—e.g., project teams, DAOs, game parties, channels, or access cohorts. While ERC-7743 (MO-NFT) explores multi-ownership for a single token, it still anchors the abstraction to token semantics. Groups generalize this into a token-agnostic container where members can be added over time, without implying transfer or unitized ownership. Following the ERC-20 design pattern, each group is its own contract identified by its address. External resources (tokens, NFTs, etc.) can be associated with groups through their own contracts, just as they would with any EOA or contract address.

Specification

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 and RFC 8174.

Contracts that implement this standard MUST support ERC-165.

Interface

/// SPDX-License-Identifier: CC0-1.0
pragma solidity ^0.8.20;

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

/// @title IERC8063 — Minimal interface for onchain groups
/// @notice A group is a contract with an owner and members
interface IERC8063 is IERC165 {
    /// @dev Emitted when a member is added to the group
    event MemberAdded(address indexed account, address indexed by);

    /// @dev Emitted when a member voluntarily leaves the group
    event MemberLeft(address indexed account);

    /// @dev Emitted when a member transfers their membership to another address
    event MembershipTransferred(address indexed from, address indexed to);

    /// @notice Returns the owner of the group
    function owner() external view returns (address);

    /// @notice Returns the human-readable name of the group (may be empty)
    function name() external view returns (string memory);

    /// @notice Returns true if `account` is a member of the group
    function isMember(address account) external view returns (bool);

    /// @notice Returns current number of members (including owner)
    function getMemberCount() external view returns (uint256);

    /// @notice Owner adds an account as a member
    function addMember(address account) external;

    /// @notice Member voluntarily leaves the group (owner cannot leave)
    function leaveGroup() external;

    /// @notice Transfer membership to another address (caller loses membership)
    /// @param to Address to receive membership (must not already be a member)
    function transferMembership(address to) external;
}

Semantics

Deployment model

Following the ERC-20 pattern, each group is its own contract deployment:

Optional extensions (non-normative)

Ownership transfer

Some implementations may need standardized ownership handoff for management tooling (e.g., dashboards). Implementations MAY add an ownership transfer extension with the following interface:

interface IERC8063Ownership {
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    function transferOwnership(address newOwner) external;
}

If implemented:

ERC-20 compatibility (decimals=0)

Implementations MAY expose an ERC-20 interface for group membership under the following constraints:

Reference: see the ERC-20 compatibility implementation in the assets directory.

Motivation (non-normative): exposing a constrained ERC-20 view can improve compatibility with existing tooling that already understands ERC-20 interfaces (e.g., wallet/portfolio displays, accounting/distribution utilities, and governance/gating systems that accept an ERC-20 address as a “membership token”). This mode is OPTIONAL and is intended as an adapter; it does not imply fungible-value semantics.

Rationale

Backwards Compatibility

No known backward compatibility issues. This is a new interface with ERC-165 detection.

Reference Implementation

Reference contracts are provided in the assets/ directory:

Security Considerations

Copyright

Copyright and related rights waived via CC0.