Skip to content

Contract Analysis

DISCLAIMER // NFA // DYOR

This analysis is based on observations of the contract behavior. We are not smart contract security experts. This document aims to explain what the contract appears to do based on the code. It should not be considered a comprehensive security audit or financial advice. Always verify critical information independently and consult with blockchain security professionals for important decisions.

⊙ generated by robots | curated by humans

Analysis Date: 2025-12-26


Metadata

Primary Contract

PROPERTY VALUE
Contract Address 0x8d33666c83f7f17a1b8dc0e950d8ff2e7e37c563 (etherscan)
Network Ethereum Mainnet
Contract Type Standalone
Deployment Date 2025-11-17 (approx)
Deployment Block 23824358
Contract Creator 0x8758Ca21d08c9bdA75D6114614DCE373bFD76968 (etherscan)
Creation TX 0x2cdc2c5f3a0b2f0b85e6692b32cb791337fe9a6938785138ee0f409261b535d7 (etherscan)
Compiler Version Solidity 0.8.30
Total Functions 29
External Contract Dependencies 1 (ERC20 interface for token transfers)
Upgrade Mechanism ☑ None - Not Upgradable
Verification Status ☒ Not Verified
Audit Status ☒ Unknown
TYPE ADDRESS NOTES
Owner/Admin 0x8758Ca21d08c9bdA75D6114614DCE373bFD76968 (etherscan) Contract creator, EOA with high activity
Current Beneficiary 0x853319C1eBebD1e7eD38747e14e7affe255145c6 (etherscan) Receives presale funds, holds ~1,048 ETH (~$3.07M)
Original Beneficiary 0xbc6921A5C7e2f88E5fBC8f5ec100b13Dd0bD01fe (etherscan) Constructor argument, changed post-deployment
USDT (Hardcoded) 0xdAC17F958D2ee523a2206206994597C13D831ec7 (etherscan) Tether USD (USDT) on Mainnet
Sentinel Token 0x0000000000000000000000000000000000000000 Not yet initialized

Executive Summary

This contract appears to be a token presale contract for a project called "Sentinel." Based on the code analysis:

  • Users can purchase "Sentinel" tokens using ETH or supported ERC20 tokens (like USDT)
  • The contract does not distribute tokens immediately - it tracks purchases for later claiming
  • All funds (ETH and tokens) are sent directly to a beneficiary address
  • The presale is currently inactive (isPresaleActive = false)
  • Approximately 3.49 billion Sentinel tokens have been "sold" (tracked, not distributed)
  • The beneficiary address has accumulated ~1,048 ETH (~$3.07M)

Key Trust Assumptions:

  • Users trust that the owner will eventually provide the Sentinel tokens
  • Users trust that the beneficiary is controlled by legitimate project operators
  • No timelock or Multisig protection on admin functions
  • The Sentinel token contract has not been set (sentinelToken = address(0))

Architecture

graph TD
    subgraph Users
        U1[User with ETH]
        U2[User with ERC20]
    end

    subgraph Presale Contract
        PC[SentinelPresale<br/>0x8d33666c...37c563]
        ST[Storage:<br/>- SentinelBoughtTotal mapping<br/>- totalSentinelBought<br/>- totalSentinelRaised]
    end

    subgraph External
        B[Beneficiary<br/>0x853319C1...145c6]
        USDT[USDT Contract<br/>0xdAC17F95...1ec7]
    end

    subgraph Owner
        O[Owner EOA<br/>0x8758Ca21...76968]
    end

    U1 -->|buySentinelWithEth| PC
    U2 -->|buySentinelWithToken| PC
    PC -->|ETH| B
    PC -->|transferFrom| USDT
    USDT -->|to beneficiary| B
    O -->|admin functions| PC
    PC --> ST

System Overview

The Sentinel Presale contract is a standalone smart contract that facilitates a token presale mechanism. Users send payment (ETH or supported ERC20 tokens), and the contract:

  1. Calculates the equivalent amount of Sentinel tokens based on configured exchange rates
  2. Records the purchase in the SentinelBoughtTotal mapping
  3. Forwards all funds directly to the beneficiary address
  4. Does NOT distribute any tokens - users receive nothing on-chain immediately

Observations:

  • ☑ Funds flow directly to beneficiary (no escrow risk in contract)
  • ☑ Uses ReentrancyGuard pattern for purchase functions
  • ☒ No actual token distribution mechanism exists
  • ☒ No claim function for users to receive tokens
  • ☒ Sentinel token address is not set (address(0))

