Varla
OverviewWhat it is and why it matters.How It WorksLending against prediction markets, step by step.FeaturesLending, borrowing, leverage, and risk management.Supported MarketsPolymarket, Opinion, Kalshi, and more.
DocumentationProtocol docs, guides, and architecture.Smart ContractsPool, Collateral Manager, Oracle, Liquidation Engine.SDK ReferenceTypeScript SDK for protocol interactions.API ReferenceREST and GraphQL endpoints for market data.
BlogLatest news and announcements from Varla.FAQsFrequently asked questions about the protocol.Security & AuditsProtocol security, audits, and trust assumptions.Brand AssetsLogos, colors, and typography guidelines.
Sign up
Varla
Protocol
Overview What it is and why it matters.
How It Works Lending against prediction markets, step by step.
Features Lending, borrowing, leverage, and risk management.
Supported Markets Polymarket, Opinion, Kalshi, and more.
Developers
Documentation Protocol docs, guides, and architecture.
Smart Contracts Pool, Collateral Manager, Oracle, Liquidation Engine.
SDK Reference TypeScript SDK for protocol interactions.
API Reference REST and GraphQL endpoints for market data.
Resources
Blog Latest news and announcements from Varla.
FAQs Frequently asked questions about the protocol.
Security & Audits Protocol security, audits, and trust assumptions.
Brand Assets Logos, colors, and typography guidelines.
Sign up

Introduction

Overview
Varla 101

Protocol

Overview
Lending Model
Supply & Borrow Interest Rates Reserves
User Positions
Open Positions Supply Assets Borrow Assets Withdraw Assets Repay Loans
Risk Engine
Health Factor LTV & Thresholds Liquidations Market Resolution Oracle System

Markets

Overview
Polymarket
Opinion
Kalshi
Adapters

Token

Overview
Distribution
Utility & Governance
Varla Gems

Security

Overview
Trust Assumptions
Risk Disclosure
Risk Parameters

Resources

FAQ
Glossary
Links
Brand Assets

Getting Started

Overview
TypeScript SDK
GraphQL API
Smart Contracts

Smart Contracts

Overview
Core Protocol
VarlaPool VarlaOracle Interest Rate Liquidators Market Adapters
Governance & Access
Governance

References

SDK Reference
API Reference

Operations

Testing & Debugging
Contract Addresses

Security

Overview
Trust Assumptions
Risk Disclosure
Risk Parameters

Access Control

Varla uses OpenZeppelin's AccessManager pattern for role-based access control. All restricted functions across the protocol check permissions through a single central VarlaAccessManager.
ℹ Source files
contracts/access/VarlaAccessManager.sol — central RBAC contract
contracts/access/VarlaRoles.sol — role ID definitions

VarlaAccessManager

A thin wrapper around OpenZeppelin's AccessManager. Deployed once and shared by all protocol contracts that inherit AccessManaged.

solidity
contract VarlaAccessManager is AccessManager {
    constructor(address initialAdmin) AccessManager(initialAdmin) { }
}

All protocol contracts (VarlaCore, VarlaPool, VarlaOracle, VarlaInterestRateStrategy, VarlaLiquidator) are deployed with this manager's address. The manager controls which addresses can call which functions.


VarlaRoles

A library defining role IDs used across the protocol. Each role is a uint64 derived from a deterministic hash.

solidity
library VarlaRoles {
    uint64 constant ROLE_ADMIN          = 0;
    uint64 constant ROLE_RISK_MANAGER   = uint64(keccak256("VARLA_ROLE_RISK_MANAGER"));
    uint64 constant ROLE_ORACLE_UPDATER = uint64(keccak256("VARLA_ROLE_ORACLE_UPDATER"));
    uint64 constant ROLE_POOL_MANAGER   = uint64(keccak256("VARLA_ROLE_POOL_MANAGER"));
    uint64 constant ROLE_TREASURY       = uint64(keccak256("VARLA_ROLE_TREASURY"));
    uint64 constant ROLE_GUARDIAN       = uint64(keccak256("VARLA_ROLE_GUARDIAN"));
    uint64 constant ROLE_PAUSER         = uint64(keccak256("VARLA_ROLE_PAUSER"));
}

Role Permissions

RoleWhat It Controls
ADMINFull protocol control — assign roles, upgrade proxies, set contract addresses
RISK_MANAGERUpdate LTV configs, liquidation parameters, interest rate params, oracle configs
ORACLE_UPDATERPush price updates to VarlaOracle via OracleUpdaterRouter
POOL_MANAGERConfigure pool parameters — fees, caps, reserve factor
TREASURYWithdraw protocol fees and reserves
GUARDIANEmergency actions — oracle guard overrides, position-level protections
PAUSERPause and unpause protocol operations

How It Works

Every restricted function in Varla contracts uses the restricted modifier from AccessManaged:

solidity
// In VarlaCore:
function setLtvConfig(uint256 pid, LtvConfig calldata config) 
    external restricted {
    // Only callable by addresses with RISK_MANAGER role
}

The VarlaAccessManager admin configures which role can call which function on which contract. This is done via OpenZeppelin's setTargetFunctionRole().


✦ Key Takeaways
  • Single VarlaAccessManager controls all protocol access — deployed once, shared everywhere
  • Seven roles: Admin, Risk Manager, Oracle Updater, Pool Manager, Treasury, Guardian, Pauser
  • Built on OpenZeppelin AccessManager — battle-tested, granular function-level permissions
  • Role IDs are deterministic (keccak256 hashes) — same across all deployments

Menu

  • Overview
  • How it works
  • Features
  • Documentations
  • FAQs

Ecosystem

  • Prediction markets
  • Builders
  • Integrations
  • Governance

Company

  • About
  • Terms
  • Privacy
  • Support

©2026 Varla Labs Inc. All rights reserved