VFAT is a yield aggregator that uses the Sickle smart contract wallet for yield farming. It reduces complex operations such as entering and exiting positions, compounding, or rebalancing, into single transactions.

VFAT engaged Ackee Blockchain Security to perform a security review of the VFAT protocol with a total time donation of 18 engineering days in a period between March 4 and March 28, 2025. A second security review then focused on the fixes of issues found in the first security review; no other code changes were audited.

We thank Optimism for approving a grant that partly funded this and an upcoming second audit of VFAT.

METHODOLOGY

We began our review using static analysis tools, including Wake. We then took a deep dive into the logic of the contracts.

During the review, we paid special attention to:

  • ensuring the arithmetic of the system is correct;
  • detecting possible reentrancies in the code;
  • checking the safety of delegatecall usage;
  • ensuring access controls are not too relaxed or too strict;
  • checking the correctness of the upgradeability implementation; and
  • looking for common issues such as data validation.

SCOPE

The first audit was performed on the commit 357593f and the scope was the following:

  • contracts/Automation.sol
  • contracts/ConnectorRegistry.sol
  • contracts/NftSettingsRegistry.sol
  • contracts/PositionSettingsRegistry.sol
  • contracts/Sickle.sol
  • contracts/SickleFactory.sol
  • contracts/SickleRegistry.sol
  • contracts/governance/SickleMultisig.sol
  • contracts/libraries/FeesLib.sol
  • contracts/libraries/NftSettingsLib.sol
  • contracts/libraries/NftTransferLib.sol
  • contracts/libraries/PositionSettingsLib.sol
  • contracts/libraries/SwapLib.sol
  • contracts/libraries/TransferLib.sol

For completeness, it was also necessary to review the following parent contracts:

  • base/Admin.sol
  • base/Multicall.sol
  • base/NonDelegateMulticall.sol
  • base/SickleStorage.sol
  • base/TimelockAdmin.sol

The fix review was done on the given commit 1c20e7e.

FINDINGS

The classification of a security finding is determined by two ratings: impact and likelihood. This two-dimensional classification helps clarify the severity of individual issues. Issues which would be rated as medium severity, but which would be likely discovered only by the team, are typically decreased by the likelihood factor to the Warning or Informational severity ratings.

Our review resulted in 31 findings, ranging from Informational to High severity. The most severe finding H1 would allow an admin (malicious or compromised) to drain all user wallets. The medium severity issue M1 allows front-running of the setReferralCode function. Most findings are warnings that point to various missing validations, code quality issues, and best practices violations.

The second security review was limited to issues found in the first security review and no other code changes were audited. 20 issues were fixed, 3 issues fixed partially, 7 issues acknowledged, and H1 was invalidated by VFAT. Read the finding details in the full audit report linked at the end of the article.

Critical severity

No critical severity issues were found.

 

High severity

H1: Whitelisted callers can perform delegatecall on every Sickle

 

Medium severity

M1: Referral code setter can be front-run

 

Low severity

L1: Non-contract registries can cause reverts

 

Warning severity

W1: Incomplete data validation for NFT positions

W2: Duplicate Sickle retrieval

W3: Potential underflow or overflow in tick range calculation

W4: Variable shadowing

W5: Insufficient data validation in the PositionSettingsRegistry contract

W6: Incorrect price calculation in PositionSettingsRegistry

W7: Incorrect usage of Initializable

W8: Variable naming convention

W9: One-step ownership transfer

W10: Duplicate tokens in feeTokens array can lead to inconsistent fee calculation

W11: Inconsistent handling of ETH and WETH across the FeesLib contract

W12: Ambiguous handling of the native value in the SwapLib contract

W13: Misleading inheritance

W14: No input array length validation

W15: No data validation on registry adding and updates

W16: Missing zero address validation

 

Informational severity

I1: Duplicate code

I2: Usage of magic constants

I3: Unconsolidated storage variable definitions

I4: Redundant storage variable

I5: Mapping isCustomRegistry is redundant

I6: Inconsistent function naming convention

I7: Typographical error in function comment

I8: Misleading error name

I9: Unused errors

I10: Redundant function

I11: Missing duplicate registry validation

I12: Errors in documentation

TRUST MODEL

The protocol requires users to trust administrators who control critical parameters (fees, whitelists, Connector updates) and Automators who execute operations on their behalf. While users control their Sickle instances and position settings, the system maintains centralized control points. Trust risks are partially mitigated through hardcoded limits and multisig requirements; however, users must accept risks of centralized control and potential transaction manipulation by Automators who can control transaction timing.

CONCLUSION

Ackee Blockchain Security recommends VFAT to:

    • set up off-chain monitoring for the purposes described in the M1 finding; and
    • address all other reported issues.

Ackee Blockchain Security’s full VFAT Sickle audit report can be found here.

We were delighted to audit VFAT and look forward to working with them again.