Design Patterns Used

  • Ownable: Single owner with full admin control, standard OpenZeppelin pattern
  • ReentrancyGuard: Mutex lock (slot 1) to prevent reentrant calls on purchase functions
  • Token Whitelist: Mapping-based system to support multiple payment tokens with configurable rates

Access Control

Roles & Permissions

ROLE ASSIGNED BY REVOKABLE CALL COUNT
Owner Constructor (deployer) ☑ Yes - via transferOwnership or renounceOwnership Unlimited
Beneficiary Constructor, then setBeneficiary ☑ Yes - owner can change anytime N/A
User Anyone N/A Unlimited

Permission Matrix

FUNCTION OWNER USER ANYONE
startPresale()
endPresale()
initializeSentinel(address)
addSupportedTokens(...)
removeSupportedTokens(...)
setBeneficiary(address)
withdrawEth()
withdrawToken(address,uint256)
transferOwnership(address)
renounceOwnership()
buySentinelWithEth()
buySentinelWithToken(...)
View functions

Time Locks & Delays

ACTION TIME LOCK CAN CANCEL PURPOSE
Transfer Ownership None N/A ☒ Immediate, no protection
Change Beneficiary None N/A ☒ Immediate, no protection
End Presale None N/A ☒ Immediate, no protection
Withdraw Funds None N/A ☒ Immediate, no protection

Economic Model

Presale Purchase Flow

flowchart TD
    A[User] -->|1. Send ETH or ERC20| B{Presale Active?}
    B -->|No| C[Revert: Presale has ended]
    B -->|Yes| D{Token Supported?}
    D -->|No| E[Revert: Token not supported]
    D -->|Yes| F{Rate Set?}
    F -->|No| G[Revert: Rate not set]
    F -->|Yes| H[Calculate Sentinel Amount]
    H --> I{Amount > 0?}
    I -->|No| J[Revert: Sentinel amount too small]
    I -->|Yes| K[Transfer Payment to Beneficiary]
    K --> L[Update totalSentinelBought]
    L --> M[Update totalSentinelRaised]
    M --> N[Update SentinelBoughtTotal mapping]
    N --> O[Emit TokenPurchased Event]
    O --> P[User receives: Nothing on-chain]

Current Stats

METRIC VALUE NOTES
Total Sentinel Bought 3,492,180,104 ~3.49 billion tokens tracked
Total Sentinel Raised 3,492,180,104 Same as bought
Total USD Raised (Wei) 0 Not being tracked
Presale Active ☒ False Currently ended
Sentinel Token Address 0x0000...0000 Not initialized

Funding Sources & Sinks

Inflows:

  • ETH via buySentinelWithEth() - payable function
  • ERC20 tokens via buySentinelWithToken() - transferFrom pattern

Outflows:

  • All funds immediately sent to beneficiary address
  • Owner can call withdrawEth() for any ETH stuck in contract
  • Owner can call withdrawToken() for any ERC20 tokens stuck in contract

Summary of Observations

This contract appears to be a straightforward presale tracker that:

  1. Accepts payment in ETH or whitelisted ERC20 tokens
  2. Calculates an equivalent "Sentinel" token amount based on configured rates
  3. Records purchase amounts per user in a mapping
  4. Forwards all funds immediately to a beneficiary address

What the contract does:

  • ☑ Tracks presale purchases accurately
  • ☑ Supports multiple payment methods (ETH + ERC20s)
  • ☑ Uses reentrancy protection on state-changing functions
  • ☑ Allows owner to pause/resume presale

What the contract does NOT do:

  • ☒ Distribute any tokens to buyers
  • ☒ Hold funds in escrow
  • ☒ Provide any claim mechanism
  • ☒ Reference an actual Sentinel token contract

The ~$3.07M ETH in the beneficiary wallet suggests significant participation. Users who purchased in this presale have no on-chain claim to tokens - they must trust the project team to distribute tokens through some other mechanism.

This analysis was performed for educational purposes and should not be considered an official security audit or financial advice. We recommend verifying all findings independently and consulting security professionals for investment decisions.


References

RESOURCE NOTES
Etherscan Contract Page Primary source for bytecode and transaction history
Foundry Cast Documentation Tool used for on-chain queries
OpenZeppelin Ownable Reference for ownership pattern

Changelog

DATE AUTHOR NOTES
2025-12-26 Artificial. Generated by robots.
2026-01-08 Denizen. Reviewed, edited, and curated by humans.