Lux Docs
Standard

Governance

Governor, Timelock, vLUX voting power, Karma reputation, DLUX emissions, and GaugeController

The governance module (contracts/governance/) implements a full on-chain governance stack with reputation-weighted voting, soulbound Karma, and gauge-directed emissions.

Token Stack

TokenTypePurpose
xLUXTransferable, yield-bearingLiquidLUX vault shares
DLUXTransferable, rebasingGovernance token with collateral backing
vLUXNon-transferableAggregated voting power (xLUX + DLUX)
Karma (K)SoulboundReputation score with activity-driven decay

Voting Power Formula

vLUX = DLUX * sqrt(K / 100) * (1 + lock_months * 0.1)

Quadratic Karma scaling reduces whale dominance. Longer lock periods amplify voting weight.

Governor and Timelock

Standard OpenZeppelin Governor with Timelock execution delay.

import "@luxfi/contracts/governance/Governor.sol";

Governor governor = Governor(GOVERNOR_ADDRESS);

// Create proposal
uint256 proposalId = governor.propose(
    targets, values, calldatas, "Increase fee to 0.5%"
);

// Cast vote (0=Against, 1=For, 2=Abstain)
governor.castVote(proposalId, 1);

// Execute after timelock delay
governor.execute(targets, values, calldatas, descriptionHash);

Karma (K) -- Soulbound Reputation

Karma is a non-transferable reputation token. It decays based on activity and provides a floor for verified DID holders.

ParameterValue
Active decay1% per year (at least 1 tx/month)
Inactive decay10% per year
Verified DID floor50 K minimum
Max Karma1,000 K soft cap
Activity period30 days

KarmaMinter

DAO-controlled minting for positive ecosystem actions:

EventBase KCooldown
DID verification1001 year
Proposal passed50None
Vote cast1None
Liquidity provided101 day
Bug bounty100None

Strike Mechanism

Users can burn their own Karma to reduce another user's Karma at a 2:1 ratio (burn 2K to strike 1K from target), capped at 10% of the target's balance per day.

DLUX -- Governance Token

Rebasing governance token with collateral-backed minting via DLUXMinter.

import "@luxfi/contracts/governance/DLUXMinter.sol";

DLUXMinter minter = DLUXMinter(MINTER_ADDRESS);

// Collateral-backed minting: deposit LUX, receive DLUX 1:1
uint256 dlux = minter.depositCollateral(luxAmount);

// Withdraw: burn DLUX, receive LUX back
uint256 lux = minter.withdrawCollateral(dluxAmount);

Protocol contracts can also emit DLUX as rewards for validator bonuses, LP provision, and staking milestones, all controlled by the DAO via Timelock.

GaugeController

Directs protocol emissions across pools and fee recipients. vLUX holders vote on gauge weights to determine how rewards are distributed.

import "@luxfi/contracts/governance/GaugeController.sol";

GaugeController gauge = GaugeController(GAUGE_ADDRESS);

// Vote for a gauge (allocate voting weight)
gauge.voteForGaugeWeights(gaugeAddress, weight);

// Read current gauge weight
uint256 w = gauge.gaugeRelativeWeight(gaugeAddress, block.timestamp);

Role Hierarchy

RoleHolderPermissions
DEFAULT_ADMIN_ROLEDeployer, then multisigManage all roles
GOVERNOR_ROLETimelock (DAO)Configure mint/emission params
HOOK_ROLEProtocol contractsTrigger Karma minting
EMITTER_ROLEProtocol contractsTrigger DLUX emissions

On this page