← NexumRise

NexumRise NBES — Architecture Summary

Document type: External audit scope — multi-contract design
Status: Implemented v2.16.2 split (Core · Admin · View · Rescue) — Sepolia live
Baseline reviewed: NexumRise_NBES_v2_16.sol monolith · lean v2.16.1

Contents

  1. Document control
  2. Purpose
  3. Executive summary
  4. System diagram
  5. Contract inventory
  6. Audit scope by contract
  7. Trust model
  8. Cross-contract API
  9. State ownership
  10. Events
  11. Known monolith issues
  12. Out of scope
  13. Recommended workplan
  14. File references
  15. Module quick reference
  16. Implementation recommendations

Document control

ProjectNexumRise Token (NBES)
IssuerSenthilkumar Hewitt / SKPH Capital Holdings LLC
NetworkEthereum Mainnet (ERC-20), Sepolia testnet
Solidity^0.8.20
Last updatedMay 2025 · HTML May 2026

1. Purpose of this document

This summary is written for smart contract auditors and security reviewers. It describes the intended split of the NBES monolith into multiple contracts to:

  1. Satisfy EIP-170 (24,576-byte deployment limit).
  2. Separate fund-moving logic from governance / emergency logic.
  3. Define trust boundaries, audit scopes, and in-scope attack surfaces per contract.

Auditors should treat v2.16 / v2.16.1 monolith as the historical implementation baseline and this document as the target architecture for v2.16.2+ unless otherwise stated in the engagement letter.

2. Executive summary

ItemDetail
Current monolith size~33,955 bytes (optimizer runs=1, viaIR)
EIP-170 limit24,576 bytes
Shortfall~9,379 bytes (~27.6%) — not deployable as single contract
Proposed fixSplit into Core (token + trading), Admin (governance), View (read-only), Rescue (optional)
Proxy noteEIP-1167 / UUPS does not exempt implementation from 24 KB at its address
Audit implication: Two engagement scopes are possible:
  • Scope A: Monolith v2.16 / v2.16.1 only (as deployed or attempted on Sepolia).
  • Scope B: Split architecture v2.16.2+ — Core invariants + Admin→Core privilege model + optional Rescue hook.

3. System diagram (logical)

┌─────────────────┐ Traders/Holders │ NexumRiseCore │ ← NBES token address (ERC-20) ───────────►│ ETH + NBES │ buyNBES / sellNBES / transfer └────────┬────────┘ │ onlyAdmin / onlyRescue ┌──────────────┼──────────────┐ ▼ ▼ ▼ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ Admin │ │ Rescue │ │ View │ │ timelocks │ │ (optional) │ │ eth_call │ │ dual-sig │ │ 30d claim │ │ no ETH │ └────────────┘ └────────────┘ └────────────┘

4. Contract inventory

ContractHolds ETHMutates NBES supplyIn-scope for fund safety
NexumRiseCoreYesYesPrimary — Critical
NexumRiseAdminNoNo (calls Core)Secondary — High (privilege escalation)
NexumRiseRescueNoVia Core hookTertiary — High (if enabled)
NexumRiseViewNoNoOut of fund scope (read-only)

5. Audit scope by contract

5.1 NexumRiseCore — CRITICAL PATH

Must verify:

AreaFunctions / logicRisk class
Pricing_computeBasePrice, Chainlink read/fallback, volume weights, buy vs sell SOL handlingOracle manipulation, stale data
TradingbuyNBES, sellNBESReserve drain, slippage, reentrancy
ReservesMain reserve = balance - investmentReserve; premium cap; sell spread in floor checkInsolvency, accounting desync
Liquidity trapgetReserveHealth (internal), exit window, max sell, circuit breakerBank run, griefing on triggerCircuitBreaker
ETH protectionInline in getSellPrice / sellNBESStale reference, unfair sell price
L1 burn_transfer fee-on-transfer, floor at MIN_SUPPLYSupply invariant, founder lock
L3 milestonesexecuteMilestone (Admin-gated)Price threshold, floor breach
ETH transfer_safeTransferETHReturn bomb (mitigated via assembly + check)
AccessonlyAdmin, onlyRescue, onlyOwnerPrivilege escalation from Admin/Rescue
Direct ETHreceive() revertsForced ETH via selfdestruct (documented)

