Skip to content

Contract Analysis

DISCLAIMER // NFA // DYOR

This analysis is based on decompiled bytecode — the contract source code is not verified on Etherscan. Function names, parameter types, and internal logic are inferred from selector matching, transaction input decoding, and event log analysis. We are not smart contract security experts. This document should not be considered a comprehensive security audit or financial advice. Always verify critical information independently.

⊙ generated by robots | curated by humans

Analysis Date: 2026-03-29


Metadata

Primary Contract

PROPERTY VALUE
Contract Address 0x99c96efF...Ab2dCC (etherscan)
Network Ethereum Mainnet
Contract Type Standalone
Deployment Date 2026-03-28 10:43:35 UTC
Deployment Block 24,755,545
Contract Creator 0x9fBcc72A...63eA03 (etherscan)
Creation TX 0x72ab6761...cdc457 (tx)
Bytecode Size ~19.8 KB
Total Functions 44
External Contract Dependencies 3 (WETH, Uniswap V3 SwapRouter, SENT Token)
Upgrade Mechanism ☒ None - Not Upgradeable
Verification Status ☒ NOT VERIFIED
Audit Status ☒ NO AUDIT FOUND
TYPE ADDRESS NOTES
Owner 0x9fBcc72A...63eA03 (etherscan) Single Externally Owned Account (EOA) with full admin control. Also deployer.
Keeper 0x9fBcc72A...63eA03 (etherscan) Same as owner — executes trades on behalf of users
Fee Recipient 0x90fF7835...fceEAD (etherscan) Receives 0.005 ETH per deposit
WETH 0xC02aaA39...756Cc2 (etherscan) Canonical Wrapped ETH
Uniswap V3 Router 0xe592427A...861564 (etherscan) Swap execution target
SENT Token 0xe88BaAB9...aDc304 (etherscan) Sentinel token — used for eligibility/tier calculation
Presale Contract 0x00000000...00000 Not set (address zero)

Executive Summary

Based on bytecode analysis and transaction patterns, this contract appears to be a managed trading vault — part of the Sentinel project ecosystem. Users deposit ETH (and optionally declare a SENT token balance) to create "vaults." A designated keeper (currently the same address as the owner) then executes trades on users' behalf via Uniswap V3, swapping deposited ETH for stablecoins like USDC and USDT. The contract tracks per-user profit, trade history, and vault state.

The system operates as follows:

  1. Users call a deposit function (0x4af9daa8), sending ETH and specifying a SENT token amount
  2. The contract creates a vault entry, records the deposit, and sends a flat 0.005 ETH fee to the fee recipient
  3. The keeper calls the trade execution function (0xea0ccfae), wrapping user ETH to WETH and swapping via Uniswap V3
  4. A second keeper function (0xd86938ba) appears to close positions by selling acquired tokens back to ETH
  5. Users can top up vaults (topUp), withdraw fully (withdraw), or withdraw partially (withdrawPartial)

The contract holds user funds directly — currently ~4.84 ETH across 85 registered users with 162 trades executed and ~0.018 ETH reported profit. Key constants include a MAX_TRADE_ETH of 0.5 ETH per trade and a SWAP_DEADLINE_BUFFER of 60 seconds.

Trust assumptions are significant: the keeper has full discretion over when, what, and how much to trade. There is no on-chain strategy, no automated trigger, and no user approval for individual trades. The keeper can execute any trade with any token pair on Uniswap V3 using pooled user funds. Owner and keeper are the same single EOA with no Multisig, no timelock, and no governance mechanism. Source code is unverified.


Architecture

graph TD
    User[User]
    Contract[Sentinel Mites Vault<br/>0x99c96efF...Ab2dCC]
    Owner[Owner / Keeper<br/>0x9fBcc72A...63eA03]
    FeeRecip[Fee Recipient<br/>0x90fF7835...fceEAD]
    WETH[WETH]
    UniRouter[Uniswap V3 Router]
    SENT[SENT Token]

    User -->|deposit / topUp / withdraw| Contract
    Owner -->|execute / close / admin| Contract

    Contract -->|fee| FeeRecip
    Contract -->|wrap ETH| WETH
    Contract -->|swap| UniRouter
    Contract -->|balanceOf| SENT

System Overview

