Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion lib/safe-smart-account
Submodule safe-smart-account deleted from 2b1243
1 change: 0 additions & 1 deletion lib/safe7579
Submodule safe7579 deleted from 0f6435
10 changes: 8 additions & 2 deletions src/hooks/BaseHook.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ pragma solidity 0.8.30;
import { Execution } from "modulekit/accounts/erc7579/lib/ExecutionLib.sol";

// Superform
import { ISuperHook, ISuperHookSetter, ISuperHookResult } from "../interfaces/ISuperHook.sol";
import { HookDataDecoder } from "../libraries/HookDataDecoder.sol";
import { ISuperHook, ISuperHookSetter, ISuperHookResult, ISuperHookInspector } from "../interfaces/ISuperHook.sol";

/// @title BaseHook
/// @author Superform Labs
Expand All @@ -14,7 +15,9 @@ import { ISuperHook, ISuperHookSetter, ISuperHookResult } from "../interfaces/IS
/// All specialized hooks should inherit from this base contract
/// Implements the ISuperHook interface defined lifecycle methods
/// Uses a transient storage pattern for stateful execution context
abstract contract BaseHook is ISuperHook, ISuperHookSetter, ISuperHookResult {
abstract contract BaseHook is ISuperHook, ISuperHookSetter, ISuperHookResult, ISuperHookInspector {
using HookDataDecoder for bytes;

/*//////////////////////////////////////////////////////////////
STORAGE
//////////////////////////////////////////////////////////////*/
Expand Down Expand Up @@ -206,6 +209,9 @@ abstract contract BaseHook is ISuperHook, ISuperHookSetter, ISuperHookResult {
return subType;
}

/// @inheritdoc ISuperHookInspector
function inspect(bytes calldata) external view virtual returns (bytes memory) { }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The inspect() function is declared to return bytes memory but the implementation doesn't return any value. This will cause compilation errors. Consider returning an empty bytes array with either return ""; or return new bytes(0); to maintain the expected return type. Alternatively, if the intention is for derived classes to always override this function, you might want to make it abstract instead of providing an empty implementation.

Suggested change
function inspect(bytes calldata) external view virtual returns (bytes memory) { }
function inspect(bytes calldata) external view virtual returns (bytes memory) { return ""; }

Spotted by Diamond

Is this helpful? React 👍 or 👎 to let us know.


/*//////////////////////////////////////////////////////////////
INTERNAL METHODS
//////////////////////////////////////////////////////////////*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import { ISuperHookResult, ISuperHookContextAware, ISuperHookInspector } from ".
/// @notice uint32 exclusivityPeriod = BytesLib.toUint32(data, 212);
/// @notice bool usePrevHookAmount = _decodeBool(data, 216);
/// @notice bytes destinationMessage = BytesLib.slice(data, 217, data.length - 217);
contract AcrossSendFundsAndExecuteOnDstHook is BaseHook, ISuperHookContextAware, ISuperHookInspector {
contract AcrossSendFundsAndExecuteOnDstHook is BaseHook, ISuperHookContextAware {
/*//////////////////////////////////////////////////////////////
STORAGE
//////////////////////////////////////////////////////////////*/
Expand Down Expand Up @@ -174,7 +174,7 @@ contract AcrossSendFundsAndExecuteOnDstHook is BaseHook, ISuperHookContextAware,
}

/// @inheritdoc ISuperHookInspector
function inspect(bytes calldata data) external pure returns (bytes memory) {
function inspect(bytes calldata data) external pure override returns (bytes memory) {
return abi.encodePacked(
BytesLib.toAddress(data, 32), // recipient
BytesLib.toAddress(data, 52), // inputToken
Expand Down
4 changes: 2 additions & 2 deletions src/hooks/bridges/debridge/DeBridgeCancelOrderHook.sol
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ import { ISuperHookInspector } from "../../../interfaces/ISuperHook.sol";
/// giveTokenAddress_paramLength + takeTokenAddress_paramLength + receiverDst_paramLength +
/// givePatchAuthoritySrc_paramLength + orderAuthorityAddressDst_paramLength + allowedTakerDst_paramLength +
/// allowedCancelBeneficiarySrc_paramLength);
contract DeBridgeCancelOrderHook is BaseHook, ISuperHookInspector {
contract DeBridgeCancelOrderHook is BaseHook {
/*//////////////////////////////////////////////////////////////
STORAGE
//////////////////////////////////////////////////////////////*/
Expand Down Expand Up @@ -101,7 +101,7 @@ contract DeBridgeCancelOrderHook is BaseHook, ISuperHookInspector {
}

/// @inheritdoc ISuperHookInspector
function inspect(bytes calldata data) external pure returns (bytes memory) {
function inspect(bytes calldata data) external pure override returns (bytes memory) {
(Order memory order,,) = _createOrder(data);

return abi.encodePacked(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ import { ISuperHookResult, ISuperHookContextAware, ISuperHookInspector } from ".
/// @notice uint256 referralCode = BytesLib.toUint256(data, 468 + destinationMessage_paramLength +
/// takeTokenAddress_paramLength + receiverDst_paramLength + orderAuthorityAddressDst_paramLength +
/// allowedTakerDst_paramLength + allowedCancelBeneficiarySrc_paramLength + affiliateFee_paramLength);
contract DeBridgeSendOrderAndExecuteOnDstHook is BaseHook, ISuperHookContextAware, ISuperHookInspector {
contract DeBridgeSendOrderAndExecuteOnDstHook is BaseHook, ISuperHookContextAware {
/*//////////////////////////////////////////////////////////////
STORAGE
//////////////////////////////////////////////////////////////*/
Expand Down Expand Up @@ -141,7 +141,7 @@ contract DeBridgeSendOrderAndExecuteOnDstHook is BaseHook, ISuperHookContextAwar
}

/// @inheritdoc ISuperHookInspector
function inspect(bytes calldata data) external pure returns (bytes memory) {
function inspect(bytes calldata data) external pure override returns (bytes memory) {
(IDlnSource.OrderCreation memory orderCreation,,,) = _createOrder(data, "");

return abi.encodePacked(
Expand Down
5 changes: 2 additions & 3 deletions src/hooks/claim/fluid/FluidClaimRewardHook.sol
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,7 @@ contract FluidClaimRewardHook is
BaseClaimRewardHook,
ISuperHookInflowOutflow,
ISuperHookOutflow,
ISuperHookContextAware,
ISuperHookInspector
ISuperHookContextAware
{
using HookDataDecoder for bytes;

Expand Down Expand Up @@ -74,7 +73,7 @@ contract FluidClaimRewardHook is
}

/// @inheritdoc ISuperHookInspector
function inspect(bytes calldata data) external pure returns (bytes memory) {
function inspect(bytes calldata data) external pure override returns (bytes memory) {
return abi.encodePacked(data.extractYieldSource(), BytesLib.toAddress(data, 52));
}

Expand Down
7 changes: 2 additions & 5 deletions src/hooks/claim/gearbox/GearboxClaimRewardHook.sol
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@ import { IGearboxFarmingPool } from "../../../vendor/gearbox/IGearboxFarmingPool

// Superform
import {
ISuperHook,
ISuperHookResultOutflow,
ISuperHookInflowOutflow,
ISuperHookOutflow,
ISuperHookContextAware,
Expand All @@ -32,8 +30,7 @@ contract GearboxClaimRewardHook is
BaseClaimRewardHook,
ISuperHookInflowOutflow,
ISuperHookOutflow,
ISuperHookContextAware,
ISuperHookInspector
ISuperHookContextAware
{
using HookDataDecoder for bytes;

Expand Down Expand Up @@ -75,7 +72,7 @@ contract GearboxClaimRewardHook is
}

/// @inheritdoc ISuperHookInspector
function inspect(bytes calldata data) external pure returns (bytes memory) {
function inspect(bytes calldata data) external pure override returns (bytes memory) {
return abi.encodePacked(data.extractYieldSource(), BytesLib.toAddress(data, 52));
}

Expand Down
7 changes: 2 additions & 5 deletions src/hooks/claim/yearn/YearnClaimOneRewardHook.sol
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ import { BaseHook } from "../../BaseHook.sol";
import { BaseClaimRewardHook } from "../BaseClaimRewardHook.sol";
import { HookSubTypes } from "../../../libraries/HookSubTypes.sol";
import {
ISuperHook,
ISuperHookResultOutflow,
ISuperHookInflowOutflow,
ISuperHookOutflow,
ISuperHookContextAware,
Expand All @@ -32,8 +30,7 @@ contract YearnClaimOneRewardHook is
BaseClaimRewardHook,
ISuperHookInflowOutflow,
ISuperHookOutflow,
ISuperHookContextAware,
ISuperHookInspector
ISuperHookContextAware
{
using HookDataDecoder for bytes;

Expand Down Expand Up @@ -76,7 +73,7 @@ contract YearnClaimOneRewardHook is
}

/// @inheritdoc ISuperHookInspector
function inspect(bytes calldata data) external pure returns (bytes memory) {
function inspect(bytes calldata data) external pure override returns (bytes memory) {
return abi.encodePacked(data.extractYieldSource(), BytesLib.toAddress(data, 52));
}

Expand Down
5 changes: 2 additions & 3 deletions src/hooks/loan/morpho/MorphoBorrowHook.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ pragma solidity 0.8.30;

// external
import { BytesLib } from "../../../vendor/BytesLib.sol";
import { IOracle } from "../../../vendor/morpho/IOracle.sol";
import { Math } from "@openzeppelin/contracts/utils/math/Math.sol";
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import { Execution } from "modulekit/accounts/erc7579/lib/ExecutionLib.sol";
Expand All @@ -28,7 +27,7 @@ import { ISuperHookInspector } from "../../../interfaces/ISuperHook.sol";
/// @notice bool usePrevHookAmount = _decodeBool(data, 144);
/// @notice uint256 lltv = BytesLib.toUint256(data, 145);
/// @notice bool placeholder = _decodeBool(data, 177);
contract MorphoBorrowHook is BaseMorphoLoanHook, ISuperHookInspector {
contract MorphoBorrowHook is BaseMorphoLoanHook {
using HookDataDecoder for bytes;

/*//////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -100,7 +99,7 @@ contract MorphoBorrowHook is BaseMorphoLoanHook, ISuperHookInspector {
}

/// @inheritdoc ISuperHookInspector
function inspect(bytes calldata data) external pure returns (bytes memory) {
function inspect(bytes calldata data) external pure override returns (bytes memory) {
BorrowHookLocalVars memory vars = _decodeBorrowHookData(data);

MarketParams memory marketParams =
Expand Down
6 changes: 2 additions & 4 deletions src/hooks/loan/morpho/MorphoRepayAndWithdrawHook.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
pragma solidity 0.8.30;

// external
import { IIrm } from "../../../vendor/morpho/IIrm.sol";
import { MathLib } from "../../../vendor/morpho/MathLib.sol";
import { Math } from "@openzeppelin/contracts/utils/math/Math.sol";
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import { SharesMathLib } from "../../../vendor/morpho/SharesMathLib.sol";
Expand All @@ -29,7 +27,7 @@ import { ISuperHookInspector } from "../../../interfaces/ISuperHook.sol";
/// @notice uint256 lltv = BytesLib.toUint256(data, 112);
/// @notice bool usePrevHookAmount = _decodeBool(data, 144);
/// @notice bool isFullRepayment = _decodeBool(data, 145);
contract MorphoRepayAndWithdrawHook is BaseMorphoLoanHook, ISuperHookInspector {
contract MorphoRepayAndWithdrawHook is BaseMorphoLoanHook {
using MarketParamsLib for MarketParams;
using HookDataDecoder for bytes;
using SharesMathLib for uint256;
Expand Down Expand Up @@ -142,7 +140,7 @@ contract MorphoRepayAndWithdrawHook is BaseMorphoLoanHook, ISuperHookInspector {
}

/// @inheritdoc ISuperHookInspector
function inspect(bytes calldata data) external pure returns (bytes memory) {
function inspect(bytes calldata data) external pure override returns (bytes memory) {
BuildHookLocalVars memory vars = _decodeHookData(data);

MarketParams memory marketParams =
Expand Down
4 changes: 2 additions & 2 deletions src/hooks/loan/morpho/MorphoRepayHook.sol
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import { ISuperHookInspector } from "../../../interfaces/ISuperHook.sol";
/// @notice uint256 lltv = BytesLib.toUint256(data, 112);
/// @notice bool usePrevHookAmount = _decodeBool(data, 144);
/// @notice bool isFullRepayment = _decodeBool(data, 145);
contract MorphoRepayHook is BaseMorphoLoanHook, ISuperHookInspector {
contract MorphoRepayHook is BaseMorphoLoanHook {
using MarketParamsLib for MarketParams;
using HookDataDecoder for bytes;
using SharesMathLib for uint256;
Expand Down Expand Up @@ -115,7 +115,7 @@ contract MorphoRepayHook is BaseMorphoLoanHook, ISuperHookInspector {
}

/// @inheritdoc ISuperHookInspector
function inspect(bytes calldata data) external pure returns (bytes memory) {
function inspect(bytes calldata data) external pure override returns (bytes memory) {
BuildHookLocalVars memory vars = _decodeHookData(data);

MarketParams memory marketParams =
Expand Down
4 changes: 2 additions & 2 deletions src/hooks/loan/morpho/MorphoSupplyAndBorrowHook.sol
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import { ISuperHookInspector } from "../../../interfaces/ISuperHook.sol";
/// @notice bool usePrevHookAmount = _decodeBool(data, 144);
/// @notice uint256 lltv = BytesLib.toUint256(data, 145);
/// @notice bool placeholder = _decodeBool(data, 177);
contract MorphoSupplyAndBorrowHook is BaseMorphoLoanHook, ISuperHookInspector {
contract MorphoSupplyAndBorrowHook is BaseMorphoLoanHook {
using HookDataDecoder for bytes;

/*//////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -109,7 +109,7 @@ contract MorphoSupplyAndBorrowHook is BaseMorphoLoanHook, ISuperHookInspector {
}

/// @inheritdoc ISuperHookInspector
function inspect(bytes calldata data) external pure returns (bytes memory) {
function inspect(bytes calldata data) external pure override returns (bytes memory) {
BorrowHookLocalVars memory vars = _decodeBorrowHookData(data);

MarketParams memory marketParams =
Expand Down
7 changes: 3 additions & 4 deletions src/hooks/loan/morpho/MorphoSupplyHook.sol
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,9 @@ import { IMorphoBase, MarketParams } from "../../../vendor/morpho/IMorpho.sol";
// Superform
import { BaseMorphoLoanHook } from "./BaseMorphoLoanHook.sol";
import { HookSubTypes } from "../../../libraries/HookSubTypes.sol";
import { ISuperHookLoans } from "../../../interfaces/ISuperHook.sol";
import { ISuperHookResult } from "../../../interfaces/ISuperHook.sol";
import { HookDataDecoder } from "../../../libraries/HookDataDecoder.sol";
import { ISuperHook, ISuperHookInspector } from "../../../interfaces/ISuperHook.sol";
import { ISuperHookInspector } from "../../../interfaces/ISuperHook.sol";

/// @title MorphoSupplyHook
/// @author Superform Labs
Expand All @@ -25,7 +24,7 @@ import { ISuperHook, ISuperHookInspector } from "../../../interfaces/ISuperHook.
/// @notice uint256 amount = BytesLib.toUint256(data, 80);
/// @notice uint256 lltv = BytesLib.toUint256(data, 112);
/// @notice bool usePrevHookAmount = _decodeBool(data, 144);
contract MorphoSupplyHook is BaseMorphoLoanHook, ISuperHookInspector {
contract MorphoSupplyHook is BaseMorphoLoanHook {
using HookDataDecoder for bytes;

/*//////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -98,7 +97,7 @@ contract MorphoSupplyHook is BaseMorphoLoanHook, ISuperHookInspector {
}

/// @inheritdoc ISuperHookInspector
function inspect(bytes calldata data) external pure returns (bytes memory) {
function inspect(bytes calldata data) external pure override returns (bytes memory) {
SupplyHookLocalVars memory vars = _decodeSupplyHookData(data);

MarketParams memory marketParams =
Expand Down
4 changes: 2 additions & 2 deletions src/hooks/loan/morpho/MorphoWithdrawHook.sol
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import { ISuperHookInspector } from "../../../interfaces/ISuperHook.sol";
/// @notice uint256 lltv = BytesLib.toUint256(data, 120);
/// @notice uint256 assets = BytesLib.toUint256(data, 152);
/// @notice uint256 shares = BytesLib.toUint256(data, 184);
contract MorphoWithdrawHook is BaseMorphoLoanHook, ISuperHookInspector {
contract MorphoWithdrawHook is BaseMorphoLoanHook {
using MarketParamsLib for MarketParams;
using HookDataDecoder for bytes;

Expand Down Expand Up @@ -80,7 +80,7 @@ contract MorphoWithdrawHook is BaseMorphoLoanHook, ISuperHookInspector {
}

/// @inheritdoc ISuperHookInspector
function inspect(bytes calldata data) external pure returns (bytes memory) {
function inspect(bytes calldata data) external pure override returns (bytes memory) {
WithdrawHookVars memory vars = _decodeWithdrawData(data);

return abi.encodePacked(
Expand Down
4 changes: 2 additions & 2 deletions src/hooks/stake/fluid/ApproveAndFluidStakeHook.sol
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import { ISuperHookContextAware, ISuperHookResult, ISuperHookInspector } from ".
/// @notice address token = BytesLib.toAddress(data, 52);
/// @notice uint256 amount = BytesLib.toUint256(data, 72);
/// @notice bool usePrevHookAmount = _decodeBool(data, 104);
contract ApproveAndFluidStakeHook is BaseHook, ISuperHookContextAware, ISuperHookInspector {
contract ApproveAndFluidStakeHook is BaseHook, ISuperHookContextAware {
using HookDataDecoder for bytes;

uint256 private constant AMOUNT_POSITION = 72;
Expand Down Expand Up @@ -79,7 +79,7 @@ contract ApproveAndFluidStakeHook is BaseHook, ISuperHookContextAware, ISuperHoo
}

/// @inheritdoc ISuperHookInspector
function inspect(bytes calldata data) external pure returns (bytes memory) {
function inspect(bytes calldata data) external pure override returns (bytes memory) {
return abi.encodePacked(
data.extractYieldSource(),
BytesLib.toAddress(data, 52) //token
Expand Down
4 changes: 2 additions & 2 deletions src/hooks/stake/fluid/FluidStakeHook.sol
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import { ISuperHookContextAware, ISuperHookResult, ISuperHookInspector } from ".
/// @notice address yieldSource = BytesLib.toAddress(data, 32);
/// @notice uint256 amount = BytesLib.toUint256(data, 52);
/// @notice bool usePrevHookAmount = _decodeBool(data, 84);
contract FluidStakeHook is BaseHook, ISuperHookContextAware, ISuperHookInspector {
contract FluidStakeHook is BaseHook, ISuperHookContextAware {
using HookDataDecoder for bytes;

uint256 private constant AMOUNT_POSITION = 52;
Expand Down Expand Up @@ -70,7 +70,7 @@ contract FluidStakeHook is BaseHook, ISuperHookContextAware, ISuperHookInspector
}

/// @inheritdoc ISuperHookInspector
function inspect(bytes calldata data) external pure returns (bytes memory) {
function inspect(bytes calldata data) external pure override returns (bytes memory) {
return abi.encodePacked(data.extractYieldSource());
}

Expand Down
4 changes: 2 additions & 2 deletions src/hooks/stake/fluid/FluidUnstakeHook.sol
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import { IFluidLendingStakingRewards } from "../../../vendor/fluid/IFluidLending
/// @notice address yieldSource = BytesLib.toAddress(data, 32);
/// @notice uint256 amount = BytesLib.toUint256(data, 52);
/// @notice bool usePrevHookAmount = _decodeBool(data, 84);
contract FluidUnstakeHook is BaseHook, ISuperHookContextAware, ISuperHookInspector {
contract FluidUnstakeHook is BaseHook, ISuperHookContextAware {
using HookDataDecoder for bytes;

uint256 private constant AMOUNT_POSITION = 52;
Expand Down Expand Up @@ -72,7 +72,7 @@ contract FluidUnstakeHook is BaseHook, ISuperHookContextAware, ISuperHookInspect
}

/// @inheritdoc ISuperHookInspector
function inspect(bytes calldata data) external pure returns (bytes memory) {
function inspect(bytes calldata data) external pure override returns (bytes memory) {
return abi.encodePacked(data.extractYieldSource());
}
/*//////////////////////////////////////////////////////////////
Expand Down
4 changes: 2 additions & 2 deletions src/hooks/stake/gearbox/ApproveAndGearboxStakeHook.sol
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import { IGearboxFarmingPool } from "../../../vendor/gearbox/IGearboxFarmingPool
/// @notice address token = BytesLib.toAddress(data, 52);
/// @notice uint256 amount = BytesLib.toUint256(data, 72);
/// @notice bool usePrevHookAmount = _decodeBool(data, 104);
contract ApproveAndGearboxStakeHook is BaseHook, ISuperHookContextAware, ISuperHookInspector {
contract ApproveAndGearboxStakeHook is BaseHook, ISuperHookContextAware {
using HookDataDecoder for bytes;

uint256 private constant AMOUNT_POSITION = 72;
Expand Down Expand Up @@ -80,7 +80,7 @@ contract ApproveAndGearboxStakeHook is BaseHook, ISuperHookContextAware, ISuperH
}

/// @inheritdoc ISuperHookInspector
function inspect(bytes calldata data) external pure returns (bytes memory) {
function inspect(bytes calldata data) external pure override returns (bytes memory) {
return abi.encodePacked(data.extractYieldSource());
}

Expand Down
4 changes: 2 additions & 2 deletions src/hooks/stake/gearbox/GearboxStakeHook.sol
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import { IGearboxFarmingPool } from "../../../vendor/gearbox/IGearboxFarmingPool
/// @notice address yieldSource = BytesLib.toAddress(data, 32);
/// @notice uint256 amount = BytesLib.toUint256(data, 52);
/// @notice bool usePrevHookAmount = _decodeBool(data, 84);
contract GearboxStakeHook is BaseHook, ISuperHookContextAware, ISuperHookInspector {
contract GearboxStakeHook is BaseHook, ISuperHookContextAware {
using HookDataDecoder for bytes;

uint256 private constant AMOUNT_POSITION = 52;
Expand Down Expand Up @@ -70,7 +70,7 @@ contract GearboxStakeHook is BaseHook, ISuperHookContextAware, ISuperHookInspect
}

/// @inheritdoc ISuperHookInspector
function inspect(bytes calldata data) external pure returns (bytes memory) {
function inspect(bytes calldata data) external pure override returns (bytes memory) {
return abi.encodePacked(data.extractYieldSource());
}

Expand Down
Loading
Loading