As of 3 Nov 2026, We2net has 1 audit report on Trustblock, by CertiK, dated 7 Mar 2023. That report lists no open critical findings. It also holds 1 deployed contract on 1 chain.
Record last updated . It holds audits and findings, contracts and incidents up to Nov 2026. Trustblock does not review code.
Newest first
| Audit | Security firm | Date | Scope | Critical findings | Report |
|---|---|---|---|---|---|
| we2net - audit | Security firm: CertiK | Date: | Scope: 1 address on BNB Chain | No open critical findings | Open · skynet.certik.com |
Statuses are the security firm’s own, from each report.
| Severity | Open | Acknowledged | Fixed |
|---|---|---|---|
| Critical | 0 | 0 | 0 |
| High | 0 | 2 | 0 |
| Medium | 0 | 0 | 2 |
| Low | 10 | 0 | 3 |
Performing integer division before multiplication truncates the low bits, losing the precision of calculation. ```solidity=1116 uint256 topReward = totalReward.mul(_topRewardRate).div(_rewardBase); ``` ```solidity=1118 uint256 nodeReward = topReward.mul(rewardRate[nodeLevel]).div(_rewardBase); ``` --- ```solidity=1140 uint256 topReward = totalReward.mul(_topRewardRate).div(_rewardBase); ``` ```solidity=1142 uint256 nodeReward = topReward.mul(rewardRate[nodeLevel]).div(_rewardBase); ``` --- ```solidity=916 uint256 topReward = totalReward.mul(_topRewardRate).div(_rewardBase); ``` ```solidity=918 uint256 nodeReward = topReward.mul(levelInfo[nodeLevel].rewardRate).div(_rewardBase); ``` --- ```solidity=940 uint256 topReward = totalReward.mul(_topRewardRate).div(_rewardBase); ``` ```solidity=942 uint256 nodeReward = topReward.mul(levelInfo[nodeLevel].rewardRate).div(_rewardBase); ```
Open the reportThe functions in` TransferHelper` is missing a sanity check to ensure the parameter `token` is a contract. If the `token` is an EOA, the function call `token.call()` will always return true.
Open the reportIn the contract `LiquidityHub`, functions that update state variables should emit relevant events as notifications. - function setEndTime - function setManger - function setTaxRate - function setTaxAndRewardBase - function setTopRewardRate - function setRewardRate ____ In the `we2net`, functions that update state variables should emit relevant events as notifications. - function setManger - function setMinter - function setStartTime - function setTaxAndFeeManger - function setTaxAndRewardBase - function excludedFromTax - function setTaxFrom - function setTaxTo - function setRootNode - function setParentNodeByManager - function setLevelsCountAndRewardRate - function setLevelInfo - function setClaimAmount
Open the reportIn the contract `LiquidityHub`, `setEndTime` do not check if new endtime > block.timestamp
Open the reportAddresses should be checked before assignment or external call to make sure they are not zero addresses. ```solidity=904 we2netToken = _we2netToken; ``` - `_we2netToken` is not zero-checked before being used. --- ```solidity=905 usdtToken = _usdtToken; ``` - `_usdtToken` is not zero-checked before being used. --- ```solidity=906 pair = _pair; ``` - `_pair` is not zero-checked before being used. --- ```solidity=907 wbnb = _wbnb; ``` - `_wbnb` is not zero-checked before being used. --- ```solidity=908 pairWbnbUsdt = _pairWbnbUsdt; ``` - `_pairWbnbUsdt` is not zero-checked before being used. --- ```solidity=1077 _taxManager = taxManager; ``` - `taxManager` is not zero-checked before being used. --- ```solidity=1078 _feeManager = feeManager; ``` - `feeManager` is not zero-checked before being used. --- ```solidity=1079 _recycleManager = recycleManager; ``` - `recycleManager` is not zero-checked before being used. --- ```solidity=810 _taxManager = taxManager; ``` - `taxManager` is not zero-checked before being used. --- ```solidity=811 _feeManager = feeManager; ``` - `feeManager` is not zero-checked before being used. --- ```solidity=840 rootNode = _rootNode; ``` - `_rootNode` is not zero-checked before being used.
Open the reportA sandwich attack may happen when an attacker observes a transaction swapping tokens or adding/removing liquidity without setting restrictions on slippage or minimum output amount. The attacker can manipulate the exchange rate by frontrunning (executing before the target) a transaction to purchase one of the assets and make profits by backrunning (executing after the target) 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: - removeLiquidity - addLiquidity - addBnbLiquidity
Open the reportThe change of `_owner` by function `transferOwnership()` overrides the previously set `_owner` with the new one without guaranteeing the new `_owner` is able to actuate transactions on-chain.
Open the reportThe contract is serving as the underlying entity to interact with one or more third-party protocols. The scope of the audit treats third-party entities as black boxes and assumes their functional correctness. However, in the real world, third parties can be compromised and this may lead to lost or stolen assets. In addition, upgrades of third parties can possibly create severe impacts, such as increasing fees of third parties, migrating to new LP pools, etc. --- ```solidity=872 address public pair; ``` - The contract `LiquidityHub` interacts with third-party contract with `IPancakePair` interface via `pair`. --- ```solidity=873 address public wbnb; ``` - The contract `LiquidityHub` interacts with third-party contract with `IWETH` interface via `wbnb`. --- ```solidity=874 address public pairWbnbUsdt; ``` - The contract `LiquidityHub` interacts with third-party contract with `IPancakePair` interface via `pairWbnbUsdt`.
Open the reportIn the contract `we2net`, everytime a childNode set a parent, totalNodesCount++. If the same _parent address is set by two childNode. It will be double counted. ## Imapct As the `totalNodesCount` is only used as a rootNode initialable flag in the function `setRootNode`, It does not impact the contract functionalities.
Open the reportThe 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| Address | Chain | Source code |
|---|---|---|
| 0x572c…87630x572c9ab47977d7d909572f3b8bce076a858a8763 | Chain: BNB Chain | Source code: Verified source |
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.
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.
<head><script src="https://widget.trustblock.run/project-widget.min.js" defer></script></head><body><divdata-tb-project-widgetdata-tb-project-slug="we2net"></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