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 |
Related Addresses
| 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:
- Calculates the equivalent amount of Sentinel tokens based on configured exchange rates
- Records the purchase in the
SentinelBoughtTotalmapping - Forwards all funds directly to the beneficiary address
- 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:
- Accepts payment in ETH or whitelisted ERC20 tokens
- Calculates an equivalent "Sentinel" token amount based on configured rates
- Records purchase amounts per user in a mapping
- 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. |