Explicitly out of Core (moved to Admin): 39× propose/execute/cancel governance externals, dual-sig approval flows, migration.

5.2 NexumRiseAdmin — GOVERNANCE & EMERGENCY

AreaRisk class
Timelock enforcement (24h / 48h / 60d)Bypass, timestamp manipulation (N/A on-chain)
Dual-sig (owner + trustedSigner)Single-party execution, signer collusion
Volume commit-revealHash mismatch, front-running reveal
Feed update (48h + 14d signer override)Malicious feed addresses
Investment reserve withdrawTimelock bypass → Core.withdrawInvestmentReserve
Investment emergency (48h)Drain investment reserve
Main reserve emergency (60d)Total ETH drain — document as extreme trust assumption
trustedSigner lifecycleOwner = signer collapse
All Core.set* callsOnly callable after Admin checks; no direct user path

Not in Admin: Pricing math, buyNBES/sellNBES execution.

5.3 NexumRiseRescue — OPTIONAL

AreaRisk class
Dual-sig initiationUnauthorized rescue
Snapshot / hold periodGaming lastBalanceIncrease
claimRescueETHCore.rescuePayoutDouble claim, ETH insolvency, NBES burn correctness
Interaction with circuit breaker / sellsRace during active rescue

5.4 NexumRiseView — INFORMATIONAL

6. Trust model (auditor checklist)

#InvariantEnforced by
T1Only Core moves ETH to users on sell (except Admin/Rescue hooks)Core sellNBES, _safeTransferETH
T2investmentReserve only increases on spread/revenue/redirect; decreases on premium payout & approved withdrawCore accounting
T3Admin cannot mint NBES or bypass burn floor without Core logicNo mint function; milestone/manual burn via Core
T4admin address on Core is immutable or one-time set by ownerConstructor / setAdmin once
T5trustedSigner cannot become owner on CoretransferOwnership guard
T6Users never call Admin for normal tradeOperational
T7View contract has zero write accessNo non-view functions

Key trust assumption: Compromised Admin or malicious owner can drain reserves via emergency paths after timelock/dual-sig — by design (governance trust). Auditors should flag whether timelocks are sufficient for token holder expectations.

7. Cross-contract API (Core surface for Admin/Rescue)

Admin-only setters (representative — full list in ARCHITECTURE.md):

Core functionCalled byEffect
setVolumesAdminFormula weights
setFeedsAdminOracle addresses
setSpreadBpsAdminBuy/sell spread
setReserveMultiplierAdminPremium formula
setBurnFee / setBurnEnabledAdminL1 burn
setEthProtectionEnabledAdminSell protection toggle
setETHReferenceAdmin24h ETH reference
withdrawInvestmentReserveAdminInvestment ring-fence
drainInvestmentReserve / drainAllETHAdminEmergency only
executeMilestoneAdminL3 burn from contract balance
resetCircuitBreakerAdminAfter cooldown
rescuePayoutRescueBurn NBES + ETH to holder

Primary audit question: Can any address other than admin / rescue invoke these? Can Admin be swapped without holder notice?

8. State ownership (summary)

Storage domainContract
_balances, _totalSupply, allowancesCore
Feeds, volumes, lastKnown prices, spreads, multiplier, protection flagsCore (Admin writes)
Circuit breaker, exit window, investmentReserveCore
All pending* timelock fieldsAdmin
rescueSnapshot, rescueEthClaimRescue
trustedSignerAdmin (recommended)

9. Events (indexing guidance)

