Skip to content

Functions

DISCLAIMER // NFA // DYOR

This analysis is based on decompiled bytecode and 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, but 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 0xe88BAab9192a3Cb2C0a50182AB911506e5aDc304 (etherscan)
Network Ethereum Mainnet
Analysis Date 2025-12-26

Function Selectors

SELECTOR FUNCTION SIGNATURE CATEGORY
0x06fdde03 name() View
0x095ea7b3 approve(address,uint256) User
0x18160ddd totalSupply() View
0x1ed77dc8 presaleWallet() View
0x23b872dd transferFrom(address,address,uint256) User
0x313ce567 decimals() View
0x392e53cd isInitialized() View
0x42966c68 burn(uint256) User
0x70a08231 balanceOf(address) View
0x715018a6 renounceOwnership() Admin
0x81d136cb presaleAllocation() View
0x8da5cb5b owner() View
0x902d55a5 TOTAL_SUPPLY() View
0x95d89b41 symbol() View
0x9c1f80a9 initializeMinting(uint256,address,uint256) Admin
0xa9059cbb transfer(address,uint256) User
0xdd62ed3e allowance(address,address) View
0xf2fde38b transferOwnership(address) Admin

Summary

CATEGORY NUM FUNCTIONS
Total Functions 18
User Functions 4
Admin Functions 3
View Functions 11

User Functions

Function: transfer(address,uint256)

Transfers tokens from the caller to a recipient address. This is the standard ERC-20 transfer function.

ATTRIBUTE VALUE
Selector 0xa9059cbb
Parameters to (address), amount (uint256)
Access Public, anyone with balance
Returns bool - always true on success
FLAG OBSERVATION
Standard ERC-20 implementation
Emits Transfer event
No transfer fees or restrictions
CONDITION REQUIREMENT
Sender balance Must have sufficient tokens
Recipient Cannot be zero address
Sender Cannot be zero address
STEP ACTION
1 Validate sender is not zero address
2 Validate recipient is not zero address
3 Decrease sender balance
4 Increase recipient balance
5 Emit Transfer event
VARIABLE CHANGE
_balances[from] Decreases by amount
_balances[to] Increases by amount
CONDITION REVERT MESSAGE
from == address(0) "ERC20InvalidSender"
to == address(0) "ERC20InvalidReceiver"
_balances[from] < amount "ERC20InsufficientBalance"
function transfer(address to, uint256 amount) public returns (bool) {
    _transfer(msg.sender, to, amount);
    return true;
}

Function: approve(address,uint256)

Approves a spender to transfer tokens on behalf of the caller. This enables delegated transfers via transferFrom.

ATTRIBUTE VALUE
Selector 0x095ea7b3
Parameters spender (address), amount (uint256)
Access Public, anyone
Returns bool - always true on success
FLAG OBSERVATION
Standard ERC-20 implementation
Emits Approval event
Allows unlimited approval (type(uint256).max)
CONDITION REQUIREMENT
Owner Cannot be zero address
Spender Cannot be zero address
STEP ACTION
1 Validate owner is not zero address
2 Validate spender is not zero address
3 Set allowance mapping
4 Emit Approval event
VARIABLE CHANGE
_allowances[owner][spender] Set to amount
CONDITION REVERT MESSAGE
owner == address(0) "ERC20InvalidApprover"
spender == address(0) "ERC20InvalidSpender"
function approve(address spender, uint256 amount) public returns (bool) {
    _approve(msg.sender, spender, amount, true);
    return true;
}

Function: transferFrom(address,address,uint256)

Transfers tokens from one address to another using a previously approved allowance. The caller must have sufficient allowance from the source address.

ATTRIBUTE VALUE
Selector 0x23b872dd
Parameters from (address), to (address), amount (uint256)
Access Public, requires allowance
Returns bool - always true on success
FLAG OBSERVATION
Standard ERC-20 implementation
Unlimited allowance (max uint256) skips deduction
Emits Transfer event
CONDITION REQUIREMENT
Allowance Caller must have sufficient allowance from from
Balance from must have sufficient tokens
Addresses Neither from nor to can be zero
STEP ACTION
1 Check allowance (skip deduction if unlimited)
2 Deduct from allowance if not unlimited
3 Transfer tokens from sender to recipient
4 Emit Transfer event
VARIABLE CHANGE
_allowances[from][caller] Decreases by amount (unless unlimited)
_balances[from] Decreases by amount
_balances[to] Increases by amount
CONDITION REVERT MESSAGE
allowance < amount "ERC20InsufficientAllowance"
from == address(0) "ERC20InvalidSender"
to == address(0) "ERC20InvalidReceiver"
_balances[from] < amount "ERC20InsufficientBalance"
function transferFrom(address from, address to, uint256 amount) public returns (bool) {
    _spendAllowance(from, msg.sender, amount);
    _transfer(from, to, amount);
    return true;
}

Function: burn(uint256)

Burns (permanently destroys) tokens from the caller's balance. This reduces both the caller's balance and the total supply.

