Core Contracts
This document provides a detailed overview of the Noderr Protocol's core smart contracts, including their public interfaces and functions.
Vaults
The user-facing vaults are six per-tier vaults built as EIP-2535 Diamonds implementing the ERC-7540 asynchronous tokenized-vault standard. They are live on Base Sepolia and denominated in tUSDC, the underlying asset, which is mintable through a public faucet. Each vault uses a two-bucket design: a principal-protected Floor bucket and a Trading bucket.
For deployed contract addresses, see Contract Addresses.
Fee Model
Every vault charges a 0% management fee. The only fee is a performance fee, assessed on the high-water mark (NAV per share above its prior peak), charged only from the Trading bucket — never from the principal-protected Floor — and only on returns above a per-vault soft hurdle.
| Vault | Management fee | Performance fee | Soft hurdle |
|---|---|---|---|
| Conservative | 0% | 10% | 4% |
| Moderate | 0% | 15% | 6% |
| Aggressive | 0% | 20% | 8% |
| Hedged | 0% | 15% | 4% |
| Inverse | 0% | 20% | 8% |
| Configurable | 0% | 15% (DAO-configurable) | 6% |
| Prediction Markets | 0% | 25% | 15% |
The Prediction Markets vault is planned and not yet deployed.
Functions
Vaults follow the ERC-7540 asynchronous request → fulfill → claim lifecycle:
deposit(uint256 amount): Deposits the specified amount of the underlying asset (tUSDC) into the vault.withdraw(uint256 amount): Requests the redemption of the specified amount of vault shares.claim(): Claims redeemed funds once the withdrawal request has been fulfilled.
StakingManager
Functions
stake(uint256 amount): Stakes the specified amount of NODR tokens.unstake(uint256 amount): Initiates the unstaking of the specified amount of NODR tokens.claimRewards(): Claims accumulated staking rewards.
TrustFingerprint
Functions
getScore(address user): Returns the TrustFingerprint score for the specified user.updateScore(address user, uint256 newScore): Updates the score for the specified user. Restricted to authorized scorer roles (e.g.,SCORER_ROLE) held by Guardian/Oracle-tier operators.
Governance
The on-chain DAO handles node/oracle elections and protocol parameter votes. It is not the administrative authority over the core contracts: upgrade and admin authority sits with a 2-of-3 Gnosis Safe acting through a MultiSigTimelock with a 7-day delay, which holds DEFAULT_ADMIN and UPGRADER over the core contracts.
Functions
propose(...): Submits a new governance proposal.castVote(uint256 proposalId, bool support): Casts a vote on the specified proposal.execute(uint256 proposalId): Executes a passed proposal.
NodeAdmissionController
For deployed contract address, see Contract Addresses.
Overview
Node admission on Noderr is permissionless self-registration. Prospective operators register themselves directly through the NodeAdmissionController by satisfying the network's on-chain requirements; there is no off-chain application, pre-approval, whitelist, or gatekeeper. This model replaces the earlier gated onboarding flow and its NodeRegistry-as-gatekeeper dependency, both of which have been removed.
How It Works
Registration completes on-chain, with no manual approval step, once an operator meets the requirements enforced by the controller:
- Stake requirement: the operator posts the NODR stake for the chosen tier — 0 / 25,000 / 50,000 / 150,000 NODR for the Micro / Validator / Guardian / Oracle tiers respectively. These are protocol-provided, 24-month-locked allocations.
- TrustScore floor: the operator must meet the on-chain TrustScore admission floor for the tier — 0.70 (Validator), 0.80 (Guardian), and 0.90 (Oracle).
Oracle-tier participation additionally requires election through the on-chain governance process: an operator self-nominates with a qualifying TrustScore, and only current Oracles vote on admission.
After joining, every operator is subject to the same performance monitoring, TrustScore stay-in floors, and slashing conditions as all others.