Omniscia Astrolab DAO Audit

AsProxy Code Style Findings

AsProxy Code Style Findings

APY-01C: Inefficient Generation of Selector

Description:

The AsProxy::_delegateWithSignature function will calculate the function selector locally from an input string which is significantly inefficient.

Example:

src/abstract/AsProxy.sol
17/**
18 * @notice Delegate a call to an implementation contract using a function signature
19 * @param _implementation The address of the implementation contract
20 * @param _signature The function signature to delegate
21 */
22function _delegateWithSignature(
23 address _implementation,
24 string memory _signature
25) internal {
26 bytes4 selector = bytes4(keccak256(bytes(_signature)));

Recommendation:

Given that the function signatures invoked are known at compile-time, we advise interface declarations for them to be utilized and specifically the selector syntax.

The AsProxy::_delegateWithSignature function is invoked with the StrategyV5Agent::init, StrategyV5Agent::updateAsset, and StrategyV5Abstract::setInputs functions all of which can become part of an interface (i.e. IStrategyV5Agent) and accessed as advised (i.e. IStrategyV5Agent.init.selector).

Alleviation (59b75fbee1d8f3dee807c928f18be41c58b904e1):

The AsProxy implementation was removed from the codebase after consideration of the audit report's outputs and its usage has been replaced by vanilla delegatecall integrations.

As such, all exhibits relevant to it have been marked as no longer applicable.