Skip to content

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 0x1aa0c77d207cd2e20dc00523ee0511ac6514aeb3 (etherscan)
Network Ethereum Mainnet
Analysis Date 2026-01-24

Function Selectors

SELECTOR FUNCTION SIGNATURE CATEGORY
0x52019b98 batchSetDaySchedule(uint8[],uint256[],uint256[]) Admin
0x80230aab setDayPercent(uint8,uint256) Admin
0x983becfb setDayAmount(uint8,uint256) Admin
0x715018a6 renounceOwnership() Admin
0xf2fde38b transferOwnership(address) Admin
0x8da5cb5b owner() View
0x0b248c1c dayInfo(uint8) View
0x1036bbe2 MAX_PERCENT() View
0x7b1aa7de MAX_DAY() View
0xa51b9533 getPercent(uint8) View
0xb0ea6a72 getAmount(uint8) View
0xde7e88f9 getAmountRange(uint8,uint8) View
0xf1ab99d6 getPercentRange(uint8,uint8) View

Summary

CATEGORY NUM FUNCTIONS
Total Functions 13
User Functions 0
Admin Functions 5
View Functions 8

Admin Functions

Function: batchSetDaySchedule(uint8[],uint256[],uint256[])

Batch configure day schedule for multiple days in a single transaction. This is the primary method used to set up or update the schedule. All 9 post-deployment transactions called this function.

ATTRIBUTE VALUE
Selector 0x52019b98
Parameters days (uint8[]), percents (uint256[]), amounts (uint256[])
Access Admin (onlyOwner)
FLAG OBSERVATION
Owner can modify any day's schedule at any time with no delay
Changes propagate immediately to consumer contracts
Input validation prevents day > 100 and percent > 1,000,000
Array length mismatch check prevents partial configurations
CONDITION REQUIREMENT
Caller Must be contract owner
Array lengths days.length == percents.length == amounts.length
Day range Each day ≤ 100 (MAX_DAY)
Percent range Each percent ≤ 1,000,000 (MAX_PERCENT)
sequenceDiagram
    actor Owner
    participant Config as Day Percent Manager

    Owner->>Config: batchSetDaySchedule([1,2], [43500,52100], [230222,334111])
    Config->>Config: Check onlyOwner
    Config->>Config: Validate array lengths match

    loop For each day
        Config->>Config: Validate day ≤ 100
        Config->>Config: Validate percent ≤ 1,000,000
        Config->>Config: Store DaySchedule struct
        Config->>Config: Emit DayPercentUpdated
        Config->>Config: Emit DayAmountUpdated
    end

    Config->>Config: Emit BatchScheduleUpdated
    Config-->>Owner: Success
STEP ACTION
1 Validate caller is owner
2 Check all arrays have matching lengths
3 Loop through each day: validate bounds
4 Store DaySchedule struct (percent + amount) to mapping
5 Emit DayPercentUpdated event per day
6 Emit DayAmountUpdated event per day
7 Emit BatchScheduleUpdated event with all data
VARIABLE CHANGE
_daySchedules[day].percent Set to percents[i] for each day
_daySchedules[day].amount Set to amounts[i] for each day
CONDITION REVERT MESSAGE
Caller not owner OwnableUnauthorizedAccount(address)
Array length mismatch "Array length mismatch"
Day > 100 "Day out of range"
Percent > 1,000,000 "Percent out of range"
function batchSetDaySchedule(
    uint8[] calldata days,
    uint256[] calldata percents,
    uint256[] calldata amounts
) external onlyOwner {
    require(
        days.length == percents.length && percents.length == amounts.length,
        "Array length mismatch"
    );

    uint256 length = days.length;
    for (uint256 i = 0; i < length; i++) {
        uint8 day = days[i];
        uint256 percent = percents[i];
        uint256 amount = amounts[i];

        require(day <= MAX_DAY, "Day out of range");
        require(percent <= MAX_PERCENT, "Percent out of range");

        _daySchedules[day] = DaySchedule({
            percent: percent,
            amount: amount
        });

        emit DayPercentUpdated(day, percent);
        emit DayAmountUpdated(day, amount);
    }

    emit BatchScheduleUpdated(days, percents, amounts);
}

Function: setDayPercent(uint8,uint256)

Update only the percentage value for a specific day without changing the amount.

ATTRIBUTE VALUE
Selector 0x80230aab
Parameters day (uint8), percent (uint256)
Access Admin (onlyOwner)
CONDITION REQUIREMENT
Caller Must be contract owner
Day range day ≤ 100
Percent range percent ≤ 1,000,000
VARIABLE CHANGE
_daySchedules[day].percent Set to new percent value
CONDITION REVERT MESSAGE
Caller not owner OwnableUnauthorizedAccount(address)
Day > 100 "Day out of range"
Percent > 1,000,000 "Percent out of range"
function setDayPercent(uint8 day, uint256 percent) external onlyOwner {
    require(day <= MAX_DAY, "Day out of range");
    require(percent <= MAX_PERCENT, "Percent out of range");

    _daySchedules[day].percent = percent;

    emit DayPercentUpdated(day, percent);
}

Function: setDayAmount(uint8,uint256)

Update only the amount value for a specific day without changing the percentage.

ATTRIBUTE VALUE
Selector 0x983becfb
Parameters day (uint8), amount (uint256)
Access Admin (onlyOwner)
FLAG OBSERVATION
No maximum validation on amount (unlike percent which caps at 1,000,000)
CONDITION REQUIREMENT
Caller Must be contract owner
Day range day ≤ 100
VARIABLE CHANGE
_daySchedules[day].amount Set to new amount value
CONDITION REVERT MESSAGE
Caller not owner OwnableUnauthorizedAccount(address)
Day > 100 "Day out of range"
function setDayAmount(uint8 day, uint256 amount) external onlyOwner {
    require(day <= MAX_DAY, "Day out of range");

    _daySchedules[day].amount = amount;

    emit DayAmountUpdated(day, amount);
}

