-
BESCScan

Security Audit Report

</> API

FarmCompoundHelper0xc36F476cb3…f192e65E

source verifiedslither
50out of 100
poor

3 blocking issues

At least one finding describes a plausible path to loss of funds or control. Read those findings before interacting with this contract.

Findings
5
Engines
slither
Scanned
Source
Published

Findings by severity

Critical

0

High

3

Medium

1

Low

0

Informational

1

Gas

0

Findings (5)

high

1 check · 3 instances

A plausible path to loss of funds or control. Treat as blocking.
  • Instance 1 of 3

    Reentrancy in FarmCompoundHelper.zapAndCredit(address,address,address,uint256) (contracts/FarmCompoundHelper.sol#72-108):
    	External call allowing reentrancy:
    	- zapCompound.compound(token0,token1,moneyAmount) (contracts/FarmCompoundHelper.sol#84)
    	Balance read before the call:
    	- lpBefore = IERC20(lpToken).balanceOf(address(this)) (contracts/FarmCompoundHelper.sol#83)
    	Possible stale balance used after the call in a condition:
    	- require(bool,string)(lpAmount > 0,FarmCompoundHelper: zap returned 0 LP) (contracts/FarmCompoundHelper.sol#89)
    		- stale variable `lpAmount`

    Instance 2 of 3

    Reentrancy in FarmCompoundHelper.zapAndCredit(address,address,address,uint256) (contracts/FarmCompoundHelper.sol#72-108):
    	External call allowing reentrancy:
    	- money.safeApprove(address(zapCompound),0) (contracts/FarmCompoundHelper.sol#87)
    	Balance read before the call:
    	- lpAmount = IERC20(lpToken).balanceOf(address(this)) - lpBefore (contracts/FarmCompoundHelper.sol#85)
    	Possible stale balance used after the call in a condition:
    	- require(bool,string)(lpAmount > 0,FarmCompoundHelper: zap returned 0 LP) (contracts/FarmCompoundHelper.sol#89)
    		- stale variable `lpAmount`

    Instance 3 of 3

    Reentrancy in FarmCompoundHelper.zapAndCredit(address,address,address,uint256) (contracts/FarmCompoundHelper.sol#72-108):
    	External call allowing reentrancy:
    	- money.safeApprove(address(zapCompound),0) (contracts/FarmCompoundHelper.sol#87)
    	Balance read before the call:
    	- lpBefore = IERC20(lpToken).balanceOf(address(this)) (contracts/FarmCompoundHelper.sol#83)
    	Possible stale balance used after the call in a condition:
    	- require(bool,string)(lpAmount > 0,FarmCompoundHelper: zap returned 0 LP) (contracts/FarmCompoundHelper.sol#89)
    		- stale variable `lpAmount`
medium

1 check · 1 instance

Can go wrong under specific conditions worth understanding first.
informational

1 check · 1 instance

Style and convention. No effect on what the contract does.

Scope and limitations

This is automated static analysis, run by slither against this contract’s published source. It is not a manual audit and nobody has reviewed these results by hand.

  • It finds known patterns. A novel bug, or one that depends on how this contract is used alongside another, is exactly what it does not find.
  • It cannot judge intent. A contract that lets its owner mint without limit is working as written; whether that is acceptable is not a question a scanner answers.
  • It says nothing about the people behind the contract, the liquidity, or whether the deployer still holds the keys.
  • A high score means the analysers had few complaints. It is not a guarantee, an endorsement, or advice to interact.

Read the source yourself where it matters. This contract’s source is published.