This contract implements a managed vault system with the following characteristics:

  • User Deposits: Users send ETH along with a SENT token amount parameter. The contract records a vault with the deposit amount, SENT amount, timestamps, and tier information. A flat 0.005 ETH fee is sent to the fee recipient on each deposit.
  • Keeper-Executed Trades: The keeper wraps deposited ETH to WETH, approves the Uniswap V3 SwapRouter, and executes swaps (WETH → USDC, WETH → USDT). Trade parameters (target token, amount, fee tier, min output, direction) are all specified by the keeper at execution time.
  • Profit Tracking: The contract tracks per-vault profit and a global totalProfitGenerated counter. As of analysis, reported profit is ~0.018 ETH across 162 trades.
  • Multi-Vault Support: Each user can have multiple vaults (indexed by uint256 vault ID).
  • Tier System: A getUserTier function returns a tier value based on user address and vault ID.
  • Eligibility Check: getEligibility appears to check SENT token balance for determining access or tier.

The contract does NOT:

  • Implement any automated trading strategy on-chain
  • Give users control over individual trade decisions
  • Use a timelock or Multisig for trade execution
  • Verify trade profitability before execution
  • Limit keeper authority over trade parameters

Design Patterns Used

  • Ownable: Standard ownership pattern with owner() and transferOwnership(address). Owner has exclusive access to all administrative functions.

  • Keeper Pattern: Separate role (currently same address as owner) for trade execution. Can be reassigned via setKeeper(address).

  • Vault Accounting: Per-user vault structs storing deposit amount, SENT amount, trade count, tier, active status, timestamps, last trade token, and accumulated profit.

  • WETH Wrapper: Uses canonical WETH contract for ETH-to-ERC20 conversions before Uniswap swaps.


Access Control

Roles & Permissions

ROLE ASSIGNED BY REVOKABLE CALL COUNT
Owner Constructor (deployer) ☑ Yes - via transferOwnership Unlimited
Keeper Owner (setKeeper) ☑ Yes - via setKeeper Unlimited
User/Depositor N/A - anyone can deposit N/A Multiple vaults per address

Permission Matrix

FUNCTION OWNER KEEPER USER ANYONE
deposit (0x4af9daa8)
topUp(uint256,uint256)
withdraw(uint256)
withdrawPartial(uint256,uint256)
executeTrade (0xea0ccfae)
closeTrade (0xd86938ba)
setKeeper(address)
setFeeRecipient(address)
setPresaleContract(address)
transferOwnership(address)
View functions

Time Locks & Delays

ACTION TIME LOCK CAN CANCEL PURPOSE
executeTrade ☒ None ☒ N/A ☒ Immediate - No protection
closeTrade ☒ None ☒ N/A ☒ Immediate - No protection
setKeeper ☒ None ☒ N/A ☒ Immediate - No protection
setFeeRecipient ☒ None ☒ N/A ☒ Immediate - No protection
transferOwnership ☒ None ☒ N/A ☒ Immediate - No protection

Vault Mechanism

Deposit Flow

sequenceDiagram
    participant User
    participant Contract as 0x99c96efF...Ab2dCC
    participant FeeRecip as Fee Recipient
    participant SENT as SENT Token

    User->>Contract: deposit(sentAmount) + ETH value
    Contract->>Contract: Validate ETH sent > 0
    alt sentAmount > 0
        Contract->>SENT: balanceOf(msg.sender)
        SENT-->>Contract: user SENT balance
        Contract->>Contract: Verify balance >= sentAmount
    end
    Contract->>FeeRecip: Transfer 0.005 ETH fee
    Contract->>Contract: Create vault entry
    Contract->>Contract: Record deposit amount, SENT amount, tier, timestamps
    Contract->>Contract: Increment user count (if new user)
    Contract->>Contract: Add to users array (if new user)
    Contract->>Contract: Emit VaultDeposit event
    Contract-->>User: Success

Trade Execution Flow

sequenceDiagram
    participant Keeper
    participant Contract as 0x99c96efF...Ab2dCC
    participant WETH
    participant UniRouter as Uniswap V3 Router
    participant Pool as WETH/Token Pool

    Keeper->>Contract: executeTrade(user, vaultId, targetToken, fee, ethAmount, minOut, direction)
    Contract->>Contract: Verify caller is keeper
    Contract->>Contract: Load vault for user/vaultId
    Contract->>WETH: deposit() (wrap ETH to WETH)
    WETH-->>Contract: WETH tokens
    Contract->>WETH: approve(router, amount)
    Contract->>UniRouter: exactInputSingle(WETH→targetToken, fee, amount, minOut)
    UniRouter->>Pool: Execute swap
    Pool-->>Contract: Target tokens received
    Contract->>Contract: Update vault (trade count, last token, profit, timestamp)
    Contract->>Contract: Increment totalTradesExecuted
    Contract->>Contract: Update totalProfitGenerated
    Contract->>Contract: Emit TradeExecuted event
    Contract-->>Keeper: Success

