Skip to content
HomeAboutServicesGuidesContact

Sample report

Access control due diligence report

Who can touch the system: every address and account with power, what it can do, and the one row that matters most.

Download the original PDF

In short

  • Five on-chain roles and four off-chain accounts, with what each can and cannot do.
  • No role, including Owner, can transfer user balances directly. Everything else is a question of degree; that one is categorical.
  • Four hygiene checks passed, two remain open and are published as open.

This is an illustrative deliverable, not a record of a real engagement. The subject, the Lumenswap Protocol, is fictional, and every address, email and name below is an invented example.

On-chain identity register

Every address with power, what kind of key it is, and the role it holds. A retired deployer is listed too, because a key that used to have power is a question until someone shows it does not.

HolderAddressTypeRole
Founders' safe0x3F5c...9A213-of-5 Safe multisigOwner
Ops safe0x81dD...4C072-of-3 Safe multisigPauser, Oracle admin
Timelock0xA940...E63BContract, 48h delayExecutor of Owner actions
Governance0x5B12...77F0Token voting + timelockFee manager
Deployer (retired)0xC7e8...0D55EOA, powers renouncedNone since launch

What each role can perform

Capabilities against roles, so the question stops being who is trusted and becomes what each one could do on their worst day.

CapabilityOwnerPauserFee mgrOracle adm
Upgrade contracts (via 48h timelock)Yes———
Pause swapsYesYes——
Halt withdrawals (max 72h on-chain cap)YesYes——
Change fee split (via 48h timelock)——Yes—
Rotate price feeds (24h timelock)———Yes
Move user funds directly————

The last row is the most important line in this report

No role, including Owner, can transfer user balances directly.

Everything above it is a question of degree: how long a pause can last, how much notice an upgrade gives, who has to agree. That row is categorical, and it is the one a depositor would ask about first if they knew to ask.

Off-chain access register

Chain permissions are only half the picture. An attacker who cannot move funds on-chain may still be able to pause the product, push a price, or propose an upgrade from a laptop.

AccountSystemCan performMFA
ops@lumenswap.exampleAdmin dashboardView metrics, trigger pause via Ops safeHardware key
oracle-bot@lumenswap.exampleFeed publisher APIPush prices within deviation boundsAPI key, rotated monthly
dev-team@lumenswap.exampleCI and deploy repoPropose upgrades; cannot executeHardware key
support@lumenswap.exampleHelpdeskRead tickets only; no chain accessTOTP

Hygiene checklist

Four passed, two left open. The open ones are published here rather than held back — an item nobody is told about is an item nobody chases.

CheckStatus
Every privileged role behind a multisigPass (fixed during engagement)
Upgrades cannot bypass the timelockPass (proxy admin moved to timelock)
Withdrawal halt is time-bounded on-chainPass (72h cap added)
Deployer key powers renouncedPass
Signer list published and currentOpen, publish with launch
Quarterly key-loss rehearsal scheduledOpen

Questions

Why does a retired key still appear?

Because renouncing power is a claim until it is checked. Listing the address and stating that its powers are renounced is what lets a reader verify it rather than take it on trust.

Is a 48-hour timelock enough?

It is enough to be noticed, which is the point of one. A timelock does not stop a hostile change; it gives everyone watching time to react before it lands, and that only works if someone is watching.

Who commissions this?

Usually an investor or a partner, before capital or an integration moves. The report answers what the other side can still do after the deal, which is a different question from whether their code is sound.

The work behind this

Related reading