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: 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: 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: 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" |
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: 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" |
View Functions
Function: name()
Function: symbol()
Function: decimals()
Function: totalSupply()
Function: TOTAL_SUPPLY()
Function: balanceOf(address)
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 |