PAPA BEAR

CertiK1 address on BNB Chain

CertiK reviewed PAPA BEAR on 22 Nov 2023: 13 findings, 0 critical; 1 marked fixed, 12 open.

No open critical findings
Open PAPA BEAR’s security record

The original report was removed from its address (seen 17 Oct 2026).

Trustblock does not review code.

Findings13

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

SeverityOpenAcknowledgedFixed
Critical000
High301
Medium200
Low700
HighCentralization Risks in PAPA.solOpen

In the contract `Ownable` the role `_owner` has authority over the functions shown in the diagram below. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ee-4e53-5f1f4140-92a8-2f616e563d8c/diagrams/centralization_PAPA-Ownable-_owner.svg) - `renounceOwnership()`: This function allows the current owner to renounce ownership of the contract. After calling this function, no one will have ownership privileges. Only the owner can call this function. - `transferOwnership(address newOwner)`: This function allows the current owner to transfer ownership of the contract to a new address. Only the owner can call this function. Any compromise to the `_owner` account may allow the hacker to take advantage of this authority and update the sensitive settings and execute sensitive functionalities of the project --- In the contract `PAPA` the role `_owner` has authority over the functions shown in the diagram below. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ee-4e53-5f1f4140-92a8-2f616e563d8c/diagrams/centralization_PAPA-PAPA-_owner.svg) - `updateUniswapV2Pair(address newUniswapV2Pair)`: Allows the owner to update the Uniswap V2 Pair address. Only the owner can call this function. - `enableTrading()`: Enables trading for the token. Can only be called once and only by the owner. - `excludeFromFees(address account, bool excluded)`: This function allows the owner to exclude or include an address from fees. Only the owner can call this function. - `setMaxBuyAmount(uint256 newMaxBuyAmount)`: Allows the owner to set a maximum amount for buying tokens. Only the owner can call this function. - `setSwapTokensAtAmount(uint256 newAmount)`: Sets the token amount at which a swap to BNB should occur. Only the owner can call this function. - `setSwapWithLimit(bool _swapWithLimit)`: Sets if the contract should swap tokens with a limit or not. Only the owner can call this function. Any compromise to the `_owner` account may allow the hacker to take advantage of this authority and update the sensitive settings and execute sensitive functionalities of the project --- In the contract `PAPA` the `marketingWalletAddress` account may be accumulating ETH as a result of the calls to the `swap` function. This mechanism represents a risk for the project as the compromise of such `marketingWalletAddress` account may leak a significant amount of ETH and cause harm to the project.

HighInitial Token DistributionOpen

All of the `21000000` `PAPA` tokens are sent to the contract deployer when deploying the contract. This could be a centralization risk as the anonymous deployer can distribute tokens without obtaining the consensus of the community. Any compromise to the deployer account that holds undistributed tokens may allow the attacker to steal and sell tokens on the market, resulting in severe damage to the project.

HighPotential Flashloan AttackOpen

An attacker can use a flashloan as the initial funds for an exploit to enlarge the profit or manipulate the token price in decentralized exchanges. If swapping/adding liquidity happens without price and slippage control and can be triggered on-chain by anyone, then an attacker can exploit the contract. ```solidity=550 uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp); ``` Function `PAPA.swap` invokes `IUniswapV2Router02.swapExactTokensForETHSupportingFeeOnTransferTokens` without setting restrictions on slippage or minimum output amount, which may be triggered by anyone.

MediumFlawed Transfer Amount Calculation Can Cause TranOpen

The `_transfer` function, designed to override the default transfer behavior, contains an unintended logic flaw in the way it calculates the actual amount to be transferred. For certain specific scenarios, this logic can result in either failed transfers or successful transfers where the recipient receives zero tokens.

MediumUnauthorized Withdrawal of Tokens via `errorTokenOpen

The `errorToken` functions allow any external actor to initiate a transfer of native coins or ERC20 tokens from the contract to the `marketingWalletAddress`. There is no access control mechanism in place, rendering all the assets in the contract susceptible to unauthorized withdrawals. While the logic would have a limited impact since the `marketingWalletAddress` address can not be chosen, an attacker may abuse the `errorToken` function by causing withdrawals when the contract is about to call the private `swap` function, so preventing such event to happen, which is in contrast with the contract logic.

LowInconsistency on Minimum Swap ThresholdOpen

The `newAmount` at which swaps start to be possible is set by the contract owner in the `setSwapTokensAtAmount` method. The first line of such method specifies a check that declares, in its revert message, that `newAmount` must be greater than the 0.0001% of the total supply. However, the performed check verifies that `newAmount` is greater than the 0.000001% of the total supply, differently from what is written in the revert message (two zeros less).

LowMissing Error MessageOpen

The validation at the pointed location checks that some conditions for a transfer to happen are met. However, if any of them is not, the `require` statement just fails and reverts without any error message. It is always convenient to provide the revert reason for a failed transaction for better transparency and integration with the calling software or user.

LowMissing Events on Sensitive FunctionsOpen

The `setMaxBuyAmount`, `enableTrading`, and `updateUniswapV2Pair` functions set sensitive contract data and can be only called by the `_owner` account. Since the information set by such methods are paramount for the contract logic, they should emit events containing the changed data so that they can be easily indexed and fetched from the block logs.

LowMissing Setter for `swapWithLimit` PropertyOpen

The `swapWithLimit` storage property is never set, nor has a setter function for it, resulting in a constantly `false` value.

LowUnchecked ERC-20 `transfer()`/`transferFrom()` CaOpen

The return values of the `transfer()` and `transferFrom()` calls in the smart contract are not checked. Some ERC-20 tokens' transfer functions return no values, while others return a bool value, they should be handled with care. If a function returns `false` instead of reverting upon failure, an unchecked failed transfer could be mistakenly considered successful in the contract. ```solidity=448 ERC20(_token).transfer(marketingWalletAddress, IERC20(_token).balanceOf(address(this))); ```

Show 2 more
LowUsage of `transfer`/`send` for Sending Native TokOpen

It is not recommended to use Solidity's `transfer()` and `send()` functions for transferring native tokens, since some contracts may not be able to receive the funds. Those functions forward only a fixed amount of gas (2300 specifically) and the receiving contracts may run out of gas before finishing the transfer. Also, EVM instructions' gas costs may increase in the future. Thus, some contracts that can receive now may stop working in the future due to the gas limitation. ```solidity=444 payable(marketingWalletAddress).transfer(address(this).balance); ``` - `PAPA.errorBalance` uses `transfer()`. ```solidity=559 bool success = payable(marketingWalletAddress).send(newBalance); ``` - `PAPA.swap` uses `send()`.

LowVariables That Could Be Declared as ImmutableOpen

```solidity=382 uint256 public buyFee; uint256 public sellFee; uint256 public walletToWalletTransferFee; ``` The above 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.

Contracts in scope1

AddressChainSource code
0x4bd46424b82194a2887516ecfeb1599a9531da0dChain: BNB ChainSource code: Verified source

Part of PAPA BEAR’s security record

PAPA BEAR
Audits1 audit by 1 firmLast audit Nov 2023, by CertiK.
Critical findingsNo open critical findingsIn 1 report.
Open PAPA BEAR’s security record

Security firm

CertiK

1,044 projects reviewed · 1,375 reports · latest May 2025

See CertiK’s audits

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