Functions
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 | 0x33184cD3E5F9D27C6E102Da6BE33e779528A606D (etherscan) |
| Network | Ethereum Mainnet |
| Analysis Date | 2026-01-23 |
Function Selectors
| SELECTOR | FUNCTION SIGNATURE | CATEGORY |
|---|---|---|
0x4e71d92d |
claim() |
User |
0xfd32ea70 |
canClaim(address) |
View |
0x5c975abb |
paused() |
View |
0x8da5cb5b |
owner() |
View |
0x0fb50c26 |
claimingEnabled() |
View |
0x9d97e2bb |
flexibleAllocation() |
View |
0x73b2e80e |
hasClaimed(address) |
View |
0xa074696a |
getEligibilityStatus(address) |
View |
0x8456cb59 |
pause() |
Admin |
0x3f4ba83a |
unpause() |
Admin |
0x28c30c07 |
setClaimingEnabled(bool) |
Admin |
0xba2f0e4c |
setFlexibleAllocation(address) |
Admin |
0x2b2b14a4 |
setEligibilityStatus(address,bool) |
Admin |
0x360cbe3e |
batchSetEligibilityStatus(address[],bool[]) |
Admin |
0xf2fde38b |
transferOwnership(address) |
Admin |
Summary
| CATEGORY | NUM FUNCTIONS |
|---|---|
| Total Functions | 15 |
| User Functions | 1 |
| Admin Functions | 6 |
| View Functions | 7 |
| Internal/Private | 1 (estimated) |
User Functions
Function: claim()
Primary user function that allows eligible addresses to register a claim. Does not transfer tokens or ETH—only marks the address as having claimed.
| ATTRIBUTE | VALUE |
|---|---|
| Selector | 0x4e71d92d |
| Parameters | None |
| Access | Public, non-payable |
| Modifiers | Pause check, claim status check |
| FLAG | OBSERVATION |
|---|---|
| △ | Claims are permanent and cannot be undone |
| △ | Depends on external contract for allocation verification |
| ☑ | Emits Claimed event for off-chain tracking |
| ☒ | Does NOT transfer tokens or ETH |
| CONDITION | REQUIREMENT |
|---|---|
| Contract not paused | paused() == false |
| Not already claimed | hasClaimed[msg.sender] == false |
| Sufficient allocation | FlexibleAllocation.getAllocation(msg.sender) >= 1 |
| STEP | ACTION |
|---|---|
| 1 | Check contract is not paused |
| 2 | Check address has not already claimed |
| 3 | Call external FlexibleAllocation.getAllocation(msg.sender) |
| 4 | Verify allocation >= 1 |
| 5 | Set hasClaimed[msg.sender] = true |
| 6 | Emit Claimed(msg.sender, allocationAmount) |
| VARIABLE | CHANGE |
|---|---|
hasClaimed[msg.sender] |
false → true (permanent) |
Claimed(address indexed account, uint256 allocation)
| CONDITION | ERROR MESSAGE |
|---|---|
| Contract is paused | "Contract is paused" |
| Already claimed | "Already claimed" |
| Allocation < 1 | "Insufficient allocation - must have at least 1" |
View Functions
Function: canClaim(address)
Checks if an address is eligible to claim by verifying both hasClaimed status and allocation amount.
| ATTRIBUTE | VALUE |
|---|---|
| Selector | 0xfd32ea70 |
| Parameters | address - The address to check |
| Returns | bool - True if can claim, false otherwise |
| Access | Public view |
Function: hasClaimed(address)
Returns whether an address has already claimed.
| ATTRIBUTE | VALUE |
|---|---|
| Selector | 0x73b2e80e |
| Parameters | address - The address to check |
| Returns | bool - True if claimed, false otherwise |
| Access | Public view |
| Storage | Reads from slot 1 |
Function: getEligibilityStatus(address)
Returns eligibility status for an address. Reads from the same storage slot as hasClaimed.
| ATTRIBUTE | VALUE |
|---|---|
| Selector | 0xa074696a |
| Parameters | address - The address to check |
| Returns | bool - Eligibility status |
| Access | Public view |
| Storage | Reads from slot 1 (same as hasClaimed) |
| FLAG | OBSERVATION |
|---|---|
| △ | Reads from same storage as hasClaimed—cannot distinguish between "ineligible" and "already claimed" |
Function: paused()
Returns current pause state of the contract.
| ATTRIBUTE | VALUE |
|---|---|
| Selector | 0x5c975abb |
| Parameters | None |
| Returns | bool - True if paused, false otherwise |
| Access | Public view |
| Storage | Reads from slot 2, byte 20 |
Function: owner()
Returns current owner address.
| ATTRIBUTE | VALUE |
|---|---|
| Selector | 0x8da5cb5b |
| Parameters | None |
| Returns | address - Current owner |
| Access | Public view |
| Storage | Reads from slot 2, bytes 0-19 |
Function: claimingEnabled()
Returns whether claiming is globally enabled.
| ATTRIBUTE | VALUE |
|---|---|
| Selector | 0x0fb50c26 |
| Parameters | None |
| Returns | bool - True if enabled, false otherwise |
| Access | Public view |
| Storage | Reads from slot 2, byte 21 |
| FLAG | OBSERVATION |
|---|---|
| △ | This flag exists in storage but does NOT appear to be enforced in claim() logic |
Function: flexibleAllocation()
Returns address of the FlexibleAllocation contract used for allocation verification.
| ATTRIBUTE | VALUE |
|---|---|
| Selector | 0x9d97e2bb |
| Parameters | None |
| Returns | address - FlexibleAllocation contract address |
| Access | Public view |
| Storage | Reads from slot 0 |
Admin Functions
Function: pause()
Pauses the contract, preventing claims.
| ATTRIBUTE | VALUE |
|---|---|
| Selector | 0x8456cb59 |
| Parameters | None |
| Access | Owner only |
| Preconditions | Contract must not already be paused |
| STEP | ACTION |
|---|---|
| 1 | Verify msg.sender == owner |
| 2 | Verify contract is not already paused |
| 3 | Set paused = true |
| 4 | Emit Paused(msg.sender) |
Paused(address account)
Function: unpause()
Unpauses the contract, allowing claims.
| ATTRIBUTE | VALUE |
|---|---|
| Selector | 0x3f4ba83a |
| Parameters | None |
| Access | Owner only |
| Preconditions | Contract must be paused |
| STEP | ACTION |
|---|---|
| 1 | Verify msg.sender == owner |
| 2 | Verify contract is paused |
| 3 | Set paused = false |
| 4 | Emit Unpaused(msg.sender) |
Unpaused(address account)
Function: setClaimingEnabled(bool)
Enables or disables claiming globally.
| ATTRIBUTE | VALUE |
|---|---|
| Selector | 0x28c30c07 |
| Parameters | bool enabled - New enabled state |
| Access | Owner only |
| STEP | ACTION |
|---|---|
| 1 | Verify msg.sender == owner |
| 2 | Set claimingEnabled = enabled |
| 3 | Emit ClaimingEnabledUpdated(enabled) |
ClaimingEnabledUpdated(bool enabled)
Function: setFlexibleAllocation(address)
Changes the FlexibleAllocation contract reference.
| ATTRIBUTE | VALUE |
|---|---|
| Selector | 0xba2f0e4c |
| Parameters | address newAllocation - New allocation contract address |
| Access | Owner only |
| Preconditions | newAllocation != address(0) |
| STEP | ACTION |
|---|---|
| 1 | Verify msg.sender == owner |
| 2 | Verify newAllocation != address(0) |
| 3 | Store old address |
| 4 | Set flexibleAllocation = newAllocation |
| 5 | Emit FlexibleAllocationUpdated(oldAddress, newAddress) |
FlexibleAllocationUpdated(address indexed oldAddress, address indexed newAddress)
| FLAG | OBSERVATION |
|---|---|
| △ | Changing this address mid-operation could affect active claimers |
| △ | No timelock or delay—takes effect immediately |
Function: setEligibilityStatus(address, bool)
Sets eligibility status for a single address.
| ATTRIBUTE | VALUE |
|---|---|
| Selector | 0x2b2b14a4 |
| Parameters | address account - Address to modifybool status - New eligibility status |
| Access | Owner only |
| Preconditions | account != address(0) |
| STEP | ACTION |
|---|---|
| 1 | Verify msg.sender == owner |
| 2 | Verify account != address(0) |
| 3 | Set hasClaimed[account] = status |
| 4 | Emit EligibilityStatusUpdated(account, status) |
EligibilityStatusUpdated(address indexed account, bool status)
| FLAG | OBSERVATION |
|---|---|
| △ | Writes to same storage as hasClaimed—cannot distinguish purpose |
| △ | Setting status=false makes address appear "already claimed" |
| ☒ | Does NOT appear to be checked in claim() logic flow |
Function: batchSetEligibilityStatus(address[], bool[])
Sets eligibility status for multiple addresses in a single transaction.
| ATTRIBUTE | VALUE |
|---|---|
| Selector | 0x360cbe3e |
| Parameters | address[] accounts - Addresses to modifybool[] statuses - New eligibility statuses |
| Access | Owner only |
| Preconditions | Arrays must be equal length and non-empty |
| STEP | ACTION |
|---|---|
| 1 | Verify msg.sender == owner |
| 2 | Verify arrays.length > 0 |
| 3 | Verify accounts.length == statuses.length |
| 4 | For each index: verify account != address(0) |
| 5 | For each index: set hasClaimed[account] = status |
| 6 | For each index: emit EligibilityStatusUpdated(account, status) |
EligibilityStatusUpdated(address indexed account, bool status)(emitted for each address)
| CONDITION | ERROR MESSAGE |
|---|---|
| Empty arrays | "Empty accounts array" |
| Length mismatch | "Arrays length mismatch" |
| Zero address | "Invalid account address" |
Function: transferOwnership(address)
Transfers ownership to a new address.
| ATTRIBUTE | VALUE |
|---|---|
| Selector | 0xf2fde38b |
| Parameters | address newOwner - New owner address |
| Access | Owner only |
| Preconditions | newOwner != address(0) |
| STEP | ACTION |
|---|---|
| 1 | Verify msg.sender == owner |
| 2 | Verify newOwner != address(0) |
| 3 | Store old owner |
| 4 | Set owner = newOwner |
| 5 | Emit OwnershipTransferred(oldOwner, newOwner) |
OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
| FLAG | OBSERVATION |
|---|---|
| ☒ | No renounceOwnership function—ownership cannot be burned |
| △ | No timelock or delay—takes effect immediately |
| △ | No multisig requirement—single owner has full control |
Verification Commands
# View functions - anyone can call
cast call 0x33184cD3E5F9D27C6E102Da6BE33e779528A606D "owner()"
cast call 0x33184cD3E5F9D27C6E102Da6BE33e779528A606D "paused()"
cast call 0x33184cD3E5F9D27C6E102Da6BE33e779528A606D "claimingEnabled()"
cast call 0x33184cD3E5F9D27C6E102Da6BE33e779528A606D "flexibleAllocation()"
cast call 0x33184cD3E5F9D27C6E102Da6BE33e779528A606D "hasClaimed(address)" <ADDRESS>
cast call 0x33184cD3E5F9D27C6E102Da6BE33e779528A606D "canClaim(address)" <ADDRESS>
cast call 0x33184cD3E5F9D27C6E102Da6BE33e779528A606D "getEligibilityStatus(address)" <ADDRESS>
# Storage verification
cast storage 0x33184cD3E5F9D27C6E102Da6BE33e779528A606D 0 # flexibleAllocation
cast storage 0x33184cD3E5F9D27C6E102Da6BE33e779528A606D 2 # owner + paused + claimingEnabled