Hugo Inu security record

BNB Chainhugoinu.com

As of 3 Nov 2026, Hugo Inu has 1 audit report on Trustblock, by CertiK, dated 16 Jun 2023. That report lists no open critical findings. It also holds 1 deployed contract on 1 chain.

Critical findings
No open critical findings
In 1 report.
Open the latest report
Your label, live
Get the label for your site

Record last updated . It holds audits and findings, contracts and incidents up to Nov 2026. Trustblock does not review code.

Audits1

Newest first

AuditSecurity firmDateScopeCritical findingsReport
Hugo Inu - AuditSecurity firm: CertiKDate: Scope: 1 address on BNB ChainNo open critical findingsOpen · skynet.certik.com

Findings14

Statuses are the security firm’s own, from each report.

SeverityOpenAcknowledgedFixed
Critical000
High011
Medium010
Low1100
LowCheck-effect-interaction Pattern ViolationHugo Inu - Audit · CertiK · 16 Jun 2023Open

In function `transferFrom()`, the `_transfer()` function is executed before checks and updates to the allowance are processed. ```solidity=219 function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "BEP20: transfer amount exceeds allowance"); _approve(sender, _msgSender(), currentAllowance - amount); return true; } ``` This violates the check-effect-interaction pattern and should follow the checks and updates of the allowances. An added benefit is that having the allowance check `require(currentAllowance >= amount, "BEP20: transfer amount exceeds allowance")` before the execution of the `_transfer()` function (or any checks in general before such external function calls) will save gas since all remaining gas will be returned after the function reverts immediately due to insufficient gas.

Open the report
LowManagement of Fee Exclusions When Ownership UpdatHugo Inu - Audit · CertiK · 16 Jun 2023Open

In the `HUGO` contract, the `owner()` and `marketingWallet` are excluded from fees during deployment but there is no mechanism in place to handle these privileges when ownership is renounced. ```solidity constructor(address routerAddress) { ... _isExcludedFromFee[owner()] = true; _isExcludedFromFee[marketingWallet] = true; ... } ``` There is no way to remove the privilege of exclusion from fees for the previous owner or `marketingWallet` if the owner does not remove the exclusion prior to renouncing of ownership.

Open the report
LowMissing Emit EventsHugo Inu - Audit · CertiK · 16 Jun 2023Open

There should always be events emitted in the sensitive functions that are controlled by centralization roles.

Open the report
LowMissing Zero Address ValidationHugo Inu - Audit · CertiK · 16 Jun 2023Open

Addresses are not validated before assignment or external calls, potentially allowing the use of zero addresses and leading to unexpected behavior or vulnerabilities. For example, transferring tokens to a zero address can result in a permanent loss of those tokens. ```solidity=521 marketingWallet = _marketWallet; ``` - `_marketWallet` is not zero-checked before being used.

Open the report
LowNo Liquidity Supplying MechanismHugo Inu - Audit · CertiK · 16 Jun 2023Open

The `HUGO` contract relies on `HUGO-WBNB` trading pair for swapping. In the function `swapAndLiquify()`, the `HUGO` balance of this contract is swapped for `BNB` which then will be transferred to `marketingWallet` address. ```solidity=479 function swapAndLiquify() private lockTheSwap { uint256 contractBalance = balanceOf(address(this)); swapTokensForBNB(contractBalance); uint256 deltaBalance = address(this).balance; if (deltaBalance > 0) { payable(marketingWallet).sendValue(deltaBalance); } } ``` The `swapAndLiquidify()` function only makes a call to `swapTokensForBNB()` to exchange tokens for native tokens through the router. ```solidity=491 function swapTokensForBNB(uint256 tokenAmount) private { // generate the pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); _approve(address(this), address(router), tokenAmount); // make the swap router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } ``` However, there is no logic to liquify tokens in this function `swapAndLiquify()`. This can lead to risks related to price instability and price manipulation when there is insufficient liquidity in the pair liquidity pool. The only way of adding liquidity is to manually inject liquidity into the DEX liquidity pool. Once the liquidity is removed, the trading of `POP` will be blocked.

Open the report
LowPotential `Out-of-Gas` IssueHugo Inu - Audit · CertiK · 16 Jun 2023Open

There is a potential `out-of-gas` issue in function `includeInReward()` since it uses a loop to iterate over `_excluded`, which could potentially result in a high amount of gas consumption. If `_excluded` contains a large number of elements, the loop may consume more gas than is available in a single block. This would cause the transaction to fail with the "out-of-gas" error. ```solidity=292 for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } ```

Open the report
LowPotential Removal of Reflection MechanismHugo Inu - Audit · CertiK · 16 Jun 2023Open

