TRANSPARENCY NOTICE: This report documents the results of an internal static security analysis performed with the open-source Slither tool. It is published for full public transparency. This is not a professional third-party audit. An independent professional smart-contract audit will be completed and published before any major protocol upgrades or significant liquidity events.

Slither Security Audit — Dog Planet Smart Contracts

Date: March 27, 2026

Tool: Slither 0.11.5

Scope: contracts/ directory — 90 contracts, 101 detectors

Previous report: SLITHER_AUDIT_20260326 (64 findings)

This report: 41 findings remaining after full remediation pass

Compiler: solc 0.8.20 / 0.8.24 — EVM target: Paris — Hardhat

Compiled files: 79 Solidity files — zero warnings, zero errors

Summary: All High and Medium severity findings from the March 26 audit were fully remediated within 24 hours. The remaining 41 findings are low-risk informational items reviewed and accepted as false positives, intentional design choices inherent to the burn-to-mint architecture, or risks consciously accepted by the team. Dog Planet AS is committed to continuous security improvements.
Executive Summary
Severity Previous This Report Status
High20✅ All fixed
Medium10✅ All fixed
Low11⚠️ Mitigated — batch function added
Informational6040✅ Missing-inheritance cleared; remainder accepted
Fixes Applied in This Pass

H-01 — Divide-Before-Multiply FIXED

Contracts: DogPlanetCoreMining.sol, DOGEVerseRewarder.sol

Precision-loss issues were present in reward calculations (updatePool() and _calculateMetaRewards()) and the week-window rollover in claimBySig(). The previous pattern computed a product then divided by supply before applying the precision multiplier, causing intermediate truncation:

// OLD — precision loss from intermediate division:
uint256 dpcReward = (rate * blocks * totalMinted) / divisor;
accDpcPerShare += (dpcReward * ACC_PRECISION) / totalMinted;

Fixed by merging expressions so ACC_PRECISION is applied before any division. The totalMinted terms cancel:

// NEW — no intermediate truncation:
accDpcPerShare += (rate * blocks * ACC_PRECISION) / divisor;

In DOGEVerseRewarder.claimBySig(), the week-window rollover was changed from a divide-then-multiply pattern to a single modulo expression:

weekStart = block.timestamp - (delta % WEEK_DURATION);

H-02 — Locked Ether via receive/fallback FIXED

Contracts: DogPlanetMetaNFT.sol, DogPlanetSales.sol, DropMinterPass.sol

All three contracts had receive() and fallback() stubs that reverted but were still marked payable, meaning ETH sent would be accepted by the EVM before reverting — a potential locked-ether vector. All stubs have been removed entirely. ETH is now rejected at the EVM level — no payable entry points exist anywhere in these contracts.

M-01 — Reentrancy in DropMinterPass.mint() FIXED

Contract: DropMinterPass.sol

The previous mint() function performed external calls (burnFrom(), mintWithHash()) before updating internal state variables (minted, mintedBy, totalDpsBurned). Fixed by applying the Checks-Effects-Interactions pattern: all state variables are updated before any external call is made.

L-01 — Costly Loop in withdrawAllNFTs MITIGATED

Contract: DogPlanetSales.sol

Added withdrawBatchNFTs(address to, uint256 limit) with a hard cap of 1–200 tokens per transaction. Callers should use this for large inventories. The original withdrawAllNFTs is retained for backwards compatibility with a documented gas warning. Both functions are pre-finalization, admin-role-gated only.

I-01 — Missing Interface Inheritance FIXED — fully cleared

Contracts: Multiple

Created six shared interface files in contracts/interfaces/:

Interface FileImplementing Contract
IBurnableERC20.solDogPlanetCore, DogPlanetSpark
IDogPlanetCore.solDogPlanetCore
IDogPlanetSpark.solDogPlanetSpark
IMiningContract.solDogPlanetCoreMining
ICoreEvolve.solDOGEVerseCore721
IDOGEVerseCore721.solDOGEVerseCore721

Updated ICodexRegistry.sol to use uint32 for canonicalIndex (matching the implementation). Added latestHash() to CodexRegistry to satisfy the full interface. Removed all duplicate inline interface declarations from contract files. Updated all implementing contracts with explicit is Interface inheritance declarations.

I-02 — Naming Convention Violations FIXED

Contracts: DogPlanetCore, DogPlanetSpark, DogPlanetMetaNFT, DogPlanetSales, DropMinterPass, DogPlanetNFT

Removed leading underscores from all function parameters across the codebase (_minter → newMinter, _enabled → enabled, _price → newPrice, _newBaseURI → newBaseURI, _miningContract → newMiningContract) to comply with Solidity naming standards.

Additional — Missing Zero-Address Check FIXED

Contract: DogPlanetMetaNFT.sol

Added require(newMiningContract != address(0), "Zero address") to setMiningContract().

Remaining Findings — 41 Total (All Accepted or False Positive)
Compilation Status
79 Solidity files compiled successfully — EVM target: Paris — solc 0.8.20 / 0.8.24 — Hardhat
Zero warnings. Zero errors. All contracts compile cleanly.
Audit Trail
DateReportFindingsNotes
2026-03-26 SLITHER_AUDIT_20260326 64 Initial post-development audit
2026-03-27 SLITHER_AUDIT_20260327 41 All High/Medium fixed; interface architecture completed

This report is published by Dog Planet AS for full public transparency.
Dog Planet AS remains committed to continuous security improvements.
A full independent third-party audit will be completed and published before any major protocol upgrades or significant liquidity events.

Last updated: March 27, 2026

dogplanet.no · Whitepaper Core · Whitepaper Ecosystem