ATTRIBUTE VALUE
Selector 0x42966c68
Parameters amount (uint256)
Access Public, anyone with balance
Returns None
FLAG OBSERVATION
Enables Deflationary tokenomics
Anyone can burn their own tokens
Emits Transfer event to address(0)
CONDITION REQUIREMENT
Balance Caller must have sufficient tokens
Caller Cannot be zero address
STEP ACTION
1 Validate caller is not zero address
2 Decrease caller balance
3 Decrease total supply
4 Emit Transfer event to address(0)
flowchart TD
    Start([burn called]) --> Check{Balance >= amount?}
    Check -->|No| Revert[Revert: Insufficient Balance]
    Check -->|Yes| Deduct[Deduct from caller balance]
    Deduct --> Supply[Decrease totalSupply]
    Supply --> Event[Emit Transfer to address 0]
    Event --> End([Success])

    style Revert fill:#ffe1e1
    style End fill:#e1ffe1
VARIABLE CHANGE
_balances[caller] Decreases by amount
_totalSupply Decreases by amount
CONDITION REVERT MESSAGE
caller == address(0) "ERC20InvalidSender"
_balances[caller] < amount "ERC20InsufficientBalance"
function burn(uint256 amount) public {
    _burn(msg.sender, amount);
}

Admin Functions

Function: initializeMinting(uint256,address,uint256)

One-time initialization function that creates the token supply and distributes it between the presale wallet and the owner. Can only be called once and only by the owner.

ATTRIBUTE VALUE
Selector 0x9c1f80a9
Parameters totalSupply (uint256), presaleWallet (address), presaleAllocation (uint256)
Access Owner only, one-time
Returns None
FLAG OBSERVATION
Can only be called once
Validates all parameters
Emits custom MintingInitialized event
No timelock or delay
CONDITION REQUIREMENT
Initialization isInitialized == false
Caller Must be owner
Total supply Must be greater than zero
Presale wallet Cannot be zero address
Presale allocation Cannot exceed total supply
STEP ACTION
1 Verify not already initialized
2 Validate total supply > 0
3 Validate presale wallet != address(0)
4 Validate presale allocation <= total supply
5 Set isInitialized = true
6 Store TOTAL_SUPPLY, presaleWallet, presaleAllocation
7 Mint presale allocation to presale wallet
8 Mint remaining to owner
9 Emit MintingInitialized event
flowchart TD
    Start([initializeMinting called]) --> Auth{Is caller owner?}
    Auth -->|No| Revert1[Revert: Unauthorized]
    Auth -->|Yes| Init{Already initialized?}
    Init -->|Yes| Revert2[Revert: Already initialized]
    Init -->|No| Validate[Validate parameters]
    Validate --> SetInit[Set isInitialized = true]
    SetInit --> Store[Store supply values]
    Store --> MintPresale{Presale > 0?}
    MintPresale -->|Yes| Mint1[Mint to presale wallet]
    MintPresale -->|No| CalcOwner
    Mint1 --> CalcOwner[Calculate owner allocation]
    CalcOwner --> MintOwner{Owner alloc > 0?}
    MintOwner -->|Yes| Mint2[Mint to owner]
    MintOwner -->|No| Event
    Mint2 --> Event[Emit MintingInitialized]
    Event --> End([Success])

    style Revert1 fill:#ffe1e1
    style Revert2 fill:#ffe1e1
    style End fill:#e1ffe1
VARIABLE CHANGE
_isInitialized Set to true
TOTAL_SUPPLY Set to total supply parameter
presaleWallet Set to presale wallet parameter
presaleAllocation Set to presale allocation parameter
_totalSupply Set to total supply
_balances[presaleWallet] Set to presale allocation
_balances[owner] Set to (totalSupply - presaleAllocation)
CONDITION REVERT MESSAGE
caller != owner "OwnableUnauthorizedAccount"
isInitialized == true "Minting already initialized"
totalSupply == 0 "Total supply must be greater than zero"
presaleWallet == address(0) "Presale wallet cannot be zero address"
presaleAllocation > totalSupply "Presale allocation exceeds total supply"
function initializeMinting(
    uint256 _totalSupply,
    address _presaleWallet,
    uint256 _presaleAllocation
) public onlyOwner {
    require(!_isInitialized, "Minting already initialized");
    require(_totalSupply > 0, "Total supply must be greater than zero");
    require(_presaleWallet != address(0), "Presale wallet cannot be zero address");
    require(_presaleAllocation <= _totalSupply, "Presale allocation exceeds total supply");

    _isInitialized = true;
    TOTAL_SUPPLY = _totalSupply;
    presaleWallet = _presaleWallet;
    presaleAllocation = _presaleAllocation;

    if (_presaleAllocation > 0) {
        _mint(_presaleWallet, _presaleAllocation);
    }

    uint256 ownerAllocation = _totalSupply - _presaleAllocation;
    if (ownerAllocation > 0) {
        _mint(msg.sender, ownerAllocation);
    }

    emit MintingInitialized(_totalSupply, _presaleWallet, _presaleAllocation, ownerAllocation);
}