Function: renounceOwnership()

Permanently remove ownership control by setting owner to address(0). This is an irreversible operation that freezes all administrative functions forever.

ATTRIBUTE VALUE
Selector 0x715018a6
Parameters None
Access Admin (onlyOwner)
FLAG OBSERVATION
Permanent and irreversible - cannot be undone
Freezes all admin functions forever
No confirmation or timelock before execution
VARIABLE CHANGE
_owner Set to address(0)
CONDITION REVERT MESSAGE
Caller not owner OwnableUnauthorizedAccount(address)
function renounceOwnership() external onlyOwner {
    _transferOwnership(address(0));
}

Function: transferOwnership(address)

Transfer ownership to a new address, granting them full administrative control over the day percent configuration.

ATTRIBUTE VALUE
Selector 0xf2fde38b
Parameters newOwner (address)
Access Admin (onlyOwner)
CONDITION REQUIREMENT
Caller Must be current owner
New owner Cannot be address(0)
VARIABLE CHANGE
_owner Set to newOwner address
CONDITION REVERT MESSAGE
Caller not owner OwnableUnauthorizedAccount(address)
newOwner is address(0) OwnableInvalidOwner(address(0))
function transferOwnership(address newOwner) external onlyOwner {
    if (newOwner == address(0)) {
        revert OwnableInvalidOwner(address(0));
    }
    _transferOwnership(newOwner);
}

View Functions

Function: owner()

Returns the current contract owner address.

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

Function: dayInfo(uint8)

Retrieve both percent and amount for a specific day in a single call.

ATTRIBUTE VALUE
Selector 0x0b248c1c
Parameters day (uint8)
Access Public (view)
Returns percent (uint256), amount (uint256)
FLAG OBSERVATION
Does NOT validate day ≤ 100; returns (0, 0) for unconfigured days
function dayInfo(uint8 day) external view returns (uint256 percent, uint256 amount) {
    return (_daySchedules[day].percent, _daySchedules[day].amount);
}

Function: MAX_PERCENT()

Returns the maximum allowed percentage value constant (1,000,000 representing 100%).

ATTRIBUTE VALUE
Selector 0x1036bbe2
Parameters None
Access Public (view)
Returns uint256 (always 1,000,000)
uint256 public constant MAX_PERCENT = 1_000_000;

Function: MAX_DAY()

Returns the maximum allowed day number constant (100).

ATTRIBUTE VALUE
Selector 0x7b1aa7de
Parameters None
Access Public (view)
Returns uint8 (always 100)
uint8 public constant MAX_DAY = 100;

Function: getPercent(uint8)

Get the percentage value for a specific day.

ATTRIBUTE VALUE
Selector 0xa51b9533
Parameters day (uint8)
Access Public (view)
Returns uint256
CONDITION REQUIREMENT
Day range day ≤ 100
CONDITION REVERT MESSAGE
Day > 100 "Day out of range"
function getPercent(uint8 day) external view returns (uint256) {
    require(day <= MAX_DAY, "Day out of range");
    return _daySchedules[day].percent;
}

Function: getAmount(uint8)

Get the amount value for a specific day.

ATTRIBUTE VALUE
Selector 0xb0ea6a72
Parameters day (uint8)
Access Public (view)
Returns uint256
CONDITION REQUIREMENT
Day range day ≤ 100
CONDITION REVERT MESSAGE
Day > 100 "Day out of range"
function getAmount(uint8 day) external view returns (uint256) {
    require(day <= MAX_DAY, "Day out of range");
    return _daySchedules[day].amount;
}

Function: getPercentRange(uint8,uint8)

Retrieve percentage values for a continuous range of days in a single call.

ATTRIBUTE VALUE
Selector 0xf1ab99d6
Parameters start (uint8), end (uint8)
Access Public (view)
Returns uint256[]
CONDITION REQUIREMENT
Range order start ≤ end
Upper bound end ≤ 100
CONDITION REVERT MESSAGE
start > end "start > end"
end > 100 "end out of range"
function getPercentRange(uint8 start, uint8 end) external view returns (uint256[] memory) {
    require(start <= end, "start > end");
    require(end <= MAX_DAY, "end out of range");

    uint256 length = uint256(end - start) + 1;
    uint256[] memory percents = new uint256[](length);

    for (uint256 i = 0; i < length; i++) {
        uint8 day = start + uint8(i);
        percents[i] = _daySchedules[day].percent;
    }

    return percents;
}

Function: getAmountRange(uint8,uint8)

Retrieve amount values for a continuous range of days in a single call.

ATTRIBUTE VALUE
Selector 0xde7e88f9
Parameters start (uint8), end (uint8)
Access Public (view)
Returns uint256[]
CONDITION REQUIREMENT
Range order start ≤ end
Upper bound end ≤ 100
CONDITION REVERT MESSAGE
start > end "start > end"
end > 100 "end out of range"
function getAmountRange(uint8 start, uint8 end) external view returns (uint256[] memory) {
    require(start <= end, "start > end");
    require(end <= MAX_DAY, "end out of range");

    uint256 length = uint256(end - start) + 1;
    uint256[] memory amounts = new uint256[](length);

    for (uint256 i = 0; i < length; i++) {
        uint8 day = start + uint8(i);
        amounts[i] = _daySchedules[day].amount;
    }

    return amounts;
}