As of 3 Nov 2026, LIF3 has 3 audit reports by 2 security firms on Trustblock; the latest is by CertiK, dated 27 Feb 2024. Those reports list 1 critical acknowledged and not fixed. It also holds 1 deployed contract on 1 chain.
Record last updated . It holds audits, findings and contracts up to Nov 2026, and incidents up to Oct 2026. Trustblock does not review code.
Newest first
| Audit | Security firm | Date | Scope | Critical findings | Report |
|---|---|---|---|---|---|
| Lif3 L3USD | Security firm: CertiK | Date: | Scope: Not recorded (see the report) | 1 critical acknowledged, not fixed | Open · skynet.certik.com |
| Lif3 - vaults - SC | Security firm: CertiK | Date: | Scope: Files named in the report | No open critical findings | Open · skynet.certik.com |
| Lif3 / ERC20 | Security firm: Hacken | Date: | Scope: 1 address on Fantom | No open critical findings | Open · hacken.io |
Statuses are the security firm’s own, from each report.
| Severity | Open | Acknowledged | Fixed |
|---|---|---|---|
| Critical | 0 | 1 | 0 |
| High | 0 | 2 | 0 |
| Medium | 0 | 0 | 1 |
| Low | 6 | 0 | 5 |
Contract L3USD takes a less than 0.2% fee for each token transfer, and the fee is collected by the contract owner. If the fees is not flowed back to the users in some way, eventually all the L3USD token would end up in the contract owner's wallet.
Open the reportThe following 2 functions changes important state variables but don't emit relevant events as notifications. 1. Function `transferOwnership()` updates contract owner address. 2. Function `transferFrom()` updates the allowance before token transfer.
Open the reportThe `_to` or `_spender` input address in function `approve()`, `transfer()` and `transferFrom()` are missing a check that it is not `address(0)`. This would allow users to send token to zero address and essentially burn their tokens and decrease the amount of L3USD in circulation.
Open the reportThe variables `name`, `symbol` and `decimals` 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. An advantage of immutable variables is that reading them is significantly cheaper than reading from regular state variables since they are not located in storage.
Open the reportFunction `_transferAllRewards()` calculates the reward amount for each reward token and transfers them to the caller. The *require* check on line 536 will revert the entire transaction if one of the reward token balance is not sufficient for the transfer. If the contract is short on one reward token, it could stop all users from claiming their rewards. ```solidity=532 for (uint256 rewardId = 0; rewardId < rewardsLength; ++rewardId) { address reward = rewards[rewardId]; uint256 userRewards = _calculateReward(startOfClaim, endOfClaim, lock.lockTime, lock.amount, reward); if (userRewards > 0) { require( IERC20(reward).balanceOf(address(this)) >= userRewards, "Too little rewards in contract to pay to user" ); address sender = msg.sender; IERC20(reward).safeTransfer(sender, userRewards); emit RewardPaid(sender, userRewards); } } ```
Open the reportThe contract is serving as the underlying entity to interact with third party deposit and reward token contracts, and prb math library. The scope of the audit treats 3rd party entities as black boxes and assumes their functional correctness. However, in the real world, 3rd parties can be compromised and this may lead to lost or stolen assets. Additionally, upgrades of 3rd parties can possibly create severe impacts, such as increasing fees of 3rd parties, migrating to addresses, etc.
Open the report| Address | Chain |
|---|---|
| 0xbf60…64da0xbf60e7414ef09026733c1e7de72e7393888c64da | Chain: Fantom |
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="lif3"></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