Get Started
On-Chain Permissions & Governance Scope
The Lightchain mainnet is governed entirely on-chain. Every contract that holds protocol state —WorkerRegistry, AIConfig, JobRegistry, Treasury — is owned by a TimelockController that the community drives through LightChainGovernor. Once that handover happened at network launch, the founding team gave up the ability to unilaterally change protocol parameters, whitelist or delist models, move treasury funds, or upgrade contracts. Those actions can only happen through a proposal that the community has voted on and that has cleared the 48-hour Timelock.
This page enumerates every privileged surface area on mainnet, who can touch it, and — equally important — what is structurally outside the team's control.
Governance stack at a glance
Voting power is denominated in native LCAI held at the proposal snapshot block. No wrapper is needed on Lightchain itself —NativeVotes exposes the IVotes interface directly on top of native LCAI balances.
For the configured parameters (proposal threshold, voting delay, voting period, quorum, timelock delay), see Governance & Protocol Parameters.
Timelock roles
TheTimelockController is the single account that owns every protocol contract. Access to it is gated by four OpenZeppelin roles:
The practical consequence is that the only way to mutate any protocol-controlled state is:
- A proposer with ≥
PROPOSAL_THRESHOLDLCAI (140,000 LCAI) creates a proposal. - Voting delay (~24 h) elapses; the snapshot block is reached.
- Voting period (~14 days) elapses; the proposal must reach quorum (30% of supply) with a majority for.
- The Governor queues the operation against the Timelock.
- 48 hours pass.
- Anyone executes the operation.
What governance controls
Every function below is gated byonlyOwner on a contract whose owner is the TimelockController. The only way to call any of them is the proposal flow described above.
WorkerRegistry — model eligibility and worker stake
Slashing (slash(address, uint256)) is not governance-controlled — it is onlyJobRegistry, called automatically by JobRegistry when an offense is detected. Governance can tune the slashing rates inside AIConfig, but cannot directly slash a worker.
AIConfig — protocol parameters and model registry
Treasury
There is no path to drain the Treasury that bypasses a governance proposal. claimWithdrawal() is open (it's the pull-mechanism fallback for a failed transfer), but it can only retrieve funds that were already approved for the caller by a prior governance action.
Contract upgrades
WorkerRegistry, AIConfig, JobRegistry, and Treasury are UUPS proxies. The upgrade authorization function _authorizeUpgrade(address) enforces onlyOwner, and the owner is the Timelock. A contract upgrade requires the same proposal → vote → queue → 48 h → execute flow as any other governance action.
What governance itself cannot do
A successful proposal still cannot move certain dials, because the limits are enforced in the contracts as immutable bounds or invariants:- Slashing rates cannot exceed 50%.
maxSlashBps = 5000is a compile-time constant. A proposal that callssetDisputeSlashBps(6000)reverts during execution. - Fee distribution must sum to 10,000 bps. A proposal that sets a 50/40/5 split (sum = 9,500) reverts.
- Dispute window and resolution timeout have minimum bounds. Setters enforce floor values so a proposal cannot collapse the dispute window to zero.
JobRegistry.slashisonlyJobRegistry. Governance has no path to slash a worker directly. Slashing only happens through detected on-chain offenses.
The Guardian role
The protocol has a single optional safety surface outside governance: aGuardian address (typically a multisig) that can call pause() on WorkerRegistry and JobRegistry. While paused, the affected contracts reject:
- New worker registration
- New session creation
- New job submission
- Modify any protocol parameter
- Add or remove models
- Move treasury funds
- Upgrade any contract
- Cancel an in-flight proposal that does not also hold
CANCELLER_ROLE(held by the Governor) - Force the system to stay paused indefinitely — only the owner (Timelock, i.e. governance) can
unpause(), but governance can also remove the Guardian entirely viasetGuardian(address(0))orsunsetGuardian()
sunsetGuardian() is irreversible: once called, the Guardian role can never be reassigned. This is the path to fully retiring the emergency stop once the network is judged stable.
Model whitelisting and removal — fully decentralized
Of all the governance-controlled surfaces above, model lifecycle is the one the team is most often asked about, so it warrants explicit treatment. There are two layered gates a model passes through to be servable on Lightchain. Both are owned by the Timelock. Neither can be invoked by the founding team alone.Gate 1 — Protocol-wide registration (AIConfig)
CodeSOLIDITY
enabled. disableModel flips the flag back to false without removing the registration (workers still on the eligible set are immediately rejected by JobRegistry when they try to ack a job for that model).
Gate 2 — Per-worker whitelist (WorkerRegistry)
CodeSOLIDITY
What this means in practice
- Adding a new model requires: a proposal targeting both
AIConfig.registerModelandWorkerRegistry.addWhitelistedModel(typically batched into one proposal), reaching quorum, and clearing the 48-hour Timelock. - Removing a model requires the same proposal flow targeting
WorkerRegistry.removeWhitelistedModeland/orAIConfig.disableModel. - The core team has no override. There is no admin function, no emergency model-removal path, no off-chain registry to amend. If a proposal to whitelist a model passes, the model is whitelisted. If a proposal to delist passes, the model is gone. The team can vote with its own LCAI like anyone else, but it cannot block, fast-track, or veto.
- A delisted model can be re-whitelisted later by a subsequent proposal. Delisting is reversible by governance, not permanent.
Related pages
- Governance & Protocol Parameters — current values for every parameter referenced here.
- Contract Addresses — canonical addresses for the Governor, Timelock, NativeVotes, and the protocol contracts.
- Ballot — separate guide covering the Ethereum-based LCAI-Ballots wrap/Treasury DAO.
- Model Governance — the product surface for proposing and tracking models.
- Slashing & Rehabilitation — what governance-tunable slashing rates lead to in practice.