eTrone Audit
Smart Contract Address: TEgpmzM9VwDKr33MDqBuXSQLLfBajVjB5a
Prepared By CubeBack Studio
Disclaimer
This text is not a call to participate in the project and it’s only a description of the smart contract work at the specified address. Remember that you do all the financial actions only at your own risk.
Description
Smart contract gives users an opportunity to invest to the contract any sum of money from 100 TRX and to receive dividends from 2% per day of the total sum of investments during 150 days.
Contractual bonus system allows to increase a daily percentage.
1. Hold bonus. There is profits growth by 0.1% per day if you're not withdrawing funds during 24 hours.
2. Fund bonus. Every participant's profit increases by 0.1% per 24 hours for each million of Tronos on contract balance.
3. Referral bonus. Your profit increases by 0.1% per 24 hours for each million of Tronos contributed by your referrals.
10% of each deposit is transferred to the owner's balance (TYQt6JNgPka7DSTYDYgM1EJUWYzbToNjJi)
A 5-level referral system allows to receive interest from the deposits of your referrals in amount of 5% - 3% - 2% - 1% - 1% from the sum of the deposit.
Variables
<line>: <name> - <description>
112: ONE_DAY
- один день в секундах.
113: PROFIT_DAYS
- период активности инвестиции.
114: MIN_DEPOSIT
- минимальная сума депозита.
115: MUL_EVERY
- критерий увеличения бонусов.
117: PERCENT_DIVIDEND
- базовый профит пользователей.
118: PERCENT_BONUS
- процент, который прибавится к ежедневному, при условии выполнения условий бонусов.
119: PERCENT_PROMOTE
- процент отчислений владельцу контракта.
120: PERCENT_REFERRAL
- процент реферальных вознаграждений.
122: totalInvested
- общая сумма инвестиций.
123: totalRewards
- общая сумма реферальных вознаграждений.
125: promote
- адрес владельца контракта.
126: users
- список зарегистрированных пользователей, содержит следующую информацию:
referrer
- адрес реферераstatus
- статус пользователя (true
- зарегистрирован |false
- не найден)referrals
- количество рефералов по уровнямrewards
- общая сумма реферальных вознагражденийturnover
- общая сумма реферальных инвестицийinvested
- общая сумма собственных инвестицийwithdrawn
- общая сумма выводов пользователяdeposits
- информация про каждый с депозитов (amount
- сумма депозита,date
- время депозита)balance
- текущий баланс реферальных начисленийlastDate
- время последнего вывода пользователя
Functional
<line>: <name> - <description>
132: constructor
- the function which activates upon creation of contract, establishes the owner of the contract (host of the sender) and interest from referral fees as well as initializes the main user.
147: checkUserStatus
- the function checks if the requested host exists in the list of contract users. Возвращает false
если пользователь еще не совершал депозит и тем самым не зарегистрировался в система или true
если пользователь найден.
151: referralsCountByLevel
- функция возвражает количество рефералов пользователя по конкретному уровню.
155: referralsCount
- функция возвращает количество рефералов пользователя по всем 5ти уровням.
165: getHoldBonus
- функция возвращает мультипликатор холд бонуса.
170: getFundBonus
- функция возвращает мультипликатор фондового бонуса.
174: getRefBonus
- функция возвращает мультипликатор реферального бонуса.
178: calculateProfit
- функция подсчитывает текущий профит пользователя от его инвестиций с учетом всех бонусов (191: uint256 bonus = getHoldBonus(userAddress) + getFundBonus() + getRefBonus(userAddress);
).
197: rewardReferrers
- функция, которая срабатывает в момент депозита. Начисляет реферерам вознаграждение за депозит согласно их уровню (201: users[referrer].balance += reward;)
и обновляет общую статистику вознаграждений (204: totalRewards += reward;)
.
211: register
- функция регистрации пользователя в системе, которая срабатывает при первом депозите. В случае успешного срабатывания - меняет статус пользователя (217: users[msg.sender].status = true;)
и обновляет цепочке рефереров количество их рефералов в структуре (224: users[referrer].referrals[i]++;)
.
232: deposit
- the function allows the user to create investment and, thus, to register in the system. The function takes any value of TRX, above or equal to the value of MIN_DEPOSIT
. The maximum possible number of deposits is restricted for one host. There can be no more than 100 deposits from one user in the system. In case of successful payment statistics of the user and the general contract investment statistics are updated. Referral rewards will be charged to all the referrers of the user who made a deposit. Its sum depends on the level of referrer and the sum of investment itself.
251: withdraw
- the function allows to withdraw funds from the internal balance of the contract. The sum of withdrawal depends on the result of function calculateProfit
fulfillment and referral balance. Successful function execution will reset to zero a hold bonus (258: users[msg.sender].lastDate = block.timestamp;)
.
Best Practices
Код написан согласно всем Secure Development Recommendations
Critical Severity
1. Admin's hold bonus
Description
: The admin account is marked registered, but not specified lastDate
, because of this, the admin will have a large profit before the first withdrawal.
Effects
: Huge profit with a small Deposit if you do not make a withdrawal.
2. Multi-Deposit
Description
: In the case of several parallel deposits, each of them is counted by the date of the first one.
Effects
: Incorrect profit math.
Medium Severity
Предупреждений для владельцев и пользователей не замечено
Minor Severity
1. Unused variables
Description
: A few variables are stored in the blockchain, but they are not used in any way and they don’t affect the smart contract logic.
Effects
: Transactions cost increasing.
Code
: lines 99, 100, 103, 104, 122, 1231
Other Analyses
1. Повторное использование циклов
Description
: В момент регистрации код дважды проходит циклом всех рефереров. Можно оптимизировать и слить два цикла в один.
Effects
: Transactions cost increasing.
Code
: lines 197-208, 221-229