Participants
Registry of protocol users, counterparties, and their KYC/allowlist status.
Path: participants
Third-party documentation. This is independently authored analysis of the public Aurum Protocol codebase — not the official docs, and not reviewed or endorsed by the Aurum Protocol team.
Participants Module
The Participants module maintains a permissioned registry of accounts that have been approved to interact with protocol markets. For permissionless markets it is a no-op — for regulated markets it enforces an allowlist.
Account Types
| Type | Description | Required for |
|---|---|---|
STANDARD | Verified retail wallet | Permissioned markets |
INSTITUTIONAL | Verified entity (KYB) | Large-cap markets (>$1M) |
KEEPER | Authorised liquidation bot | Liquidation module |
ANONYMOUS | Unverified (default) | Permissionless markets only |
Registration Flow
- User submits KYC proof off-chain to Aurum's identity provider
- Identity provider calls
register(user, accountType, signature)on-chain - Signature is verified against the OPERATOR_ROLE key
- User record is stored with an expiry timestamp (renewable annually)
Examples
Check eligibility before lending
Check eligibility before lending
typescript
const eligible = await participants.isEligible(userAddress,AccountType.STANDARD);if (!eligible) throw new Error("User not registered for permissioned markets");await lending.deposit(USDC_ADDRESS, depositAmount);
STATUSexample
Gate lending operations behind an eligibility check for regulated markets.
Edge Cases
- Expired participants (expiresAt < block.timestamp) are treated as ANONYMOUS
- Deregistering a user with open positions does not close them — positions must be wound down first
- isEligible returns true for ANONYMOUS accounts on permissionless markets regardless of registration
Interface
Interface
solidity
enum AccountType { ANONYMOUS, STANDARD, INSTITUTIONAL, KEEPER }struct Participant {AccountType accountType;uint64 registeredAt;uint64 expiresAt;bool active;}interface IParticipants {function register(address user, AccountType t, uint64 expiresAt, bytes calldata sig) external;function deregister(address user) external; // OPERATOR_ROLEfunction getParticipant(address user) external view returns (Participant memory);function isEligible(address user, AccountType minType) external view returns (bool);event Registered(address indexed user, AccountType accountType, uint64 expiresAt);event Deregistered(address indexed user);}
STATUSinterface
