Antler by Autoflux
HomeAurum ProtocolParticipants

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

TypeDescriptionRequired for
STANDARDVerified retail walletPermissioned markets
INSTITUTIONALVerified entity (KYB)Large-cap markets (>$1M)
KEEPERAuthorised liquidation botLiquidation module
ANONYMOUSUnverified (default)Permissionless markets only

Registration Flow

  1. User submits KYC proof off-chain to Aurum's identity provider
  2. Identity provider calls register(user, accountType, signature) on-chain
  3. Signature is verified against the OPERATOR_ROLE key
  4. 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_ROLE
function 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