A pre-launch checklist for shipping smart contracts to mainnet
The production-minded checks LinkIT runs before any contract touches mainnet — from access control to monitoring and a tested upgrade path.
Before a smart contract launch, review privileged actions, adversarial tests, monitoring, and recovery options. Rehearse the deployed configuration and wallet flow as well as the contract code.
1. Access control is explicit
Every privileged function should answer one question without ambiguity: who can call this, and what happens if that key is compromised?
- Owner/admin roles are documented and minimized.
- Multi-sig on anything that can move funds or upgrade logic.
- No forgotten
onlyOwnerleft on a function that should be public — or vice versa.
2. The tests model real adversaries
Include adversarial cases as well as successful flows:
- Reentrancy on every external call.
- Integer edges and rounding direction.
- Failure modes when a dependency (oracle, bridge, token) misbehaves.
3. There is a monitoring plan before launch
Configure event indexing and alerts before launch. Verify that the responsible team can see and respond to the events the contract emits.
4. The upgrade path is tested, not theoretical
If the contract is upgradeable, the upgrade has been rehearsed on a fork. If it's immutable, the migration story is written down. Either way, "what do we do when we find a bug" has an answer before launch, not after.
5. A human read the wallet UX
Test approvals, gas estimates, and signature requests with a first-time user. The interface should explain the action and show the result or failure clearly.