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: 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: 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: 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)) |
View Functions
Function: 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: MAX_PERCENT()
Function: MAX_DAY()
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: 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: 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;
}