ContractEvent families
CoreTransfer, Buy, Sell, TokensBurned, SpreadCollected, CircuitBreaker*, SellLimitHit, OracleStale
Admin*Proposed/*Executed/*Cancelled, Volume*, Feed*, Emergency*, TrustedSigner*
RescueRescueInitiated, RescueClaimed

Auditors: confirm no sensitive ops lack events on Core.

10. Known monolith issues relevant to split

IssueMonolith (v2.16.1)Split mitigation
Bytecode > 24 KBYes (~34 KB)Core target 18–22 KB
transferOwnership in Ownable referenced trustedSignerCompile fix in v2.16.1 (override on Core)Keep override on Core only
Migration moves investment onlyDocumentedDefer to Admin v3
Permissionless triggerCircuitBreakerBy designStays on Core

11. Out of scope (typical engagement)

12. Recommended audit workplan

PhaseDeliverable
1Review Core: buyNBES, sellNBES, pricing, reserves, reentrancy
2Review Admin→Core: every onlyAdmin path, timelocks, dual-sig
3Review optional Rescue→Core: rescuePayout
4Integration: deploy script wiring, admin/rescue immutability
5Compare monolith v2.16 behavior parity (regression matrix)

13. File references

FileRole
NexumRise_NBES_v2_16.solAudited monolith baseline (Sepolia)
NexumRise_NBES_v2_16_1.solLean monolith + custom errors
NexumRiseCore.sol · NexumRiseAdmin.sol · NexumRiseView_v2_16_2.sol · NexumRiseRescue.solv2.16.2 split deployables
NexumRiseView_v2_16_1.solRead-only companion (earlier)
ARCHITECTURE.mdFull architecture specification
NexumRise_NBES_Architecture_Summary.pdfThis summary (PDF)

14. Module → contract quick reference

ModuleContract
ERC-20 + L1 burnCore
buy / sell + pricingCore
Circuit breaker + exit limitsCore
Milestone burn (effect)Core ← Admin
Oracle/volume storageCore ← Admin writes
Timelocks + dual-sigAdmin
Emergencies + withdrawAdmin → Core
Trusted signerAdmin
Holder rescueRescue → Core (optional)
MigrationAdmin (defer)
DashboardView
Shared constantsNexumRiseConstants

15. Implementation recommendations

Consolidates implementation notes with architecture review. Required for v2.16.2, not optional.

15.1 A — One-time setAdmin handshake

StepAction
1Deploy Core with admin = address(0)
2Deploy Admin with core = CoreAddress
3Core owner calls setAdmin(AdminAddress) once
4Verify adminInitialized == true on-chain
5Transfer Core owner to multisig (do not renounce until onlyOwner functions are scoped)
function setAdmin(address _admin) external onlyOwner {
    if (adminInitialized) revert NBESAdminAlreadySet();
    if (_admin == address(0)) revert NBESZeroAddress();
    admin = _admin;
    adminInitialized = true;
}

Audit focus: Can setAdmin be called twice? Can non-owner set admin? Is Admin address correct before any trading?

Caveat: Renouncing Core ownership breaks seedReserve, depositRevenue, and one-time setRescue unless moved to Admin.

15.2 B — NexumRiseConstants.sol

Single import for INITIAL_SUPPLY, MIN_SUPPLY, staleness windows, FEE_DENOM, tier %, timelocks, volume bounds — used by Core, Admin, View, Rescue.

Audit focus: No mismatched constants between contracts (especially View vs Core pricing display).

15.3 C — onlyAdmin / onlyRescue on all Core setters

Must be gatedExample
onlyAdminsetVolumes, setFeeds, setSpreadBps, executeMilestone, emergencies
onlyRescuerescuePayout

Primary audit question: Can any EOA call Core setters directly and bypass Admin timelocks? Use custom errors (NBESNotAdmin, NBESNotRescue) per v2.16.1.

15.4 D — Phased deployment

PhaseContractsAudit scope
1 SepoliaCore + ViewPricing, buy/sell, breaker; owner shortcuts OK
2 Mainnet+ AdminFull timelock + dual-sig → Core paths
3 Optional+ RescuerescuePayout hook only if deployed

Before mainnet: Monolith v2.16 behavior parity matrix (regression tests).

15.5 Owner vs Admin vs Rescue

RoleLocationPost-launch capability
Core ownerMultisigSeed, deposit, one-time wiring, ownership
Core adminAdmin contractAll parameter setters after governance
Core rescueRescue contractHolder rescue payout hook only
trustedSignerAdmin onlyDual-sig approvals (not Core owner)

15.6 Launch checklist

Disclaimer: This document describes intended architecture. Auditors should confirm commit hashes and deployed addresses in the audit engagement scope. Sepolia v2.16.2 addresses are linked from the main site footer.