Function: transferOwnership(address)

Transfers ownership of the contract to a new address. Only the current owner can call this function.

ATTRIBUTE VALUE
Selector 0xf2fde38b
Parameters newOwner (address)
Access Owner only
Returns None
FLAG OBSERVATION
Standard Ownable pattern
Emits OwnershipTransferred event
No timelock - immediate effect
CONDITION REQUIREMENT
Caller Must be current owner
New owner Cannot be zero address
STEP ACTION
1 Verify caller is owner
2 Verify new owner is not zero address
3 Update owner to new address
4 Emit OwnershipTransferred event
VARIABLE CHANGE
_owner Set to newOwner
CONDITION REVERT MESSAGE
caller != owner "OwnableUnauthorizedAccount"
newOwner == address(0) "OwnableInvalidOwner"
function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0), "OwnableInvalidOwner");
    _transferOwnership(newOwner);
}

Function: renounceOwnership()

Permanently renounces ownership of the contract. After calling this function, no address will be the owner, and all owner-only functions will be permanently disabled.

ATTRIBUTE VALUE
Selector 0x715018a6
Parameters None
Access Owner only
Returns None
FLAG OBSERVATION
Irreversible action
Emits OwnershipTransferred event
Standard Ownable pattern
CONDITION REQUIREMENT
Caller Must be current owner
STEP ACTION
1 Verify caller is owner
2 Set owner to address(0)
3 Emit OwnershipTransferred event
VARIABLE CHANGE
_owner Set to address(0)
CONDITION REVERT MESSAGE
caller != owner "OwnableUnauthorizedAccount"
function renounceOwnership() public onlyOwner {
    _transferOwnership(address(0));
}

View Functions

Function: name()

Returns the token name.

ATTRIBUTE VALUE
Selector 0x06fdde03
Parameters None
Access Public view
Returns string - "Sentinel"
function name() public view returns (string memory) {
    return _name;
}

Function: symbol()

Returns the token symbol.

ATTRIBUTE VALUE
Selector 0x95d89b41
Parameters None
Access Public view
Returns string - "SENT"
function symbol() public view returns (string memory) {
    return _symbol;
}

Function: decimals()

Returns the number of decimals used for token amounts.

ATTRIBUTE VALUE
Selector 0x313ce567
Parameters None
Access Public pure
Returns uint8 - 18
function decimals() public pure returns (uint8) {
    return 18;
}

Function: totalSupply()

Returns the current total supply of tokens. This value decreases when tokens are burned.

ATTRIBUTE VALUE
Selector 0x18160ddd
Parameters None
Access Public view
Returns uint256 - current circulating supply
function totalSupply() public view returns (uint256) {
    return _totalSupply;
}

Function: TOTAL_SUPPLY()

Returns the original total supply set at initialization. This value never changes, unlike totalSupply().

ATTRIBUTE VALUE
Selector 0x902d55a5
Parameters None
Access Public view
Returns uint256 - 3,911,241,716 * 10^18
function TOTAL_SUPPLY() public view returns (uint256) {
    return TOTAL_SUPPLY;
}

Function: balanceOf(address)

Returns the token balance of a specific address.

ATTRIBUTE VALUE
Selector 0x70a08231
Parameters account (address)
Access Public view
Returns uint256 - balance in wei
function balanceOf(address account) public view returns (uint256) {
    return _balances[account];
}

Function: allowance(address,address)

Returns the remaining allowance that a spender can transfer from an owner.

ATTRIBUTE VALUE
Selector 0xdd62ed3e
Parameters owner (address), spender (address)
Access Public view
Returns uint256 - remaining allowance
function allowance(address owner_, address spender) public view returns (uint256) {
    return _allowances[owner_][spender];
}

Function: owner()

Returns the current owner address.

ATTRIBUTE VALUE
Selector 0x8da5cb5b
Parameters None
Access Public view
Returns address - current owner
function owner() public view returns (address) {
    return _owner;
}

Function: presaleWallet()

Returns the presale wallet address that received the presale allocation.

ATTRIBUTE VALUE
Selector 0x1ed77dc8
Parameters None
Access Public view
Returns address - presale wallet
function presaleWallet() public view returns (address) {
    return presaleWallet;
}

Function: presaleAllocation()

Returns the amount of tokens allocated to the presale wallet at initialization.

ATTRIBUTE VALUE
Selector 0x81d136cb
Parameters None
Access Public view
Returns uint256 - presale allocation in wei
function presaleAllocation() public view returns (uint256) {
    return presaleAllocation;
}

Function: isInitialized()

Returns whether the minting has been initialized.

ATTRIBUTE VALUE
Selector 0x392e53cd
Parameters None
Access Public view
Returns bool - true if initialized
function isInitialized() public view returns (bool) {
    return _isInitialized;
}