Beincom - Audit 3

CertiKRepository at commit 221ff14

CertiK reviewed Beincom (Beincom - Audit 3) on 19 Mar 2025: 20 findings, 0 critical; 12 marked fixed, 6 acknowledged, 2 open.

No open critical findings
Open the reportOpen Beincom’s security record

Report hosted on skynet.certik.com.

Trustblock does not review code.

Findings20

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

SeverityOpenAcknowledgedFixed
Critical000
High040
Medium023
Low209
HighCentralization Related RisksAcknowledged

### BICVestingFactory In the contract `BICVestingFactory`, the role `_owner` has authority over the functions shown in the diagram below. Any compromise to the `_owner` account may allow the hacker to take advantage of this authority and create and initialize new redeem contracts with custom parameters. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ef-cfc2-dd0f57b0-acf5-0f98d9323f3d/diagrams/centralization_BICVestingFactory-BICVestingFactory-_owner.svg) ----- ### MultiSigner In the contract `MultiSigner`, the role `_owner` has authority over the functions shown in the diagram below. Any compromise to the `_owner` account may allow the hacker to take advantage of this authority and transfer ownership to an address they control, remove a signer, or add a signer. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ef-cfc2-dd0f57b0-acf5-0f98d9323f3d/diagrams/centralization_MultiSigner-MultiSigner-_owner.svg) ----- ### TokenSingletonPaymaster In the contract `TokenSingletonPaymaster`, the role `_owner` has authority over the functions shown in the diagram below. Any compromise to the `_owner` account may allow the hacker to take advantage of this authority and transfer ownership to an address they control, set the Oracle address to a malicious address, and add any address as a valid factory address. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ef-cfc2-dd0f57b0-acf5-0f98d9323f3d/diagrams/centralization_TokenSingletonPaymaster-TokenSingletonPaymaster-_owner.svg) ----- ### BicTokenPaymaster In the contract `BicTokenPaymaster`, the role `_owner` has authority over the functions shown in the diagram below. Any compromise to the `_owner` account may allow the hacker to take advantage of this authority and transfer ownership to an address they control, enable or disable pre-public status at any time, add or remove any address from the pre-public whitelist, set the pre-public rounds, set liquidity treasury address to receive LP tokens, block or unblock address status to prevent or allow an address to transfer tokens, set the liquidity fee limits, add or remove any address as a valid pool, change the LF period, the LF start time and the LF reduction value to interfere with the fee calculation, set swap back status and minimum swap back amount, grant or remove the privileged status `isExcluded` for multiple addresses, pause or unpause transfer for non-privileged addresses, withdraw any tokens and ETH to any address. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ef-cfc2-dd0f57b0-acf5-0f98d9323f3d/diagrams/centralization_BicTokenPaymaster-BicTokenPaymaster-_owner.svg)

HighCentralized Control of LP TokensAcknowledged

The contract design allows the owner of `liquidityTreasury` address, to control the LP (liquidity provider) tokens. \ This centralized control creates a significant risk if the private keys of the privileged role are compromised, as an could remove the liquidity from the pool and withdraw the LP tokens. Such actions could severely impact users and the protocol’s stability, as liquidity removal often results in token price manipulation and loss of trust in the system.

HighInitial Token DistributionAcknowledged

All of the `BIC` tokens are sent to the `superController` address provided by the deployer. This is a centralization risk because the deployer can distribute tokens without obtaining the consensus of the community. Any compromise to these addresses may allow a hacker to steal and sell tokens on the market, resulting in severe damage to the project.

HighUnrestricted Withdrawal of Accumulated Tokens inAcknowledged

The `withdrawStuckToken()` function enables the owner to withdraw any tokens (including ETH when `token == address(0)`) stored in the contract and transfer them to any address. While this might be intended for operational flexibility, it creates a risk if their private keys are compromised. Specifically, an attacker could withdraw tokens intended for liquidity or other purposes, potentially harming users and the protocol's integrity.

MediumInadequate Oracle Management in `TokenSingletonPaAcknowledged

The `TokenSingletonPaymaster` relies exclusively on a single oracle (`oracle`) for token exchange rates in `getTokenValueOfEth`, but it lacks key safeguards: - The contract never checks the oracle's operational status. - Oracle responses are never verified for correctness. - There is no alternative mechanism if the oracle fails or returns invalid data. This single dependency introduces a risk of denial of service, and potential data integrity vulnerabilities, where invalid or manipulated oracle data could be exploited to affect token valuations or operations.

MediumRounding Errors in Token ReleaseAcknowledged

The token allocation mechanism in the `BICVesting` contract uses percentages, which can lead to fairness issues due to rounding errors: 1. **Incomplete Allocations**: Allocations are not required to sum to 100%. Any remaining percentage is implicitly allocated to the final beneficiary, creating discrepancies between the expected and actual distributions. 2. **Rounding Discrepancies**: For small claimable amounts, rounding errors can result in zero distribution for all beneficiaries except the last one, who receives the entire claimable amount. Additionally to the fairness issue, this causes transparency issues as users reviewing allocations may not see accurate results due to the points above.

Contracts in scope

No deployed address is recorded for this audit.

The report names a repository or files. Open the report to see its scope.

Repository and files the report names (5)

  • https://github.com/beincom/bic-smart-contract-v2/src/vest/BICVesting.sol at commit 221ff147ffb58506994a930778286a7efaeff528
  • https://github.com/beincom/bic-smart-contract-v2/src/BicTokenPaymaster.sol at commit 221ff147ffb58506994a930778286a7efaeff528
  • https://github.com/beincom/bic-smart-contract-v2/src/base/TokenSingletonPaymaster.sol at commit 221ff147ffb58506994a930778286a7efaeff528
  • https://github.com/beincom/bic-smart-contract-v2/src/base/MultiSigner.sol at commit 221ff147ffb58506994a930778286a7efaeff528
  • https://github.com/beincom/bic-smart-contract-v2/src/vest/BICVestingFactory.sol at commit 221ff147ffb58506994a930778286a7efaeff528

Part of Beincom’s security record

Beincom
Audits3 audits by 1 firmLast audit Mar 2025, by CertiK.
Critical findingsNo open critical findingsAcross 3 reports.
Open Beincom’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