Artifacts
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
| METADATA | |
|---|---|
| Contract Address | 0x8d33666c83f7f17a1b8dc0e950d8ff2e7e37c563 (etherscan) |
| Network | Ethereum Mainnet |
| Analysis Date | 2025-12-26 |
Runtime Bytecode
The deployed contract bytecode fetched from the blockchain.
Source: Etherscan - Contract Code
Command:
Size: 12,329 bytes
Artifact: See /artifacts/8d33666c...37c563/bytecode.txt
Creation Bytecode
The full bytecode used to deploy the contract, including constructor code and arguments.
Source: Etherscan - Creation TX
Command:
export ETH_RPC_URL=https://eth.llamarpc.com
cast tx 0x2cdc2c5f3a0b2f0b85e6692b32cb791337fe9a6938785138ee0f409261b535d7 input
Constructor Arguments (decoded):
| PARAMETER | TYPE | VALUE |
|---|---|---|
| beneficiary | address | 0xbc6921A5C7e2f88E5fBC8f5ec100b13Dd0bD01fe |
Artifact: See /artifacts/8d33666c...37c563/creation_bytecode.txt
Reconstructed Source Code
Solidity source code reconstructed from bytecode analysis. This is an approximation based on function selectors, storage layout, and error messages found in the bytecode.
Not Verified Source
This is a reconstruction based on bytecode analysis and may not exactly match the original source code. It is provided for educational and analysis purposes only.
Source: Reconstructed from bytecode analysis using function selectors, storage slots, and error message strings.
Artifact: See /artifacts/8d33666c...37c563/SentinelPresale_reconstructed.sol
Key Components Identified:
| COMPONENT | CONFIDENCE | NOTES |
|---|---|---|
| Ownable pattern | High | Standard OpenZeppelin implementation |
| ReentrancyGuard | High | Slot 1 mutex pattern |
| Storage layout | High | Verified via direct reads |
| Function signatures | High | Matched against bytecode |
| Internal logic | Medium | Inferred from error messages |
Error Messages
Error strings extracted from the bytecode, useful for understanding function behavior.
| ERROR MESSAGE | LIKELY FUNCTION | MEANING |
|---|---|---|
| "Presale has ended" | buySentinelWithEth, buySentinelWithToken | Presale inactive |
| "Array length mismatch" | addSupportedTokens | Input array sizes don't match |
| "Rate must be greater than 0" | addSupportedTokens | Invalid rate value |
| "Sentinel already initialized" | initializeSentinel | One-time function already called |
| "Invalid address" | initializeSentinel | Address validation failed |
| "Token not supported" | buySentinelWithToken, removeSupportedTokens | Token not in whitelist |
| "Rate not set" | buySentinelWithToken, buySentinelWithEth | Token rate not configured |
| "Amount must be greater than 0" | buySentinelWithEth, buySentinelWithToken | Zero amount provided |
| "Use buySentinelWithEth for ETH" | buySentinelWithToken | Wrong function for ETH |
| "Sentinel amount too small" | buySentinelWithEth, buySentinelWithToken | Calculation resulted in 0 |
| "Presale is already active" | startPresale | Cannot start twice |
| "Use withdrawEth()" | withdrawToken | Wrong withdraw function |
| "Failed to send Ether" | withdrawEth, buySentinelWithEth | ETH transfer failed |
| "Presale already ended" | endPresale | Cannot end twice |
| "Use buy/stake with ETH" | receive() | Direct ETH sends rejected |
| "Function/method ID is not found" | fallback() | Unknown function called |
Function Selectors
All function selectors extracted from the bytecode dispatcher.
| SELECTOR | SIGNATURE | CATEGORY |
|---|---|---|
0x09069443 |
addSupportedTokens(address[],uint8[],uint256[]) | Admin |
0x09dac061 |
initializeSentinel(address) | Admin |
0x12efb3f4 |
SupportedTokens(address) | View |
0x1803751f |
mySentinelBought() | View |
0x22aa67e6 |
buySentinelWithToken(address,uint256) | User |
0x2575cdaa |
totalSentinelBought() | View |
0x2f48ab7d |
usdt() | View |
0x3246c689 |
TokenDecimals(address) | View |
0x3417fa5f |
TokenRates(address) | View |
0x38af3eed |
beneficiary() | View |
0x40c4cdb0 |
sentinelBoughtOf(address) | View |
0x54f63ee5 |
startPresale() | Admin |
0x60d938dc |
isPresaleActive() | View |
0x715018a6 |
renounceOwnership() | Admin |
0x7299a729 |
sentinelToken() | View |
0x8a5f1822 |
totalSentinelRaisedInUsdWei() | View |
0x8da5cb5b |
owner() | View |
0x9e281a98 |
withdrawToken(address,uint256) | Admin |
0x9f1166a0 |
buySentinelWithEth() | User |
0xa0ef91df |
withdrawEth() | Admin |
0xa43be57b |
endPresale() | Admin |
0xa80a50b9 |
removeSupportedTokens(address[]) | Admin |
0xb34a385f |
calculateSentinelAmount(address,uint256) | View |
0xb373fb9d |
totalSentinelRaised() | View |
0xc35fb403 |
SentinelBoughtTotal(address) | View |
0xc6290df0 |
lastTotalSentinelRaised() | View |
0xdc070657 |
setBeneficiary(address) | Admin |
0xeacd36ed |
getPresaleStats() | View |
0xf2fde38b |
transferOwnership(address) | Admin |
Storage Snapshot
Current storage values at time of analysis.
| SLOT | RAW VALUE | DECODED |
|---|---|---|
| 0 | 0x0000000000000000000000008758ca21d08c9bda75d6114614dce373bfd76968 |
owner |
| 1 | 0x0000000000000000000000000000000000000000000000000000000000000001 |
reentrancyLock = 1 |
| 2 | 0x000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7 |
usdt |
| 3 | 0x000000000000000000000000853319c1ebebd1e7ed38747e14e7affe255145c6 |
beneficiary |
| 4 | 0x0000000000000000000000000000000000000000000000000000000000000000 |
sentinelToken |
| 5 | 0x00000000000000000000000000000000000000000000000000000000d0267088 |
totalSentinelBought |
| 6 | 0x00000000000000000000000000000000000000000000000000000000d0267088 |
totalSentinelRaised |
| 7 | 0x0000000000000000000000000000000000000000000000000000000000000000 |
totalUsdWei = 0 |
| 8 | 0x0000000000000000000000000000000000000000000000000000000074b5aa70 |
lastRaised |
| 9 | 0x0000000000000000000000000000000000000000000000000000000000120000 |
packed state |
Related Addresses
| ADDRESS | TYPE | ROLE | NOTES |
|---|---|---|---|
0x8758Ca21d08c9bdA75D6114614DCE373bFD76968 |
EOA | Owner | Contract creator, high activity |
0x853319C1eBebD1e7eD38747e14e7affe255145c6 |
EOA | Beneficiary | Current funds recipient, ~1,048 ETH |
0xbc6921A5C7e2f88E5fBC8f5ec100b13Dd0bD01fe |
EOA | Original Beneficiary | Constructor argument, 0.001 ETH |
0xdAC17F958D2ee523a2206206994597C13D831ec7 |
Contract | USDT | Tether USD on mainnet |