Key Statistics (at analysis time)

METRIC VALUE
Total Users 85
Total Trades Executed 162
Total Profit Generated ~0.018 ETH
Total Deposits (est.) ~5.09 ETH
Current ETH Balance ~4.84 ETH
MAX_TRADE_ETH 0.5 ETH
SWAP_DEADLINE_BUFFER 60 seconds
Deposit Fee 0.005 ETH (flat)
Contract Age ~1 day (deployed 2026-03-28)

External Dependencies

WETH (Wrapped Ether)

PROPERTY VALUE
Address 0xC02aaA39...756Cc2 (etherscan)
Function Used deposit() (wrap ETH), approve()
Purpose Convert ETH to WETH for Uniswap V3 swaps
Verification Status ☑ VERIFIED — canonical WETH9

Uniswap V3 SwapRouter

PROPERTY VALUE
Address 0xe592427A...861564 (etherscan)
Function Used exactInputSingle()
Purpose Execute WETH → token swaps
Verification Status ☑ VERIFIED — canonical Uniswap V3

SENT Token (Sentinel)

PROPERTY VALUE
Address 0xe88BaAB9...aDc304 (etherscan)
Function Used balanceOf() (via getEligibility)
Purpose Tier/eligibility determination based on token holdings
Verification Status ☒ See SENT Token Analysis

Events

The contract emits the following events:

EVENT TOPIC HASH PARAMETERS COUNT
OwnershipTransferred 0x8be0079c...6457e0 (events) address indexed prev, address indexed new 1
VaultDeposit 0xed9d3a11...9b1cab (events) address indexed user, uint256 indexed vaultId, uint256 ethAmount, uint256 sentAmount 28
TradeExecuted 0x0134eeea...8a59b (events) address indexed user, uint256 indexed vaultId, address indexed token, uint256 ethAmount, uint256 tokenAmount, uint256 direction, uint256 timestamp 13
TopUpOrWithdraw 0x91ede45f...eada3 (events) address indexed user, uint256 indexed vaultId, uint256 amount, ... 8

Summary of Observations

This contract implements a custodial trading vault where users deposit ETH and a single keeper (currently the owner EOA) executes all trades via Uniswap V3. The vault system supports multiple vaults per user, a tier system linked to SENT token holdings, and tracks profit/trade statistics globally and per-vault.

The contract is extremely young — deployed just one day before this analysis. Despite this, it already has 85 users and 162 trades with ~5 ETH deposited. The reported profit of ~0.018 ETH across 162 trades represents approximately 0.35% return on total deposits.

The fundamental architecture is a custodial fund where:

  • Users deposit ETH and trust the keeper to trade profitably
  • The keeper has complete discretion over trade timing, direction, token selection, and amounts
  • There is no on-chain strategy, no automated triggers, and no user approval mechanism
  • Owner and keeper are currently the same single EOA
  • No timelock, no Multisig, no governance

The trade execution pattern observed shows the keeper swapping user ETH to USDC and USDT through Uniswap V3's 0.05% fee tier pools, with trade sizes of 0.008–0.2 ETH per execution. Internal transactions confirm ETH flows to the WETH contract (wrapping) and a flat 0.005 ETH fee to the fee recipient on each deposit.

This analysis was performed for educational purposes based on bytecode decompilation and transaction pattern observation. It should not be considered an official security audit or financial advice.


This contract appears to be part of the Sentinel project ecosystem. The SENT token referenced in storage (0xe88BaAB9...aDc304) is the same Sentinel token analyzed previously.

Sentinel Project pages:


References

RESOURCE NOTES
Etherscan Contract Page Transaction history and state verification
4byte Directory Function selector to signature mapping
Uniswap V3 SwapRouter Swap execution target
WETH9 Contract Canonical Wrapped ETH
Mastering Ethereum Reference for EVM opcodes and storage layout

Change Log

DATE AUTHOR NOTES
2026-03-29 Artificial. Generated by robots. Gas: 75 tok
2026-03-29 Denizen. Reviewed, edited, and curated by humans.