In a reflection mechanism, users are charged a fee every time they make a trade. This fee is used to reward users who hold tokens, but it does not trigger a transfer of tokens. Instead, it only modifies a coefficient. In this mechanism, the user possesses two types of token amounts: `tAmount` and `rAmount`. `tAmount` represents the actual amount of tokens, while `rAmount` denotes the number of tokens after reflection. The rate between the two is calculated as $$$\frac{rTotal}{tTotal}$$$. The `balanceOf()` function returns the `tAmount` or `rAmount` depending on whether the address is participating in the reflection. ```solidity=205 function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } ``` The function `tokenFromReflection()` returns the token amount after the rate of reflection is taken into account. ```solidity=274 function tokenFromReflection(uint256 rAmount) public view returns (uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount / currentRate; } ``` In the `HUGO` contract, the `rfi` fee is used for the reflection mechanism, which is utilized to decrease the `_rTotal` and subsequently reduce the `rate`. This results in the inflation of the holders' balances through the distribution of rewards. ```solidity=315 function _reflectRfi(uint256 rRfi, uint256 tRfi) private { _rTotal -= rRfi; totFeesPaid.rfi += tRfi; } ``` However, the `rfi` fee can be updated by the owner and set to any value less than 15%. If it is set to zero, then `_rTotal` will not be decreased anymore, and in this case, there will be no reflection mechanism. ```solidity=515 function changeFee(Taxes memory _taxes) public onlyOwner { require((_taxes.rfi + _taxes.marketing) <= 15, "Tax must lower than 15%"); taxes = _taxes; } ```

Open the report
LowPotential Sandwich AttacksHugo Inu - Audit · CertiK · 16 Jun 2023Open

A sandwich attack might happen when an attacker observes a transaction swapping tokens or adding liquidity without set restrictions on the slippage or minimum output amount. The attacker can manipulate the exchange rate by frontrunning (executing a transaction before the transaction being attacked) a transaction to purchase one of the assets and make profits by backrunning (executing a transaction after the transaction being attacked) a transaction to sell the asset. The following functions are called without setting restrictions on slippage or minimum output amount, so transactions triggering these functions are vulnerable to sandwich attacks, especially when the input amount is large: * `router.swapExactTokensForETHSupportingFeeOnTransferTokens()` ```solidity=500 router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); ```

Open the report
LowState Variable Should Be Declared ConstantHugo Inu - Audit · CertiK · 16 Jun 2023Open

State variables that never change should be declared as `constant` to save gas. ```solidity=128 uint256 private _tTotal = 420000000000000000 * 10**_decimals; ``` - `_tTotal` should be declared `constant`. --- ```solidity=133 address public deadWallet = 0x000000000000000000000000000000000000dEaD; ``` - `deadWallet` should be declared `constant`.

Open the report
LowUnlocked Compiler VersionHugo Inu - Audit · CertiK · 16 Jun 2023Open

The contracts cited have an unlocked compiler version. An unlocked compiler version in the source code of the contract permits the user to compile it at or above a particular version. This, in turn, leads to differences in the generated bytecode between compilations due to differing compiler version numbers. This can lead to ambiguity when debugging, as compiler specific bugs may occur in the codebase that would be hard to identify over a span of multiple compiler versions rather than a specific one.

Open the report
Show 1 more
LowVariables That Could Be Declared as ImmutableHugo Inu - Audit · CertiK · 16 Jun 2023Open

The linked variables assigned in the constructor can be declared as `immutable`. Immutable state variables can be assigned during contract creation but will remain constant throughout the lifetime of a deployed contract. A big advantage of immutable variables is that reading them is significantly cheaper than reading from regular state variables since they will not be stored in storage.

Open the report

Contracts1

AddressChainSource code
0x28e3ff085f67163532a843fbf714178770a0210cChain: BNB ChainSource code: Verified source

Show this on your site

Is this your project? Show this record on your own website. The label states what the record holds, links to this page and updates by itself. It is free and needs no sign-in.

Content

Facts

Automatic: the three strongest facts of this project’s own record (its last audit and two more), highlighted. They update with the record. Picking a fact turns Automatic off.

Fixed as
Language

Style

Layout
Theme
Accent
Corners

Format

Size
Date
Embed as
HTML
<head>
<script src="https://widget.trustblock.run/project-widget.min.js" defer></script>
</head>
<body>
<div
data-tb-project-widget
data-tb-project-slug="hugo-inu"
></div>
</body>

Paste the code where the label should appear. It uses no API credit and updates by itself.

Something wrong on this page? A missing report, a wrong date, a finding that was fixed since. Tell us and we check it against its source.

Tell us