diff --git a/packages/blue-sdk-viem/contracts/GetVault.sol b/packages/blue-sdk-viem/contracts/GetVault.sol index 376603b1..18fbb6c7 100644 --- a/packages/blue-sdk-viem/contracts/GetVault.sol +++ b/packages/blue-sdk-viem/contracts/GetVault.sol @@ -5,6 +5,7 @@ import {IMorpho, Id, MarketParams} from "./interfaces/IMorpho.sol"; import {Eip5267Domain} from "./interfaces/IERC20Permit.sol"; import {IMetaMorpho, PendingUint192, PendingAddress} from "./interfaces/IMetaMorpho.sol"; import {IPublicAllocator} from "./interfaces/IPublicAllocator.sol"; +import {IMetaMorphoFactory} from "./interfaces/IMetaMorphoFactory.sol"; struct VaultConfig { address asset; @@ -41,12 +42,24 @@ struct VaultResponse { PublicAllocatorConfig publicAllocatorConfig; } +error UnknownOfFactory(address factory, address vault); + contract GetVault { - function query(IMetaMorpho vault, IPublicAllocator publicAllocator) + function query(IMetaMorpho vault, IPublicAllocator publicAllocator, IMetaMorphoFactory metaMorphoFactory) external view returns (VaultResponse memory res) { + if (!metaMorphoFactory.isMetaMorpho(address(vault))) { + // MetaMorpho factory V1.0 only exists on Ethereum (1) and Base (8453) + bool isV1_0Factory = (block.chainid == 1 || block.chainid == 8453) + && IMetaMorphoFactory(0xA9c3D3a366466Fa809d1Ae982Fb2c46E5fC41101).isMetaMorpho(address(vault)); + + if (!isV1_0Factory) { + revert UnknownOfFactory(address(metaMorphoFactory), address(vault)); + } + } + res.config = VaultConfig({ asset: vault.asset(), symbol: vault.symbol(), diff --git a/packages/blue-sdk-viem/contracts/interfaces/IMetaMorphoFactory.sol b/packages/blue-sdk-viem/contracts/interfaces/IMetaMorphoFactory.sol new file mode 100644 index 00000000..1fc10bb8 --- /dev/null +++ b/packages/blue-sdk-viem/contracts/interfaces/IMetaMorphoFactory.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +import {IMetaMorpho} from "./IMetaMorpho.sol"; + +/// @title IMetaMorphoFactory +/// @author Morpho Labs +/// @custom:contact security@morpho.org +/// @notice Interface of MetaMorpho's factory. +interface IMetaMorphoFactory { + /// @notice The address of the Morpho contract. + function MORPHO() external view returns (address); + + /// @notice Whether a MetaMorpho vault was created with the factory. + function isMetaMorpho(address target) external view returns (bool); + + /// @notice Creates a new MetaMorpho vault. + /// @param initialOwner The owner of the vault. + /// @param initialTimelock The initial timelock of the vault. + /// @param asset The address of the underlying asset. + /// @param name The name of the vault. + /// @param symbol The symbol of the vault. + /// @param salt The salt to use for the MetaMorpho vault's CREATE2 address. + function createMetaMorpho( + address initialOwner, + uint256 initialTimelock, + address asset, + string memory name, + string memory symbol, + bytes32 salt + ) external returns (IMetaMorpho metaMorpho); +} diff --git a/packages/blue-sdk-viem/contracts/vault-v2/GetVaultV2.sol b/packages/blue-sdk-viem/contracts/vault-v2/GetVaultV2.sol index acfb8517..fc8a6de9 100644 --- a/packages/blue-sdk-viem/contracts/vault-v2/GetVaultV2.sol +++ b/packages/blue-sdk-viem/contracts/vault-v2/GetVaultV2.sol @@ -4,9 +4,12 @@ pragma solidity ^0.8.0; import {IVaultV2, Caps} from "./interfaces/IVaultV2.sol"; import {IMorphoVaultV1AdapterFactory} from "./interfaces/IMorphoVaultV1AdapterFactory.sol"; import {IMorphoMarketV1AdapterV2Factory} from "./interfaces/IMorphoMarketV1AdapterV2Factory.sol"; +import {IVaultV2Factory} from "./interfaces/IVaultV2Factory.sol"; +error UnknownOfFactory(address factory, address vault); import {IMorphoMarketV1AdapterV2} from "./interfaces/IMorphoMarketV1AdapterV2.sol"; import {MarketParams} from "../interfaces/IMorpho.sol"; + struct Token { address asset; string symbol; @@ -44,9 +47,14 @@ struct VaultV2Response { contract GetVaultV2 { function query( IVaultV2 vault, + IVaultV2Factory vaultV2Factory, IMorphoVaultV1AdapterFactory morphoVaultV1AdapterFactory, IMorphoMarketV1AdapterV2Factory morphoMarketV1AdapterV2Factory ) external view returns (VaultV2Response memory res) { + if (!vaultV2Factory.isVaultV2(address(vault))) { + revert UnknownOfFactory(address(vaultV2Factory), address(vault)); + } + res.token = Token({asset: vault.asset(), symbol: vault.symbol(), name: vault.name(), decimals: vault.decimals()}); res.asset = vault.asset(); diff --git a/packages/blue-sdk-viem/contracts/vault-v2/GetVaultV2MorphoMarketV1Adapter.sol b/packages/blue-sdk-viem/contracts/vault-v2/GetVaultV2MorphoMarketV1Adapter.sol index 42869baa..d91ee784 100644 --- a/packages/blue-sdk-viem/contracts/vault-v2/GetVaultV2MorphoMarketV1Adapter.sol +++ b/packages/blue-sdk-viem/contracts/vault-v2/GetVaultV2MorphoMarketV1Adapter.sol @@ -3,6 +3,7 @@ pragma solidity ^0.8.0; import {IMorphoMarketV1Adapter} from "./interfaces/IMorphoMarketV1Adapter.sol"; import {MarketParams} from "../interfaces/IMorpho.sol"; +import {IMorphoMarketV1AdapterFactory} from "./interfaces/IMorphoMarketV1AdapterFactory.sol"; struct VaultV2MorphoMarketV1AdapterResponse { address parentVault; @@ -10,12 +11,18 @@ struct VaultV2MorphoMarketV1AdapterResponse { MarketParams[] marketParamsList; } +error UnknownOfFactory(address factory, address adapter); + contract GetVaultV2MorphoMarketV1Adapter { - function query(IMorphoMarketV1Adapter adapter) + function query(IMorphoMarketV1Adapter adapter, IMorphoMarketV1AdapterFactory factory) external view returns (VaultV2MorphoMarketV1AdapterResponse memory res) { + if (!factory.isMorphoMarketV1Adapter(address(adapter))) { + revert UnknownOfFactory(address(factory), address(adapter)); + } + res.parentVault = adapter.parentVault(); res.skimRecipient = adapter.skimRecipient(); diff --git a/packages/blue-sdk-viem/contracts/vault-v2/GetVaultV2MorphoMarketV1AdapterV2.sol b/packages/blue-sdk-viem/contracts/vault-v2/GetVaultV2MorphoMarketV1AdapterV2.sol index aa748643..74981852 100644 --- a/packages/blue-sdk-viem/contracts/vault-v2/GetVaultV2MorphoMarketV1AdapterV2.sol +++ b/packages/blue-sdk-viem/contracts/vault-v2/GetVaultV2MorphoMarketV1AdapterV2.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.0; import {IMorphoMarketV1AdapterV2} from "./interfaces/IMorphoMarketV1AdapterV2.sol"; - +import {IMorphoMarketV1AdapterV2Factory} from "./interfaces/IMorphoMarketV1AdapterV2Factory.sol"; struct MarketSupplyShares { bytes32 marketId; @@ -16,12 +16,18 @@ struct VaultV2MorphoMarketV1AdapterV2Response { MarketSupplyShares[] marketSupplyShares; } +error UnknownOfFactory(address factory, address adapter); + contract GetVaultV2MorphoMarketV1AdapterV2 { - function query(IMorphoMarketV1AdapterV2 adapter) + function query(IMorphoMarketV1AdapterV2 adapter, IMorphoMarketV1AdapterV2Factory factory) external view returns (VaultV2MorphoMarketV1AdapterV2Response memory res) { + if (!factory.isMorphoMarketV1AdapterV2(address(adapter))) { + revert UnknownOfFactory(address(factory), address(adapter)); + } + res.parentVault = adapter.parentVault(); res.skimRecipient = adapter.skimRecipient(); res.adaptiveCurveIrm = adapter.adaptiveCurveIrm(); diff --git a/packages/blue-sdk-viem/contracts/vault-v2/GetVaultV2MorphoVaultV1Adapter.sol b/packages/blue-sdk-viem/contracts/vault-v2/GetVaultV2MorphoVaultV1Adapter.sol index d3772dad..5a510b67 100644 --- a/packages/blue-sdk-viem/contracts/vault-v2/GetVaultV2MorphoVaultV1Adapter.sol +++ b/packages/blue-sdk-viem/contracts/vault-v2/GetVaultV2MorphoVaultV1Adapter.sol @@ -2,6 +2,7 @@ pragma solidity ^0.8.0; import {IMorphoVaultV1Adapter} from "./interfaces/IMorphoVaultV1Adapter.sol"; +import {IMorphoVaultV1AdapterFactory} from "./interfaces/IMorphoVaultV1AdapterFactory.sol"; struct VaultV2MorphoVaultV1AdapterResponse { address morphoVaultV1; @@ -9,12 +10,18 @@ struct VaultV2MorphoVaultV1AdapterResponse { address skimRecipient; } +error UnknownOfFactory(address factory, address adapter); + contract GetVaultV2MorphoVaultV1Adapter { - function query(IMorphoVaultV1Adapter adapter) + function query(IMorphoVaultV1Adapter adapter, IMorphoVaultV1AdapterFactory factory) external view returns (VaultV2MorphoVaultV1AdapterResponse memory res) { + if (!factory.isMorphoVaultV1Adapter(address(adapter))) { + revert UnknownOfFactory(address(factory), address(adapter)); + } + res.morphoVaultV1 = adapter.morphoVaultV1(); res.parentVault = adapter.parentVault(); res.skimRecipient = adapter.skimRecipient(); diff --git a/packages/blue-sdk-viem/contracts/vault-v2/interfaces/IMorphoMarketV1AdapterFactory.sol b/packages/blue-sdk-viem/contracts/vault-v2/interfaces/IMorphoMarketV1AdapterFactory.sol new file mode 100644 index 00000000..6638ec85 --- /dev/null +++ b/packages/blue-sdk-viem/contracts/vault-v2/interfaces/IMorphoMarketV1AdapterFactory.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +// Copyright (c) 2025 Morpho Association +pragma solidity >=0.5.0; + +interface IMorphoMarketV1AdapterFactory { + /* EVENTS */ + + event CreateMorphoMarketV1Adapter( + address indexed parentVault, address indexed morpho, address indexed morphoMarketV1Adapter + ); + + /* FUNCTIONS */ + + function morphoMarketV1Adapter(address parentVault, address morpho) external view returns (address); + function isMorphoMarketV1Adapter(address account) external view returns (bool); + function createMorphoMarketV1Adapter(address parentVault, address morpho) external returns (address); +} diff --git a/packages/blue-sdk-viem/contracts/vault-v2/interfaces/IVaultV2Factory.sol b/packages/blue-sdk-viem/contracts/vault-v2/interfaces/IVaultV2Factory.sol new file mode 100644 index 00000000..8e9a98aa --- /dev/null +++ b/packages/blue-sdk-viem/contracts/vault-v2/interfaces/IVaultV2Factory.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +// Copyright (c) 2025 Morpho Association +pragma solidity >=0.5.0; + +interface IVaultV2Factory { + /* EVENTS */ + + event CreateVaultV2(address indexed owner, address indexed asset, bytes32 salt, address indexed newVaultV2); + + /* FUNCTIONS */ + + function isVaultV2(address account) external view returns (bool); + function vaultV2(address owner, address asset, bytes32 salt) external view returns (address); + function createVaultV2(address owner, address asset, bytes32 salt) external returns (address newVaultV2); +} diff --git a/packages/blue-sdk-viem/src/error.ts b/packages/blue-sdk-viem/src/error.ts new file mode 100644 index 00000000..1040f98c --- /dev/null +++ b/packages/blue-sdk-viem/src/error.ts @@ -0,0 +1,18 @@ +import { BaseError, ContractFunctionRevertedError } from "viem"; + +/** + * Checks if an error is a contract revert with the "UnknownOfFactory" error name. + * Used to propagate factory validation errors instead of falling back to multicall. + */ +export function isUnknownOfFactoryError(error: unknown): boolean { + if (!(error instanceof BaseError)) return false; + + const revertError = error.walk( + (err) => err instanceof ContractFunctionRevertedError, + ); + + return ( + revertError instanceof ContractFunctionRevertedError && + revertError.data?.errorName === "UnknownOfFactory" + ); +} diff --git a/packages/blue-sdk-viem/src/fetch/Vault.ts b/packages/blue-sdk-viem/src/fetch/Vault.ts index 2fb75af7..6a3c3b98 100644 --- a/packages/blue-sdk-viem/src/fetch/Vault.ts +++ b/packages/blue-sdk-viem/src/fetch/Vault.ts @@ -4,6 +4,8 @@ import { AccrualVault, Eip5267Domain, type MarketId, + UnknownFactory, + UnknownOfFactory, Vault, VaultConfig, type VaultPublicAllocatorConfig, @@ -11,7 +13,11 @@ import { } from "@morpho-org/blue-sdk"; import { getChainId, readContract } from "viem/actions"; -import { metaMorphoAbi, publicAllocatorAbi } from "../abis"; +import { + metaMorphoAbi, + metaMorphoFactoryAbi, + publicAllocatorAbi, +} from "../abis"; import type { DeploylessFetchParameters } from "../types"; import { fetchVaultMarketAllocation } from "./VaultMarketAllocation"; @@ -25,7 +31,13 @@ export async function fetchVault( ) { parameters.chainId ??= await getChainId(client); - const { publicAllocator } = getChainAddresses(parameters.chainId); + const { publicAllocator, metaMorphoFactory } = getChainAddresses( + parameters.chainId, + ); + + if (!metaMorphoFactory) { + throw new UnknownFactory(); + } if (deployless) { try { @@ -52,7 +64,7 @@ export async function fetchVault( abi, code, functionName: "query", - args: [address, publicAllocator ?? zeroAddress], + args: [address, publicAllocator ?? zeroAddress, metaMorphoFactory], }); return new Vault({ @@ -104,6 +116,7 @@ export async function fetchVault( supplyQueueSize, withdrawQueueSize, hasPublicAllocator, + isMetaMorphoV1_1, ] = await Promise.all([ fetchVaultConfig(address, client, { ...parameters, deployless }), readContract(client, { @@ -210,8 +223,28 @@ export async function fetchVault( functionName: "isAllocator", args: [publicAllocator], }), + readContract(client, { + ...parameters, + address: metaMorphoFactory, + abi: metaMorphoFactoryAbi, + functionName: "isMetaMorpho", + args: [address], + }).catch(() => false), ]); + // Fallback to the MetaMorphoV1.0 factory on Ethereum (1) and Base (8453) + const isMetaMorphoV1_0Promise = + !isMetaMorphoV1_1 && + (parameters.chainId === 1 || parameters.chainId === 8453) + ? readContract(client, { + ...parameters, + address: "0xA9c3D3a366466Fa809d1Ae982Fb2c46E5fC41101", + abi: metaMorphoFactoryAbi, + functionName: "isMetaMorpho", + args: [address], + }) + : Promise.resolve(false); + let publicAllocatorConfigPromise: | Promise | undefined; @@ -240,8 +273,8 @@ export async function fetchVault( }), ]).then(([admin, fee, accruedFee]) => ({ admin, fee, accruedFee })); - const [supplyQueue, withdrawQueue, publicAllocatorConfig] = await Promise.all( - [ + const [supplyQueue, withdrawQueue, publicAllocatorConfig, isMetaMorphoV1_0] = + await Promise.all([ Promise.all( Array.from( { length: Number(supplyQueueSize) }, @@ -269,8 +302,13 @@ export async function fetchVault( ), ), publicAllocatorConfigPromise, - ], - ); + isMetaMorphoV1_0Promise, + ]); + + const isMetaMorpho = isMetaMorphoV1_1 || isMetaMorphoV1_0; + if (!isMetaMorpho) { + throw new UnknownOfFactory(metaMorphoFactory, address); + } return new Vault({ ...config, diff --git a/packages/blue-sdk-viem/src/fetch/vault-v2/VaultV2.ts b/packages/blue-sdk-viem/src/fetch/vault-v2/VaultV2.ts index 3fd2a4f3..81463b02 100644 --- a/packages/blue-sdk-viem/src/fetch/vault-v2/VaultV2.ts +++ b/packages/blue-sdk-viem/src/fetch/vault-v2/VaultV2.ts @@ -2,6 +2,8 @@ import { AccrualVaultV2, type IVaultV2Allocation, MarketParams, + UnknownFactory, + UnknownOfFactory, VaultV2, VaultV2MorphoMarketV1AdapterV2, VaultV2MorphoVaultV1Adapter, @@ -19,7 +21,9 @@ import { morphoMarketV1AdapterV2FactoryAbi, morphoVaultV1AdapterFactoryAbi, vaultV2Abi, + vaultV2FactoryAbi, } from "../../abis"; +import { isUnknownOfFactoryError } from "../../error"; import { abi, code } from "../../queries/vault-v2/GetVaultV2"; import type { DeploylessFetchParameters } from "../../types"; import { fetchToken } from "../Token"; @@ -32,8 +36,15 @@ export async function fetchVaultV2( ) { parameters.chainId ??= await getChainId(client); - const { morphoVaultV1AdapterFactory, morphoMarketV1AdapterV2Factory } = - getChainAddresses(parameters.chainId); + const { + morphoVaultV1AdapterFactory, + morphoMarketV1AdapterV2Factory, + vaultV2Factory, + } = getChainAddresses(parameters.chainId); + + if (!vaultV2Factory) { + throw new UnknownFactory(); + } if (deployless) { try { @@ -45,6 +56,7 @@ export async function fetchVaultV2( functionName: "query", args: [ address, + vaultV2Factory, morphoVaultV1AdapterFactory ?? zeroAddress, morphoMarketV1AdapterV2Factory ?? zeroAddress, ], @@ -61,12 +73,14 @@ export async function fetchVaultV2( }); } catch (error) { if (deployless === "force") throw error; + if (isUnknownOfFactoryError(error)) throw error; // Fallback to multicall if deployless call fails. } } const [ token, + isVaultV2, asset, totalSupply, totalAssets, @@ -83,6 +97,14 @@ export async function fetchVaultV2( managementFeeRecipient, ] = await Promise.all([ fetchToken(address, client, { ...parameters, deployless }), + + readContract(client, { + ...parameters, + address: vaultV2Factory, + abi: vaultV2FactoryAbi, + functionName: "isVaultV2", + args: [address], + }), readContract(client, { ...parameters, address, @@ -169,6 +191,10 @@ export async function fetchVaultV2( }), ]); + if (!isVaultV2) { + throw new UnknownOfFactory(vaultV2Factory, address); + } + const [ hasMorphoVaultV1LiquidityAdapter, hasMorphoMarketV1AdapterV2LiquidityAdapter, diff --git a/packages/blue-sdk-viem/src/fetch/vault-v2/VaultV2MorphoMarketV1Adapter.ts b/packages/blue-sdk-viem/src/fetch/vault-v2/VaultV2MorphoMarketV1Adapter.ts index 0165e43f..c1ddeea8 100644 --- a/packages/blue-sdk-viem/src/fetch/vault-v2/VaultV2MorphoMarketV1Adapter.ts +++ b/packages/blue-sdk-viem/src/fetch/vault-v2/VaultV2MorphoMarketV1Adapter.ts @@ -1,10 +1,17 @@ import { AccrualVaultV2MorphoMarketV1Adapter, + UnknownFactory, + UnknownOfFactory, VaultV2MorphoMarketV1Adapter, + getChainAddresses, } from "@morpho-org/blue-sdk"; import type { Address, Client } from "viem"; import { getChainId, readContract } from "viem/actions"; -import { morphoMarketV1AdapterAbi } from "../../abis"; +import { + morphoMarketV1AdapterAbi, + morphoMarketV1AdapterFactoryAbi, +} from "../../abis"; +import { isUnknownOfFactoryError } from "../../error"; import { abi, code, @@ -20,6 +27,14 @@ export async function fetchVaultV2MorphoMarketV1Adapter( ) { parameters.chainId ??= await getChainId(client); + const { morphoMarketV1AdapterFactory } = getChainAddresses( + parameters.chainId, + ); + + if (!morphoMarketV1AdapterFactory) { + throw new UnknownFactory(); + } + if (deployless) { try { const adapter = await readContract(client, { @@ -27,7 +42,7 @@ export async function fetchVaultV2MorphoMarketV1Adapter( abi, code, functionName: "query", - args: [address], + args: [address, morphoMarketV1AdapterFactory], }); return new VaultV2MorphoMarketV1Adapter({ @@ -37,31 +52,48 @@ export async function fetchVaultV2MorphoMarketV1Adapter( }); } catch (error) { if (deployless === "force") throw error; + if (isUnknownOfFactoryError(error)) throw error; // Fallback to multicall if deployless call fails. } } - const [parentVault, skimRecipient, marketParamsListLength] = - await Promise.all([ - readContract(client, { - ...parameters, - address, - abi: morphoMarketV1AdapterAbi, - functionName: "parentVault", - }), - readContract(client, { - ...parameters, - address, - abi: morphoMarketV1AdapterAbi, - functionName: "skimRecipient", - }), - readContract(client, { - ...parameters, - address, - abi: morphoMarketV1AdapterAbi, - functionName: "marketParamsListLength", - }), - ]); + const [ + isMorphoMarketV1Adapter, + parentVault, + skimRecipient, + marketParamsListLength, + ] = await Promise.all([ + readContract(client, { + ...parameters, + address: morphoMarketV1AdapterFactory, + abi: morphoMarketV1AdapterFactoryAbi, + functionName: "isMorphoMarketV1Adapter", + args: [address], + }) // Factory may not have been deployed at requested block tag. + .catch(() => false), + readContract(client, { + ...parameters, + address, + abi: morphoMarketV1AdapterAbi, + functionName: "parentVault", + }), + readContract(client, { + ...parameters, + address, + abi: morphoMarketV1AdapterAbi, + functionName: "skimRecipient", + }), + readContract(client, { + ...parameters, + address, + abi: morphoMarketV1AdapterAbi, + functionName: "marketParamsListLength", + }), + ]); + + if (!isMorphoMarketV1Adapter) { + throw new UnknownOfFactory(morphoMarketV1AdapterFactory, address); + } const marketParamsList = await Promise.all( Array.from({ length: Number(marketParamsListLength) }, (_, i) => diff --git a/packages/blue-sdk-viem/src/fetch/vault-v2/VaultV2MorphoMarketV1AdapterV2.ts b/packages/blue-sdk-viem/src/fetch/vault-v2/VaultV2MorphoMarketV1AdapterV2.ts index 51f2f9a0..00cc05fe 100644 --- a/packages/blue-sdk-viem/src/fetch/vault-v2/VaultV2MorphoMarketV1AdapterV2.ts +++ b/packages/blue-sdk-viem/src/fetch/vault-v2/VaultV2MorphoMarketV1AdapterV2.ts @@ -1,12 +1,19 @@ import { AccrualVaultV2MorphoMarketV1AdapterV2, type MarketId, + UnknownFactory, + UnknownOfFactory, VaultV2MorphoMarketV1AdapterV2, + getChainAddresses, } from "@morpho-org/blue-sdk"; import { fromEntries } from "@morpho-org/morpho-ts"; import type { Address, Client } from "viem"; import { getChainId, readContract } from "viem/actions"; -import { morphoMarketV1AdapterV2Abi } from "../../abis"; +import { + morphoMarketV1AdapterV2Abi, + morphoMarketV1AdapterV2FactoryAbi, +} from "../../abis"; +import { isUnknownOfFactoryError } from "../../error"; import { abi, code, @@ -21,6 +28,14 @@ export async function fetchVaultV2MorphoMarketV1AdapterV2( ) { parameters.chainId ??= await getChainId(client); + const { morphoMarketV1AdapterV2Factory } = getChainAddresses( + parameters.chainId, + ); + + if (!morphoMarketV1AdapterV2Factory) { + throw new UnknownFactory(); + } + if (deployless) { try { const adapter = await readContract(client, { @@ -28,7 +43,7 @@ export async function fetchVaultV2MorphoMarketV1AdapterV2( abi, code, functionName: "query", - args: [address], + args: [address, morphoMarketV1AdapterV2Factory], }); return new VaultV2MorphoMarketV1AdapterV2({ @@ -46,38 +61,57 @@ export async function fetchVaultV2MorphoMarketV1AdapterV2( ), address, }); - } catch { + } catch (error) { + if (deployless === "force") throw error; + if (isUnknownOfFactoryError(error)) throw error; // Fallback to multicall if deployless call fails. } } - const [parentVault, skimRecipient, marketIdsLength, adaptiveCurveIrm] = - await Promise.all([ - readContract(client, { - ...parameters, - address, - abi: morphoMarketV1AdapterV2Abi, - functionName: "parentVault", - }), - readContract(client, { - ...parameters, - address, - abi: morphoMarketV1AdapterV2Abi, - functionName: "skimRecipient", - }), - readContract(client, { - ...parameters, - address, - abi: morphoMarketV1AdapterV2Abi, - functionName: "marketIdsLength", - }), - readContract(client, { - ...parameters, - address, - abi: morphoMarketV1AdapterV2Abi, - functionName: "adaptiveCurveIrm", - }), - ]); + const [ + isMorphoMarketV1AdapterV2, + parentVault, + skimRecipient, + marketIdsLength, + adaptiveCurveIrm, + ] = await Promise.all([ + readContract(client, { + ...parameters, + address: morphoMarketV1AdapterV2Factory, + abi: morphoMarketV1AdapterV2FactoryAbi, + functionName: "isMorphoMarketV1AdapterV2", + args: [address], + }) // Factory may not have been deployed at requested block tag. + .catch(() => false), + readContract(client, { + ...parameters, + address, + abi: morphoMarketV1AdapterV2Abi, + functionName: "parentVault", + }), + readContract(client, { + ...parameters, + address, + abi: morphoMarketV1AdapterV2Abi, + functionName: "skimRecipient", + }), + readContract(client, { + ...parameters, + address, + abi: morphoMarketV1AdapterV2Abi, + functionName: "marketIdsLength", + }), + readContract(client, { + ...parameters, + address, + abi: morphoMarketV1AdapterV2Abi, + functionName: "adaptiveCurveIrm", + }), + ]); + + if (!isMorphoMarketV1AdapterV2) { + throw new UnknownOfFactory(morphoMarketV1AdapterV2Factory, address); + } const marketIds = await Promise.all( Array.from( diff --git a/packages/blue-sdk-viem/src/fetch/vault-v2/VaultV2MorphoVaultV1Adapter.ts b/packages/blue-sdk-viem/src/fetch/vault-v2/VaultV2MorphoVaultV1Adapter.ts index ecc65870..fa9ed631 100644 --- a/packages/blue-sdk-viem/src/fetch/vault-v2/VaultV2MorphoVaultV1Adapter.ts +++ b/packages/blue-sdk-viem/src/fetch/vault-v2/VaultV2MorphoVaultV1Adapter.ts @@ -1,10 +1,17 @@ import { AccrualVaultV2MorphoVaultV1Adapter, + UnknownFactory, + UnknownOfFactory, VaultV2MorphoVaultV1Adapter, + getChainAddresses, } from "@morpho-org/blue-sdk"; import { type Address, type Client, erc20Abi } from "viem"; import { getChainId, readContract } from "viem/actions"; -import { morphoVaultV1AdapterAbi } from "../../abis"; +import { + morphoVaultV1AdapterAbi, + morphoVaultV1AdapterFactoryAbi, +} from "../../abis"; +import { isUnknownOfFactoryError } from "../../error"; import { abi, code, @@ -19,6 +26,12 @@ export async function fetchVaultV2MorphoVaultV1Adapter( ) { parameters.chainId ??= await getChainId(client); + const { morphoVaultV1AdapterFactory } = getChainAddresses(parameters.chainId); + + if (!morphoVaultV1AdapterFactory) { + throw new UnknownFactory(); + } + if (deployless) { try { const adapter = await readContract(client, { @@ -26,36 +39,50 @@ export async function fetchVaultV2MorphoVaultV1Adapter( abi, code, functionName: "query", - args: [address], + args: [address, morphoVaultV1AdapterFactory], }); return new VaultV2MorphoVaultV1Adapter({ ...adapter, address }); } catch (error) { if (deployless === "force") throw error; + if (isUnknownOfFactoryError(error)) throw error; // Fallback to multicall if deployless call fails. } } - const [parentVault, skimRecipient, morphoVaultV1] = await Promise.all([ - readContract(client, { - ...parameters, - address, - abi: morphoVaultV1AdapterAbi, - functionName: "parentVault", - }), - readContract(client, { - ...parameters, - address, - abi: morphoVaultV1AdapterAbi, - functionName: "skimRecipient", - }), - readContract(client, { - ...parameters, - address, - abi: morphoVaultV1AdapterAbi, - functionName: "morphoVaultV1", - }), - ]); + const [isMorphoVaultV1Adapter, parentVault, skimRecipient, morphoVaultV1] = + await Promise.all([ + readContract(client, { + ...parameters, + address: morphoVaultV1AdapterFactory, + abi: morphoVaultV1AdapterFactoryAbi, + functionName: "isMorphoVaultV1Adapter", + args: [address], + }) // Factory may not have been deployed at requested block tag. + .catch(() => false), + readContract(client, { + ...parameters, + address, + abi: morphoVaultV1AdapterAbi, + functionName: "parentVault", + }), + readContract(client, { + ...parameters, + address, + abi: morphoVaultV1AdapterAbi, + functionName: "skimRecipient", + }), + readContract(client, { + ...parameters, + address, + abi: morphoVaultV1AdapterAbi, + functionName: "morphoVaultV1", + }), + ]); + + if (!isMorphoVaultV1Adapter) { + throw new UnknownOfFactory(morphoVaultV1AdapterFactory, address); + } return new VaultV2MorphoVaultV1Adapter({ morphoVaultV1, diff --git a/packages/blue-sdk-viem/src/queries/GetVault.ts b/packages/blue-sdk-viem/src/queries/GetVault.ts index 8b199d2d..e892d2ad 100644 --- a/packages/blue-sdk-viem/src/queries/GetVault.ts +++ b/packages/blue-sdk-viem/src/queries/GetVault.ts @@ -1,4 +1,12 @@ export const abi = [ + { + inputs: [ + { internalType: "address", name: "factory", type: "address" }, + { internalType: "address", name: "vault", type: "address" }, + ], + name: "UnknownOfFactory", + type: "error", + }, { inputs: [ { @@ -11,6 +19,11 @@ export const abi = [ name: "publicAllocator", type: "address", }, + { + internalType: "contract IMetaMorphoFactory", + name: "metaMorphoFactory", + type: "address", + }, ], name: "query", outputs: [ @@ -203,4 +216,4 @@ export const abi = [ ] as const; export const code = - "0x6080806040523460155761139e908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c63f6f030ce14610024575f80fd5b3461098e57604036600319011261098e576004356001600160a01b038116810361098e576024356001600160a01b038116810361098e576102a060405260405161006d816111ac565b5f815260606020820152606060408201525f60608201525f6080820152604051610096816111c7565b5f815260606020820152606060408201525f60608201525f60808201525f60a0820152606060c082015260a08201526080525f6020608001525f6040608001525f6060608001525f60808001526040516100ef816111fd565b5f808252602082015261012052604051610108816111fd565b5f80825260208201819052610140919091526101608190526101808190526101a08190526101c08190526101e08190526102008190526102205260606102408190526102605260405161015a816111e2565b5f81525f60208201525f6040820152610200608001526040516338d52e0f60e01b815260208160048160018060a01b0387165afa90811561099a575f91611107575b506040516395d89b4160e01b81525f816004816001600160a01b0388165afa90811561099a575f916110ed575b506040516306fdde0360e01b81525f816004816001600160a01b0389165afa90811561099a575f916110cb575b5060405163313ce56760e01b81526020816004816001600160a01b038a165afa90811561099a575f916110ac575b50604051632ba9c2b360e21b8152916020836004816001600160a01b038b165afa92831561099a575f9361107b575b506040516342580cb760e11b8152935f856004816001600160a01b038c165afa94851561099a575f95610f20575b509160ff939291849260405197610297896111ac565b60018060a01b031688526020880152604087015216606085015216608083015260a0820152608052604051638da5cb5b60e01b815260208160048160018060a01b0387165afa90811561099a575f91610ee6575b506001600160a01b0390811660a05260405163e66f53b760e01b8152906020908290600490829087165afa90811561099a575f91610eac575b506001600160a01b0390811660c052604051630229549960e51b8152906020908290600490829087165afa90811561099a575f91610e72575b506001600160a01b0390811660e0526040516334cc866d60e21b8152906020908290600490829087165afa90811561099a575f91610e40575b506101005260408051637cc4d9a160e01b815290816004816001600160a01b0387165afa90811561099a575f91610ddd575b506101205260408051633b1618dd60e11b815290816004816001600160a01b0387165afa90811561099a575f91610d84575b5061014052604051631c61872f60e31b81526020816004816001600160a01b0387165afa90811561099a575f91610d4a575b506001600160a01b039081166101605260405163ddca3f4360e01b8152906020908290600490829087165afa801561099a575f90610d01575b6001600160601b0316610180525060405163011a412160e61b81526020816004816001600160a01b0387165afa90811561099a575f91610cc7575b506001600160a01b039081166101a05260405163388af5b560e01b8152906020908290600490829087165afa90811561099a575f91610c8d575b506001600160a01b039081166101c0526040516318160ddd60e01b8152906020908290600490829087165afa90811561099a575f91610c5b575b506101e0526040516278744560e21b81526020816004816001600160a01b0387165afa90811561099a575f91610c29575b506102005260405163568efc0760e01b81526020816004816001600160a01b0387165afa90811561099a575f91610bf7575b5061022052604051630a17b31360e41b81526020816004816001600160a01b0387165afa90811561099a575f91610bc5575b506105b38161130e565b610240525f5b818110610b445750506040516333f91ebb60e01b81526020816004816001600160a01b0387165afa90811561099a575f91610b12575b506105f98161130e565b610260525f5b818110610a915750506001600160a01b038116151580610a16575b610881575b505060405160208152806080516102a0602083015260018060a01b038151166102c083015260a061067c610664602084015160c06102e0870152610380860190611155565b60408401518582036102bf1901610300870152611155565b916060810151610320850152608081015161034085015201516102bf198383030161036084015260ff60f81b815116825260c06106dd6106cb602084015160e0602087015260e0860190611155565b60408401518582036040870152611155565b916060810151606085015260018060a01b03608082015116608085015260a081015160a085015201519160c0818303910152602080835192838152019201905f5b81811061086857505060a080516001600160a01b03908116604086015260c080518216606087015260e0805183166080880152610100805194880194909452610120805180516001600160c01b0316938901939093526020928301516001600160401b0390811692890192909252610140805180518616968a01969096529490920151169086015261016080518216928601929092526101808051928601929092526101a080518216928601929092526101c08051909116918501919091526101e080519185019190915261020080519185019190915261022080519185019190915261024051848403601f19019185019190915261083892610822925090611179565b61026051838203601f1901610240850152611179565b610280805180516001600160a01b0316610260850152602081015191840191909152604001516102a08301520390f35b825184528594506020938401939092019160010161071e565b604051630c7508df60e31b81526001600160a01b0380841660048301529092906020908490602490829086165afa92831561099a575f936109da575b50604051636fcca69b60e01b81526001600160a01b0380831660048301529091906020908390602490829087165afa91821561099a575f926109a5575b506040516348d88a5960e11b81526001600160a01b0391821660048201529260209184916024918391165afa91821561099a575f92610962575b5060405192610942846111e2565b6001600160a01b0316835260208301526040820152610280525f8061061f565b9091506020813d602011610992575b8161097e60209383611218565b8101031261098e5751905f610934565b5f80fd5b3d9150610971565b6040513d5f823e3d90fd5b9091506020813d6020116109d2575b816109c160209383611218565b8101031261098e57519060206108fa565b3d91506109b4565b9092506020813d602011610a0e575b816109f660209383611218565b8101031261098e57610a0790611239565b915f6108bd565b3d91506109e9565b506040516326f6f90760e11b81526001600160a01b0382811660048301526020908290602490829087165afa90811561099a575f91610a56575b5061061a565b90506020813d602011610a89575b81610a7160209383611218565b8101031261098e5751801515810361098e575f610a50565b3d9150610a64565b6040516362518ddf60e01b815260048101829052906020826024816001600160a01b0389165afa801561099a575f90610ae0575b60019250610ad9826101e060800151611340565b52016105ff565b506020823d8211610b0a575b81610af960209383611218565b8101031261098e5760019151610ac5565b3d9150610aec565b90506020813d602011610b3c575b81610b2d60209383611218565b8101031261098e57515f6105ef565b3d9150610b20565b60405163f7d1852160e01b815260048101829052906020826024816001600160a01b0389165afa801561099a575f90610b93575b60019250610b8c826101c060800151611340565b52016105b9565b506020823d8211610bbd575b81610bac60209383611218565b8101031261098e5760019151610b78565b3d9150610b9f565b90506020813d602011610bef575b81610be060209383611218565b8101031261098e57515f6105a9565b3d9150610bd3565b90506020813d602011610c21575b81610c1260209383611218565b8101031261098e57515f610577565b3d9150610c05565b90506020813d602011610c53575b81610c4460209383611218565b8101031261098e57515f610545565b3d9150610c37565b90506020813d602011610c85575b81610c7660209383611218565b8101031261098e57515f610514565b3d9150610c69565b90506020813d602011610cbf575b81610ca860209383611218565b8101031261098e57610cb990611239565b5f6104da565b3d9150610c9b565b90506020813d602011610cf9575b81610ce260209383611218565b8101031261098e57610cf390611239565b5f6104a0565b3d9150610cd5565b506020813d602011610d42575b81610d1b60209383611218565b8101031261098e57516001600160601b038116810361098e576001600160601b0390610465565b3d9150610d0e565b90506020813d602011610d7c575b81610d6560209383611218565b8101031261098e57610d7690611239565b5f61042c565b3d9150610d58565b90506040813d604011610dd5575b81610d9f60409383611218565b8101031261098e57610dca602060405192610db9846111fd565b610dc281611239565b8452016112fa565b60208201525f6103fa565b3d9150610d92565b90506040813d604011610e38575b81610df860409383611218565b8101031261098e5760405190610e0d826111fd565b80516001600160c01b038116810361098e578252610e2d906020016112fa565b60208201525f6103c8565b3d9150610deb565b90506020813d602011610e6a575b81610e5b60209383611218565b8101031261098e57515f610396565b3d9150610e4e565b90506020813d602011610ea4575b81610e8d60209383611218565b8101031261098e57610e9e90611239565b5f61035d565b3d9150610e80565b90506020813d602011610ede575b81610ec760209383611218565b8101031261098e57610ed890611239565b5f610324565b3d9150610eba565b90506020813d602011610f18575b81610f0160209383611218565b8101031261098e57610f1290611239565b5f6102eb565b3d9150610ef4565b9094503d805f833e610f328183611218565b81019060208183031261098e578051906001600160401b03821161098e570160e08183031261098e5760405191610f68836111c7565b81516001600160f81b03198116810361098e57835260208201516001600160401b03811161098e5781610f9c91840161124d565b602084015260408201516001600160401b03811161098e5781610fc091840161124d565b604084015260608201516060840152610fdb60808301611239565b608084015260a082015160a084015260c0820151906001600160401b03821161098e5780601f83850101121561098e578183015191611019836112e3565b936110276040519586611218565b838552602085019260208560051b84840101011161098e5790602081830101925b60208560051b8385010101841061106b57505050505060c08201529360ff610281565b8351815260209384019301611048565b61109e91935060203d6020116110a5575b6110968183611218565b8101906112ca565b915f610253565b503d61108c565b6110c5915060203d6020116110a5576110968183611218565b5f610224565b6110e791503d805f833e6110df8183611218565b8101906112a2565b5f6101f6565b61110191503d805f833e6110df8183611218565b5f6101c9565b90506020813d602011611139575b8161112260209383611218565b8101031261098e5761113390611239565b5f61019c565b3d9150611115565b634e487b7160e01b5f52604160045260245ffd5b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b90602080835192838152019201905f5b8181106111965750505090565b8251845260209384019390920191600101611189565b60c081019081106001600160401b0382111761114157604052565b60e081019081106001600160401b0382111761114157604052565b606081019081106001600160401b0382111761114157604052565b604081019081106001600160401b0382111761114157604052565b90601f801991011681019081106001600160401b0382111761114157604052565b51906001600160a01b038216820361098e57565b81601f8201121561098e578051906001600160401b0382116111415760405192611281601f8401601f191660200185611218565b8284526020838301011161098e57815f9260208093018386015e8301015290565b9060208282031261098e5781516001600160401b03811161098e576112c7920161124d565b90565b9081602091031261098e575160ff8116810361098e5790565b6001600160401b0381116111415760051b60200190565b51906001600160401b038216820361098e57565b90611318826112e3565b6113256040519182611218565b8281528092611336601f19916112e3565b0190602036910137565b80518210156113545760209160051b010190565b634e487b7160e01b5f52603260045260245ffdfea264697066735822122023293b2df005682d3a7c99045b7086cbb4e62e771a73844d3f8f7c0947c627a964736f6c634300081b0033"; + "0x608080604052346015576114d1908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c63c93eac5414610024575f80fd5b346109e45760603660031901126109e4576004356001600160a01b03811681036109e4576024356001600160a01b03811681036109e4576044356001600160a01b03811681036109e4576102a0604052604051610080816112c7565b5f815260606020820152606060408201525f60608201525f60808201526040516100a9816112e2565b5f815260606020820152606060408201525f60608201525f60808201525f60a0820152606060c082015260a08201526080525f6020608001525f6040608001525f6060608001525f608080015260405161010281611318565b5f80825260208201526101205260405161011b81611318565b5f80825260208201819052610140919091526101608190526101808190526101a08190526101c08190526101e08190526102008190526102205260606102408190526102605260405161016d816112fd565b5f81525f60208201525f604082015261020060800152604051630a6d4d4b60e21b815260018060a01b038416600482015260208160248160018060a01b0386165afa9081156109f0575f9161123d575b501561118b575b506040516338d52e0f60e01b81526020816004816001600160a01b0387165afa9081156109f0575f91611151575b506040516395d89b4160e01b81525f816004816001600160a01b0388165afa9081156109f0575f91611137575b506040516306fdde0360e01b81525f816004816001600160a01b0389165afa9081156109f0575f91611115575b5060405163313ce56760e01b81526020816004816001600160a01b038a165afa9081156109f0575f916110f6575b50604051632ba9c2b360e21b8152916020836004816001600160a01b038b165afa9283156109f0575f936110c5575b506040516342580cb760e11b8152935f856004816001600160a01b038c165afa9485156109f0575f95610f6a575b509160ff9392918492604051976102ed896112c7565b60018060a01b031688526020880152604087015216606085015216608083015260a0820152608052604051638da5cb5b60e01b815260208160048160018060a01b0387165afa9081156109f0575f91610f30575b506001600160a01b0390811660a05260405163e66f53b760e01b8152906020908290600490829087165afa9081156109f0575f91610ef6575b506001600160a01b0390811660c052604051630229549960e51b8152906020908290600490829087165afa9081156109f0575f91610ebc575b506001600160a01b0390811660e0526040516334cc866d60e21b8152906020908290600490829087165afa9081156109f0575f91610e8a575b506101005260408051637cc4d9a160e01b815290816004816001600160a01b0387165afa9081156109f0575f91610e27575b506101205260408051633b1618dd60e11b815290816004816001600160a01b0387165afa9081156109f0575f91610dce575b5061014052604051631c61872f60e31b81526020816004816001600160a01b0387165afa9081156109f0575f91610d94575b506001600160a01b039081166101605260405163ddca3f4360e01b8152906020908290600490829087165afa80156109f0575f90610d4b575b6001600160601b0316610180525060405163011a412160e61b81526020816004816001600160a01b0387165afa9081156109f0575f91610d11575b506001600160a01b039081166101a05260405163388af5b560e01b8152906020908290600490829087165afa9081156109f0575f91610cd7575b506001600160a01b039081166101c0526040516318160ddd60e01b8152906020908290600490829087165afa9081156109f0575f91610ca5575b506101e0526040516278744560e21b81526020816004816001600160a01b0387165afa9081156109f0575f91610c73575b506102005260405163568efc0760e01b81526020816004816001600160a01b0387165afa9081156109f0575f91610c41575b5061022052604051630a17b31360e41b81526020816004816001600160a01b0387165afa9081156109f0575f91610c0f575b5061060981611441565b610240525f5b818110610b8e5750506040516333f91ebb60e01b81526020816004816001600160a01b0387165afa9081156109f0575f91610b5c575b5061064f81611441565b610260525f5b818110610adb5750506001600160a01b038116151580610a6c575b6108d7575b505060405160208152806080516102a0602083015260018060a01b038151166102c083015260a06106d26106ba602084015160c06102e0870152610380860190611270565b60408401518582036102bf1901610300870152611270565b916060810151610320850152608081015161034085015201516102bf198383030161036084015260ff60f81b815116825260c0610733610721602084015160e0602087015260e0860190611270565b60408401518582036040870152611270565b916060810151606085015260018060a01b03608082015116608085015260a081015160a085015201519160c0818303910152602080835192838152019201905f5b8181106108be57505060a080516001600160a01b03908116604086015260c080518216606087015260e0805183166080880152610100805194880194909452610120805180516001600160c01b0316938901939093526020928301516001600160401b0390811692890192909252610140805180518616968a01969096529490920151169086015261016080518216928601929092526101808051928601929092526101a080518216928601929092526101c08051909116918501919091526101e080519185019190915261020080519185019190915261022080519185019190915261024051848403601f19019185019190915261088e92610878925090611294565b61026051838203601f1901610240850152611294565b610280805180516001600160a01b0316610260850152602081015191840191909152604001516102a08301520390f35b8251845285945060209384019390920191600101610774565b604051630c7508df60e31b81526001600160a01b0380841660048301529092906020908490602490829086165afa9283156109f0575f93610a30575b50604051636fcca69b60e01b81526001600160a01b0380831660048301529091906020908390602490829087165afa9182156109f0575f926109fb575b506040516348d88a5960e11b81526001600160a01b0391821660048201529260209184916024918391165afa9182156109f0575f926109b8575b5060405192610998846112fd565b6001600160a01b0316835260208301526040820152610280525f80610675565b9091506020813d6020116109e8575b816109d460209383611333565b810103126109e45751905f61098a565b5f80fd5b3d91506109c7565b6040513d5f823e3d90fd5b9091506020813d602011610a28575b81610a1760209383611333565b810103126109e45751906020610950565b3d9150610a0a565b9092506020813d602011610a64575b81610a4c60209383611333565b810103126109e457610a5d9061136c565b915f610913565b3d9150610a3f565b506040516326f6f90760e11b81526001600160a01b0382811660048301526020908290602490829087165afa9081156109f0575f91610aac575b50610670565b610ace915060203d602011610ad4575b610ac68183611333565b810190611354565b5f610aa6565b503d610abc565b6040516362518ddf60e01b815260048101829052906020826024816001600160a01b0389165afa80156109f0575f90610b2a575b60019250610b23826101e060800151611473565b5201610655565b506020823d8211610b54575b81610b4360209383611333565b810103126109e45760019151610b0f565b3d9150610b36565b90506020813d602011610b86575b81610b7760209383611333565b810103126109e457515f610645565b3d9150610b6a565b60405163f7d1852160e01b815260048101829052906020826024816001600160a01b0389165afa80156109f0575f90610bdd575b60019250610bd6826101c060800151611473565b520161060f565b506020823d8211610c07575b81610bf660209383611333565b810103126109e45760019151610bc2565b3d9150610be9565b90506020813d602011610c39575b81610c2a60209383611333565b810103126109e457515f6105ff565b3d9150610c1d565b90506020813d602011610c6b575b81610c5c60209383611333565b810103126109e457515f6105cd565b3d9150610c4f565b90506020813d602011610c9d575b81610c8e60209383611333565b810103126109e457515f61059b565b3d9150610c81565b90506020813d602011610ccf575b81610cc060209383611333565b810103126109e457515f61056a565b3d9150610cb3565b90506020813d602011610d09575b81610cf260209383611333565b810103126109e457610d039061136c565b5f610530565b3d9150610ce5565b90506020813d602011610d43575b81610d2c60209383611333565b810103126109e457610d3d9061136c565b5f6104f6565b3d9150610d1f565b506020813d602011610d8c575b81610d6560209383611333565b810103126109e457516001600160601b03811681036109e4576001600160601b03906104bb565b3d9150610d58565b90506020813d602011610dc6575b81610daf60209383611333565b810103126109e457610dc09061136c565b5f610482565b3d9150610da2565b90506040813d604011610e1f575b81610de960409383611333565b810103126109e457610e14602060405192610e0384611318565b610e0c8161136c565b84520161142d565b60208201525f610450565b3d9150610ddc565b90506040813d604011610e82575b81610e4260409383611333565b810103126109e45760405190610e5782611318565b80516001600160c01b03811681036109e4578252610e779060200161142d565b60208201525f61041e565b3d9150610e35565b90506020813d602011610eb4575b81610ea560209383611333565b810103126109e457515f6103ec565b3d9150610e98565b90506020813d602011610eee575b81610ed760209383611333565b810103126109e457610ee89061136c565b5f6103b3565b3d9150610eca565b90506020813d602011610f28575b81610f1160209383611333565b810103126109e457610f229061136c565b5f61037a565b3d9150610f04565b90506020813d602011610f62575b81610f4b60209383611333565b810103126109e457610f5c9061136c565b5f610341565b3d9150610f3e565b9094503d805f833e610f7c8183611333565b8101906020818303126109e4578051906001600160401b0382116109e4570160e0818303126109e45760405191610fb2836112e2565b81516001600160f81b0319811681036109e457835260208201516001600160401b0381116109e45781610fe6918401611380565b602084015260408201516001600160401b0381116109e4578161100a918401611380565b6040840152606082015160608401526110256080830161136c565b608084015260a082015160a084015260c0820151906001600160401b0382116109e45780601f8385010112156109e457818301519161106383611416565b936110716040519586611333565b838552602085019260208560051b8484010101116109e45790602081830101925b60208560051b838501010184106110b557505050505060c08201529360ff6102d7565b8351815260209384019301611092565b6110e891935060203d6020116110ef575b6110e08183611333565b8101906113fd565b915f6102a9565b503d6110d6565b61110f915060203d6020116110ef576110e08183611333565b5f61027a565b61113191503d805f833e6111298183611333565b8101906113d5565b5f61024c565b61114b91503d805f833e6111298183611333565b5f61021f565b90506020813d602011611183575b8161116c60209383611333565b810103126109e45761117d9061136c565b5f6101f2565b3d915061115f565b600146148015611232575b806111c5575b6101c45763634ba39d60e11b5f9081526001600160a01b03918216600452921660245250604490fd5b50604051630a6d4d4b60e21b81526001600160a01b038416600482015260208160248173a9c3d3a366466fa809d1ae982fb2c46e5fc411015afa9081156109f0575f91611213575b5061119c565b61122c915060203d602011610ad457610ac68183611333565b5f61120d565b506121054614611196565b611256915060203d602011610ad457610ac68183611333565b5f6101bd565b634e487b7160e01b5f52604160045260245ffd5b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b90602080835192838152019201905f5b8181106112b15750505090565b82518452602093840193909201916001016112a4565b60c081019081106001600160401b0382111761125c57604052565b60e081019081106001600160401b0382111761125c57604052565b606081019081106001600160401b0382111761125c57604052565b604081019081106001600160401b0382111761125c57604052565b90601f801991011681019081106001600160401b0382111761125c57604052565b908160209103126109e4575180151581036109e45790565b51906001600160a01b03821682036109e457565b81601f820112156109e4578051906001600160401b03821161125c57604051926113b4601f8401601f191660200185611333565b828452602083830101116109e457815f9260208093018386015e8301015290565b906020828203126109e45781516001600160401b0381116109e4576113fa9201611380565b90565b908160209103126109e4575160ff811681036109e45790565b6001600160401b03811161125c5760051b60200190565b51906001600160401b03821682036109e457565b9061144b82611416565b6114586040519182611333565b8281528092611469601f1991611416565b0190602036910137565b80518210156114875760209160051b010190565b634e487b7160e01b5f52603260045260245ffdfea26469706673582212204efa8a6687291ffcb94e6ab86a365eddb07e99db6c063c643b6bce86dccbc30464736f6c634300081b0033"; diff --git a/packages/blue-sdk-viem/src/queries/vault-v2/GetVaultV2.ts b/packages/blue-sdk-viem/src/queries/vault-v2/GetVaultV2.ts index 8301cd1d..b4aa5ebf 100644 --- a/packages/blue-sdk-viem/src/queries/vault-v2/GetVaultV2.ts +++ b/packages/blue-sdk-viem/src/queries/vault-v2/GetVaultV2.ts @@ -1,4 +1,12 @@ export const abi = [ + { + inputs: [ + { internalType: "address", name: "factory", type: "address" }, + { internalType: "address", name: "vault", type: "address" }, + ], + name: "UnknownOfFactory", + type: "error", + }, { inputs: [ { @@ -6,6 +14,11 @@ export const abi = [ name: "vault", type: "address", }, + { + internalType: "contract IVaultV2Factory", + name: "vaultV2Factory", + type: "address", + }, { internalType: "contract IMorphoVaultV1AdapterFactory", name: "morphoVaultV1AdapterFactory", @@ -146,4 +159,4 @@ export const abi = [ ] as const; export const code = - "0x608080604052346015576112f9908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c63c93eac5414610024575f80fd5b34610916576060366003190112610916576004356001600160a01b0381168103610916576024356001600160a01b038116810361091657604435906001600160a01b0382168203610916576102a060405260405161008181611153565b5f80825260606020808401829052604080850183905282850184905260809490945260a083905260c083905260e08390526101008390526101208390526101408390526101608390526101808290526101a08390526101c08290526101e0839052610200919091526102208290526102408290526102608290526102809190915290516338d52e0f60e01b815290816004816001600160a01b0388165afa908115610922575f916110f5575b506040516395d89b4160e01b81525f816004816001600160a01b0389165afa908115610922575f916110db575b506040516306fdde0360e01b8152905f826004816001600160a01b038a165afa918215610922575f926110b7575b5060405163313ce56760e01b8152916020836004816001600160a01b038b165afa918215610922575f92611076575b60ff9350604051946101c886611153565b60018060a01b03168552602085015260408401521660608201526080526040516338d52e0f60e01b815260208160048160018060a01b0388165afa908115610922575f9161103c575b506001600160a01b0390811660a0526040516278744560e21b8152906020908290600490829088165afa908115610922575f9161100a575b5060c05260405163ce04bebb60e01b81526020816004816001600160a01b0388165afa8015610922575f90610fc1575b6001600160801b031660e052506040516318160ddd60e01b81526020816004816001600160a01b0388165afa908115610922575f91610f8f575b50610100526040516331c6651b60e21b81526020816004816001600160a01b0388165afa908115610922575f91610f5d575b506101205260405163ece1d6e560e01b81526020816004816001600160a01b0388165afa8015610922576001600160401b03915f91610f3e575b50166101405260405163c046371160e01b81526020816004816001600160a01b0388165afa8015610922576001600160401b03915f91610f0f575b50166101605260405163ad468d1160e01b81526020816004816001600160a01b0388165afa908115610922575f91610ed5575b506001600160a01b039081166101a0526040516305c0524560e31b8152905f908290600490829088165afa908115610922575f91610e85575b506101c0526040516343bc43c160e11b81526020816004816001600160a01b0388165afa8015610922576001600160601b03915f91610e66575b50166102205260405163537bfaeb60e11b81526020816004816001600160a01b0388165afa8015610922576001600160601b03915f91610e37575b50166102405260405163ed27f7c960e01b81526020816004816001600160a01b0388165afa908115610922575f91610dfd575b506001600160a01b03908116610260526040516306d9a30160e41b8152906020908290600490829088165afa908115610922575f91610dc3575b506001600160a01b0390811661028052604051630b54457960e31b8152906020908290600490829088165afa908115610922575f91610d91575b506104ec8161125f565b6104f9604051918261116e565b818152601f196105088361125f565b01366020830137610180525f5b818110610d005750506001600160a01b03811615159081610c9c575b506001600160a01b03821615159182610c26575b50808115610c1f575b15156101e052156109d257506040805190610569818361116e565b60018252601f19015f5b81811061098f5750506101806080015261060460018060a01b03610120608001511660405160208101916040835260046060830152637468697360e01b60808301526040820152608081526105c960a08261116e565b519020604051906105d982611153565b81525f60208201525f60408201525f606082015261018060800151906105fe82611276565b52611276565b505b61020051515f5b81811061081b576040516020815280608051610220602083015260018060a01b03815116610240830152606061066f610657602084015160806102608701526102c086019061112f565b604084015185820361023f190161028087015261112f565b9101516102a083015260018060a01b0360206080015116604083015260406080015160608301526001600160801b03606060800151166080830152608080015160a083015260a06080015160c08301526001600160401b0360c0608001511660e08301526001600160401b0360e060800151166101008301526101006080015190601f1983820301610120840152602080835192838152019201905f5b8181106107f95750506101a0516001600160a01b0316610140840152506101c051828203601f1901610160840152610744919061112f565b6101e051151561018083015261020051828203601f19016101a08401528051808352602092830192909101905f5b8181106107bf57505061022080516001600160601b039081166101c086015261024051166101e0850152610260516001600160a01b03908116610200860152610280511690840152500390f35b9193509160206080600192606087518051835284810151858401526040810151604084015201516060820152019401910191849392610772565b82516001600160a01b031684528594506020938401939092019160010161070c565b61082b8161018060800151611297565b518051604051632f0374dd60e21b815260048101919091529091906020816024816001600160a01b0389165afa908115610922575f9161095e575b50602083015281516040519063a68bafa360e01b8252600482015260208160248160018060a01b0389165afa908115610922575f9161092d575b5060408301528151916040519263c69507dd60e01b8452600484015260208360248160018060a01b0389165afa928315610922575f936108ea575b5091606060019301520161060d565b92506020833d821161091a575b816109046020938361116e565b810103126109165791519160606108db565b5f80fd5b3d91506108f7565b6040513d5f823e3d90fd5b90506020813d8211610956575b816109476020938361116e565b8101031261091657515f6108a0565b3d915061093a565b90506020813d8211610987575b816109786020938361116e565b8101031261091657515f610866565b3d915061096b565b60209060405161099e81611153565b5f81525f838201525f60408201525f606082015282828601015201610573565b634e487b7160e01b5f52604160045260245ffd5b1561060657610140608001519060a082805181010312610916576040519160a08301908382106001600160401b038311176109be5760a091604052610a196020820161118f565b8452610a276040820161118f565b6020850152610a386060820161118f565b6040850152610a496080820161118f565b60608501908152910151608084019081526101a0516040805163cc3802bf60e01b815286516001600160a01b039081166004830152602088015181166024830152919096015181166044870152925183166064860152905160848501525f91849160a4918391165afa918215610922575f92610b8d575b508151610acc8161125f565b90610ada604051928361116e565b808252610ae9601f199161125f565b015f5b818110610b5e575050610200525f5b8251811015610b565780610b4f81610b1560019487611297565b5160405190610b2382611153565b81525f60208201525f60408201525f60608201526101806080015190610b498383611297565b52611297565b5001610afb565b509050610606565b602090604051610b6d81611153565b5f81525f838201525f60408201525f606082015282828601015201610aec565b9091503d805f833e610b9f818361116e565b810190602081830312610916578051906001600160401b03821161091657019080601f83011215610916578151610bd58161125f565b92610be3604051948561116e565b81845260208085019260051b82010192831161091657602001905b828210610c0f57505050905f610ac0565b8151815260209182019101610bfe565b508161054e565b6101a0516040516335abafe560e21b81526001600160a01b03918216600482015292935060209183916024918391165afa908115610922575f91610c6d575b50905f610545565b610c8f915060203d602011610c95575b610c87818361116e565b8101906112ab565b5f610c65565b503d610c7d565b6101a051604051632c77566560e01b81526001600160a01b039182166004820152925060209183916024918391165afa908115610922575f91610ce1575b505f610531565b610cfa915060203d602011610c9557610c87818361116e565b5f610cda565b6040516313bd406b60e21b815260048101829052906020826024816001600160a01b038a165afa8015610922575f90610d58575b60019250610d488261010060800151611297565b90838060a01b0316905201610515565b506020823d8211610d89575b81610d716020938361116e565b8101031261091657610d8460019261118f565b610d34565b3d9150610d64565b90506020813d602011610dbb575b81610dac6020938361116e565b8101031261091657515f6104e2565b3d9150610d9f565b90506020813d602011610df5575b81610dde6020938361116e565b8101031261091657610def9061118f565b5f6104a8565b3d9150610dd1565b90506020813d602011610e2f575b81610e186020938361116e565b8101031261091657610e299061118f565b5f61046e565b3d9150610e0b565b610e59915060203d602011610e5f575b610e51818361116e565b810190611240565b5f61043b565b503d610e47565b610e7f915060203d602011610e5f57610e51818361116e565b5f610400565b90503d805f833e610e96818361116e565b810190602081830312610916578051906001600160401b03821161091657019080601f83011215610916578151610ecf926020016111a3565b5f6103c6565b90506020813d602011610f07575b81610ef06020938361116e565b8101031261091657610f019061118f565b5f61038d565b3d9150610ee3565b610f31915060203d602011610f37575b610f29818361116e565b810190611221565b5f61035a565b503d610f1f565b610f57915060203d602011610f3757610f29818361116e565b5f61031f565b90506020813d602011610f87575b81610f786020938361116e565b8101031261091657515f6102e5565b3d9150610f6b565b90506020813d602011610fb9575b81610faa6020938361116e565b8101031261091657515f6102b3565b3d9150610f9d565b506020813d602011611002575b81610fdb6020938361116e565b8101031261091657516001600160801b0381168103610916576001600160801b0390610279565b3d9150610fce565b90506020813d602011611034575b816110256020938361116e565b8101031261091657515f610249565b3d9150611018565b90506020813d60201161106e575b816110576020938361116e565b81010312610916576110689061118f565b5f610211565b3d915061104a565b9150916020813d6020116110af575b816110926020938361116e565b8101031261091657519160ff831683036109165760ff92916101b7565b3d9150611085565b6110d49192503d805f833e6110cc818361116e565b8101906111e8565b905f610188565b6110ef91503d805f833e6110cc818361116e565b5f61015a565b90506020813d602011611127575b816111106020938361116e565b81010312610916576111219061118f565b5f61012d565b3d9150611103565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b608081019081106001600160401b038211176109be57604052565b90601f801991011681019081106001600160401b038211176109be57604052565b51906001600160a01b038216820361091657565b9291926001600160401b0382116109be57604051916111cc601f8201601f19166020018461116e565b829481845281830111610916578281602093845f96015e010152565b602081830312610916578051906001600160401b03821161091657019080601f8301121561091657815161121e926020016111a3565b90565b9081602091031261091657516001600160401b03811681036109165790565b9081602091031261091657516001600160601b03811681036109165790565b6001600160401b0381116109be5760051b60200190565b8051156112835760200190565b634e487b7160e01b5f52603260045260245ffd5b80518210156112835760209160051b010190565b9081602091031261091657518015158103610916579056fea2646970667358221220525e56d1f57edb0b5325fbdc31d705ddbff0a28f81e31793b968e6c3cdd3cbb264736f6c634300081b0033"; + "0x60808060405234601557611391908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c63f12c3a9214610024575f80fd5b3461096a57608036600319011261096a576004356001600160a01b038116810361096a576024356001600160a01b038116810361096a576044356001600160a01b038116810361096a57606435916001600160a01b038316830361096a576102a0604052604051610094816111eb565b5f80825260606020808401829052604080850183905282850184905260809490945260a083905260c083905260e08390526101008390526101208390526101408390526101608390526101808290526101a08390526101c08290526101e083905261020091909152610220829052610240829052610260829052610280919091529051635edec50d60e01b81526001600160a01b0386811660048301529091908290602490829086165afa908115610976575f916111a8575b501561118357506040516338d52e0f60e01b81526020816004816001600160a01b0388165afa908115610976575f91611149575b506040516395d89b4160e01b81525f816004816001600160a01b0389165afa908115610976575f9161112f575b506040516306fdde0360e01b8152905f826004816001600160a01b038a165afa918215610976575f9261110b575b5060405163313ce56760e01b8152916020836004816001600160a01b038b165afa918215610976575f926110ca575b60ff93506040519461021c866111eb565b60018060a01b03168552602085015260408401521660608201526080526040516338d52e0f60e01b815260208160048160018060a01b0388165afa908115610976575f91611090575b506001600160a01b0390811660a0526040516278744560e21b8152906020908290600490829088165afa908115610976575f9161105e575b5060c05260405163ce04bebb60e01b81526020816004816001600160a01b0388165afa8015610976575f90611015575b6001600160801b031660e052506040516318160ddd60e01b81526020816004816001600160a01b0388165afa908115610976575f91610fe3575b50610100526040516331c6651b60e21b81526020816004816001600160a01b0388165afa908115610976575f91610fb1575b506101205260405163ece1d6e560e01b81526020816004816001600160a01b0388165afa8015610976576001600160401b03915f91610f92575b50166101405260405163c046371160e01b81526020816004816001600160a01b0388165afa8015610976576001600160401b03915f91610f63575b50166101605260405163ad468d1160e01b81526020816004816001600160a01b0388165afa908115610976575f91610f29575b506001600160a01b039081166101a0526040516305c0524560e31b8152905f908290600490829088165afa908115610976575f91610ed9575b506101c0526040516343bc43c160e11b81526020816004816001600160a01b0388165afa8015610976576001600160601b03915f91610eba575b50166102205260405163537bfaeb60e11b81526020816004816001600160a01b0388165afa8015610976576001600160601b03915f91610e8b575b50166102405260405163ed27f7c960e01b81526020816004816001600160a01b0388165afa908115610976575f91610e51575b506001600160a01b03908116610260526040516306d9a30160e41b8152906020908290600490829088165afa908115610976575f91610e17575b506001600160a01b0390811661028052604051630b54457960e31b8152906020908290600490829088165afa908115610976575f91610de5575b506105408161130f565b61054d6040519182611206565b818152601f1961055c8361130f565b01366020830137610180525f5b818110610d545750506001600160a01b03811615159081610cf0575b506001600160a01b03821615159182610c7a575b50808115610c73575b15156101e05215610a26575060408051906105bd8183611206565b60018252601f19015f5b8181106109e35750506101806080015261065860018060a01b03610120608001511660405160208101916040835260046060830152637468697360e01b608083015260408201526080815261061d60a082611206565b5190206040519061062d826111eb565b81525f60208201525f60408201525f6060820152610180608001519061065282611326565b52611326565b505b61020051515f5b81811061086f576040516020815280608051610220602083015260018060a01b0381511661024083015260606106c36106ab602084015160806102608701526102c08601906111c7565b604084015185820361023f19016102808701526111c7565b9101516102a083015260018060a01b0360206080015116604083015260406080015160608301526001600160801b03606060800151166080830152608080015160a083015260a06080015160c08301526001600160401b0360c0608001511660e08301526001600160401b0360e060800151166101008301526101006080015190601f1983820301610120840152602080835192838152019201905f5b81811061084d5750506101a0516001600160a01b0316610140840152506101c051828203601f190161016084015261079891906111c7565b6101e051151561018083015261020051828203601f19016101a08401528051808352602092830192909101905f5b81811061081357505061022080516001600160601b039081166101c086015261024051166101e0850152610260516001600160a01b03908116610200860152610280511690840152500390f35b91935091602060806001926060875180518352848101518584015260408101516040840152015160608201520194019101918493926107c6565b82516001600160a01b0316845285945060209384019390920191600101610760565b61087f8161018060800151611347565b518051604051632f0374dd60e21b815260048101919091529091906020816024816001600160a01b0389165afa908115610976575f916109b2575b50602083015281516040519063a68bafa360e01b8252600482015260208160248160018060a01b0389165afa908115610976575f91610981575b5060408301528151916040519263c69507dd60e01b8452600484015260208360248160018060a01b0389165afa928315610976575f9361093e575b50916060600193015201610661565b92506020833d821161096e575b8161095860209383611206565b8101031261096a57915191606061092f565b5f80fd5b3d915061094b565b6040513d5f823e3d90fd5b90506020813d82116109aa575b8161099b60209383611206565b8101031261096a57515f6108f4565b3d915061098e565b90506020813d82116109db575b816109cc60209383611206565b8101031261096a57515f6108ba565b3d91506109bf565b6020906040516109f2816111eb565b5f81525f838201525f60408201525f6060820152828286010152016105c7565b634e487b7160e01b5f52604160045260245ffd5b1561065a57610140608001519060a08280518101031261096a576040519160a08301908382106001600160401b03831117610a125760a091604052610a6d6020820161123f565b8452610a7b6040820161123f565b6020850152610a8c6060820161123f565b6040850152610a9d6080820161123f565b60608501908152910151608084019081526101a0516040805163cc3802bf60e01b815286516001600160a01b039081166004830152602088015181166024830152919096015181166044870152925183166064860152905160848501525f91849160a4918391165afa918215610976575f92610be1575b508151610b208161130f565b90610b2e6040519283611206565b808252610b3d601f199161130f565b015f5b818110610bb2575050610200525f5b8251811015610baa5780610ba381610b6960019487611347565b5160405190610b77826111eb565b81525f60208201525f60408201525f60608201526101806080015190610b9d8383611347565b52611347565b5001610b4f565b50905061065a565b602090604051610bc1816111eb565b5f81525f838201525f60408201525f606082015282828601015201610b40565b9091503d805f833e610bf38183611206565b81019060208183031261096a578051906001600160401b03821161096a57019080601f8301121561096a578151610c298161130f565b92610c376040519485611206565b81845260208085019260051b82010192831161096a57602001905b828210610c6357505050905f610b14565b8151815260209182019101610c52565b50816105a2565b6101a0516040516335abafe560e21b81526001600160a01b03918216600482015292935060209183916024918391165afa908115610976575f91610cc1575b50905f610599565b610ce3915060203d602011610ce9575b610cdb8183611206565b810190611227565b5f610cb9565b503d610cd1565b6101a051604051632c77566560e01b81526001600160a01b039182166004820152925060209183916024918391165afa908115610976575f91610d35575b505f610585565b610d4e915060203d602011610ce957610cdb8183611206565b5f610d2e565b6040516313bd406b60e21b815260048101829052906020826024816001600160a01b038a165afa8015610976575f90610dac575b60019250610d9c8261010060800151611347565b90838060a01b0316905201610569565b506020823d8211610ddd575b81610dc560209383611206565b8101031261096a57610dd860019261123f565b610d88565b3d9150610db8565b90506020813d602011610e0f575b81610e0060209383611206565b8101031261096a57515f610536565b3d9150610df3565b90506020813d602011610e49575b81610e3260209383611206565b8101031261096a57610e439061123f565b5f6104fc565b3d9150610e25565b90506020813d602011610e83575b81610e6c60209383611206565b8101031261096a57610e7d9061123f565b5f6104c2565b3d9150610e5f565b610ead915060203d602011610eb3575b610ea58183611206565b8101906112f0565b5f61048f565b503d610e9b565b610ed3915060203d602011610eb357610ea58183611206565b5f610454565b90503d805f833e610eea8183611206565b81019060208183031261096a578051906001600160401b03821161096a57019080601f8301121561096a578151610f2392602001611253565b5f61041a565b90506020813d602011610f5b575b81610f4460209383611206565b8101031261096a57610f559061123f565b5f6103e1565b3d9150610f37565b610f85915060203d602011610f8b575b610f7d8183611206565b8101906112d1565b5f6103ae565b503d610f73565b610fab915060203d602011610f8b57610f7d8183611206565b5f610373565b90506020813d602011610fdb575b81610fcc60209383611206565b8101031261096a57515f610339565b3d9150610fbf565b90506020813d60201161100d575b81610ffe60209383611206565b8101031261096a57515f610307565b3d9150610ff1565b506020813d602011611056575b8161102f60209383611206565b8101031261096a57516001600160801b038116810361096a576001600160801b03906102cd565b3d9150611022565b90506020813d602011611088575b8161107960209383611206565b8101031261096a57515f61029d565b3d915061106c565b90506020813d6020116110c2575b816110ab60209383611206565b8101031261096a576110bc9061123f565b5f610265565b3d915061109e565b9150916020813d602011611103575b816110e660209383611206565b8101031261096a57519160ff8316830361096a5760ff929161020b565b3d91506110d9565b6111289192503d805f833e6111208183611206565b810190611298565b905f6101dc565b61114391503d805f833e6111208183611206565b5f6101ae565b90506020813d60201161117b575b8161116460209383611206565b8101031261096a576111759061123f565b5f610181565b3d9150611157565b63634ba39d60e11b5f9081526001600160a01b03918216600452908416602452604490fd5b6111c1915060203d602011610ce957610cdb8183611206565b5f61014d565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b608081019081106001600160401b03821117610a1257604052565b90601f801991011681019081106001600160401b03821117610a1257604052565b9081602091031261096a5751801515810361096a5790565b51906001600160a01b038216820361096a57565b9291926001600160401b038211610a12576040519161127c601f8201601f191660200184611206565b82948184528183011161096a578281602093845f96015e010152565b60208183031261096a578051906001600160401b03821161096a57019080601f8301121561096a5781516112ce92602001611253565b90565b9081602091031261096a57516001600160401b038116810361096a5790565b9081602091031261096a57516001600160601b038116810361096a5790565b6001600160401b038111610a125760051b60200190565b8051156113335760200190565b634e487b7160e01b5f52603260045260245ffd5b80518210156113335760209160051b01019056fea2646970667358221220c936db6a138e2c880c486cfea60ac3b01ae450191c8bc3d0cb20a4a62416e98f64736f6c634300081b0033"; diff --git a/packages/blue-sdk-viem/src/queries/vault-v2/GetVaultV2MorphoMarketV1Adapter.ts b/packages/blue-sdk-viem/src/queries/vault-v2/GetVaultV2MorphoMarketV1Adapter.ts index d74c3576..f8fb5c9b 100644 --- a/packages/blue-sdk-viem/src/queries/vault-v2/GetVaultV2MorphoMarketV1Adapter.ts +++ b/packages/blue-sdk-viem/src/queries/vault-v2/GetVaultV2MorphoMarketV1Adapter.ts @@ -1,4 +1,12 @@ export const abi = [ + { + inputs: [ + { internalType: "address", name: "factory", type: "address" }, + { internalType: "address", name: "adapter", type: "address" }, + ], + name: "UnknownOfFactory", + type: "error", + }, { inputs: [ { @@ -6,6 +14,11 @@ export const abi = [ name: "adapter", type: "address", }, + { + internalType: "contract IMorphoMarketV1AdapterFactory", + name: "factory", + type: "address", + }, ], name: "query", outputs: [ @@ -61,4 +74,4 @@ export const abi = [ ] as const; export const code = - "0x608080604052346015576104a2908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c63d4fc9fc614610025575f80fd5b346102ca5760203660031901126102ca576004356001600160a01b03811691908290036102ca576060810181811067ffffffffffffffff8211176103c6576040525f815260208101915f83526040820190606082526040516307f1b29b60e11b8152602081600481855afa9081156102d6575f9161038c575b506001600160a01b0316835260405163388af5b560e01b8152602081600481855afa9081156102d6575f91610352575b506001600160a01b0316845260405163b045ff5b60e01b815290602082600481845afa9182156102d6575f9261031e575b5061010d829594939561042c565b61011a60405191826103f6565b828152601f196101298461042c565b015f5b8181106102e157505085525f5b8281106101ef57505060408051602080825293516001600160a01b03908116858301529451909416908401525091516060808301528051608083018190529192839260a0840192909101905f5b818110610194575050500390f35b825180516001600160a01b039081168652602082810151821681880152604080840151831690880152606080840151909216918701919091526080918201519186019190915286955060a09094019390920191600101610186565b604051631f1a892160e11b815260048101829052949593949060a082602481865afa9182156102d6575f92610245575b5061023a816001938751906102348383610444565b52610444565b500194939294610139565b915060a0823d82116102ce575b8161025f60a093836103f6565b810103126102ca5761023a8160019360806040519161027d836103da565b61028681610418565b835261029460208201610418565b60208401526102a560408201610418565b60408401526102b660608201610418565b60608401520151608082015293505061021f565b5f80fd5b3d9150610252565b6040513d5f823e3d90fd5b602090604098969798516102f4816103da565b5f81525f838201525f60408201525f60608201525f6080820152828286010152019695949661012c565b9091506020813d60201161034a575b8161033a602093836103f6565b810103126102ca5751905f6100ff565b3d915061032d565b90506020813d602011610384575b8161036d602093836103f6565b810103126102ca5761037e90610418565b5f6100ce565b3d9150610360565b90506020813d6020116103be575b816103a7602093836103f6565b810103126102ca576103b890610418565b5f61009e565b3d915061039a565b634e487b7160e01b5f52604160045260245ffd5b60a0810190811067ffffffffffffffff8211176103c657604052565b90601f8019910116810190811067ffffffffffffffff8211176103c657604052565b51906001600160a01b03821682036102ca57565b67ffffffffffffffff81116103c65760051b60200190565b80518210156104585760209160051b010190565b634e487b7160e01b5f52603260045260245ffdfea26469706673582212207bc9b43d52db27e875ce34abdf262ca8c42d6dbd8e2ed76189f5a1d102c7c72b64736f6c634300081b0033"; + "0x60808060405234601557610538908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c63f6f030ce14610025575f80fd5b34610310576040366003190112610310576004356001600160a01b0381169190829003610310576024356001600160a01b03811690819003610310576060820182811067ffffffffffffffff82111761045c576040525f825260208201925f845260408301916060835260405163230dbab560e01b8152826004820152602081602481855afa90811561031c575f91610421575b501561040c57506040516307f1b29b60e11b8152602081600481855afa90811561031c575f916103d2575b506001600160a01b0316835260405163388af5b560e01b8152602081600481855afa90811561031c575f91610398575b506001600160a01b0316845260405163b045ff5b60e01b815290602082600481845afa91821561031c575f92610364575b5061015382959493956104c2565b610160604051918261048c565b828152601f1961016f846104c2565b015f5b81811061032757505085525f5b82811061023557505060408051602080825293516001600160a01b03908116858301529451909416908401525091516060808301528051608083018190529192839260a0840192909101905f5b8181106101da575050500390f35b825180516001600160a01b039081168652602082810151821681880152604080840151831690880152606080840151909216918701919091526080918201519186019190915286955060a090940193909201916001016101cc565b604051631f1a892160e11b815260048101829052949593949060a082602481865afa91821561031c575f9261028b575b506102808160019387519061027a83836104da565b526104da565b50019493929461017f565b915060a0823d8211610314575b816102a560a0938361048c565b8101031261031057610280816001936080604051916102c383610470565b6102cc816104ae565b83526102da602082016104ae565b60208401526102eb604082016104ae565b60408401526102fc606082016104ae565b606084015201516080820152935050610265565b5f80fd5b3d9150610298565b6040513d5f823e3d90fd5b6020906040989697985161033a81610470565b5f81525f838201525f60408201525f60608201525f60808201528282860101520196959496610172565b9091506020813d602011610390575b816103806020938361048c565b810103126103105751905f610145565b3d9150610373565b90506020813d6020116103ca575b816103b36020938361048c565b81010312610310576103c4906104ae565b5f610114565b3d91506103a6565b90506020813d602011610404575b816103ed6020938361048c565b81010312610310576103fe906104ae565b5f6100e4565b3d91506103e0565b63634ba39d60e11b5f5260045260245260445ffd5b90506020813d602011610454575b8161043c6020938361048c565b8101031261031057518015158103610310575f6100b9565b3d915061042f565b634e487b7160e01b5f52604160045260245ffd5b60a0810190811067ffffffffffffffff82111761045c57604052565b90601f8019910116810190811067ffffffffffffffff82111761045c57604052565b51906001600160a01b038216820361031057565b67ffffffffffffffff811161045c5760051b60200190565b80518210156104ee5760209160051b010190565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220dfb21c34432d601f765bfd2882d5cb1ad3536aa834246292ce550ba864b28ea664736f6c634300081b0033"; diff --git a/packages/blue-sdk-viem/src/queries/vault-v2/GetVaultV2MorphoMarketV1AdapterV2.ts b/packages/blue-sdk-viem/src/queries/vault-v2/GetVaultV2MorphoMarketV1AdapterV2.ts index 0e72beb5..381ee175 100644 --- a/packages/blue-sdk-viem/src/queries/vault-v2/GetVaultV2MorphoMarketV1AdapterV2.ts +++ b/packages/blue-sdk-viem/src/queries/vault-v2/GetVaultV2MorphoMarketV1AdapterV2.ts @@ -1,4 +1,12 @@ export const abi = [ + { + inputs: [ + { internalType: "address", name: "factory", type: "address" }, + { internalType: "address", name: "adapter", type: "address" }, + ], + name: "UnknownOfFactory", + type: "error", + }, { inputs: [ { @@ -6,6 +14,11 @@ export const abi = [ name: "adapter", type: "address", }, + { + internalType: "contract IMorphoMarketV1AdapterV2Factory", + name: "factory", + type: "address", + }, ], name: "query", outputs: [ @@ -55,4 +68,4 @@ export const abi = [ ] as const; export const code = - "0x608080604052346015576104bb908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c63d4fc9fc614610025575f80fd5b346102be5760203660031901126102be576004356001600160a01b03811691908290036102be576080810181811067ffffffffffffffff8211176103d4576040525f815260208101915f8352604082015f81526060830191606083526040516307f1b29b60e11b8152602081600481855afa9081156102ca575f916103b5575b506001600160a01b0316845260405163388af5b560e01b8152602081600481855afa9081156102ca575f91610396575b506001600160a01b03168552604051630399e3a560e41b8152602081600481855afa9081156102ca575f91610367575b506001600160a01b0316825260405163ace48b4560e01b8152602081600481855afa9081156102ca575f91610335575b50610144819695949396610445565b6101516040519182610404565b818152601f1961016083610445565b015f5b81811061030857505083525f5b8181106101fa57505060408051602080825294516001600160a01b039081168683015295518616918101919091529451909316606085015251608080850152805160a0850181905284935060c084019291909101905f5b8181106101d5575050500390f35b82518051855260209081015181860152869550604090940193909201916001016101c7565b60409693949596519063779a968360e01b8252806004830152602082602481875afa9182156102ca575f926102d5575b50604051630dd5aa9b60e31b81526004810183905291602083602481885afa9283156102ca575f93610293575b5081610287916001946040519161026d836103e8565b82526020820152885190610281838361045d565b5261045d565b50019594939295610170565b92506020833d82116102c2575b816102ad60209383610404565b810103126102be5791519181610257565b5f80fd5b3d91506102a0565b6040513d5f823e3d90fd5b9091506020813d8211610300575b816102f060209383610404565b810103126102be5751905f61022a565b3d91506102e3565b602090604099969798995161031c816103e8565b5f81525f83820152828286010152019796959497610163565b90506020813d60201161035f575b8161035060209383610404565b810103126102be57515f610135565b3d9150610343565b610389915060203d60201161038f575b6103818183610404565b810190610426565b5f610105565b503d610377565b6103af915060203d60201161038f576103818183610404565b5f6100d5565b6103ce915060203d60201161038f576103818183610404565b5f6100a5565b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff8211176103d457604052565b90601f8019910116810190811067ffffffffffffffff8211176103d457604052565b908160209103126102be57516001600160a01b03811681036102be5790565b67ffffffffffffffff81116103d45760051b60200190565b80518210156104715760209160051b010190565b634e487b7160e01b5f52603260045260245ffdfea26469706673582212201631f5626073bb74cf2ff59c21445d1e923ad78225ae358bbea9739c8f886f0464736f6c634300081b0033"; + "0x60808060405234601557610552908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c63f6f030ce14610025575f80fd5b34610305576040366003190112610305576004356001600160a01b0381169190829003610305576024356001600160a01b03811690819003610305576080820182811067ffffffffffffffff82111761046b576040525f825260208201925f845260408301905f82526060840192606084526040516335abafe560e21b8152826004820152602081602481855afa908115610311575f91610430575b501561041b57506040516307f1b29b60e11b8152602081600481855afa908115610311575f916103fc575b506001600160a01b0316845260405163388af5b560e01b8152602081600481855afa908115610311575f916103dd575b506001600160a01b03168552604051630399e3a560e41b8152602081600481855afa908115610311575f916103ae575b506001600160a01b0316825260405163ace48b4560e01b8152602081600481855afa908115610311575f9161037c575b5061018b8196959493966104dc565b610198604051918261049b565b818152601f196101a7836104dc565b015f5b81811061034f57505083525f5b81811061024157505060408051602080825294516001600160a01b039081168683015295518616918101919091529451909316606085015251608080850152805160a0850181905284935060c084019291909101905f5b81811061021c575050500390f35b825180518552602090810151818601528695506040909401939092019160010161020e565b60409693949596519063779a968360e01b8252806004830152602082602481875afa918215610311575f9261031c575b50604051630dd5aa9b60e31b81526004810183905291602083602481885afa928315610311575f936102da575b50816102ce91600194604051916102b48361047f565b825260208201528851906102c883836104f4565b526104f4565b500195949392956101b7565b92506020833d8211610309575b816102f46020938361049b565b81010312610305579151918161029e565b5f80fd5b3d91506102e7565b6040513d5f823e3d90fd5b9091506020813d8211610347575b816103376020938361049b565b810103126103055751905f610271565b3d915061032a565b60209060409996979899516103638161047f565b5f81525f838201528282860101520197969594976101aa565b90506020813d6020116103a6575b816103976020938361049b565b8101031261030557515f61017c565b3d915061038a565b6103d0915060203d6020116103d6575b6103c8818361049b565b8101906104bd565b5f61014c565b503d6103be565b6103f6915060203d6020116103d6576103c8818361049b565b5f61011c565b610415915060203d6020116103d6576103c8818361049b565b5f6100ec565b63634ba39d60e11b5f5260045260245260445ffd5b90506020813d602011610463575b8161044b6020938361049b565b8101031261030557518015158103610305575f6100c1565b3d915061043e565b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761046b57604052565b90601f8019910116810190811067ffffffffffffffff82111761046b57604052565b9081602091031261030557516001600160a01b03811681036103055790565b67ffffffffffffffff811161046b5760051b60200190565b80518210156105085760209160051b010190565b634e487b7160e01b5f52603260045260245ffdfea26469706673582212202b6841f6278647fbce4a7e04c1e286d66d533ceaccf4cbe6aa91bf714e1623cc64736f6c634300081b0033"; diff --git a/packages/blue-sdk-viem/src/queries/vault-v2/GetVaultV2MorphoVaultV1Adapter.ts b/packages/blue-sdk-viem/src/queries/vault-v2/GetVaultV2MorphoVaultV1Adapter.ts index 7d0ee983..b6f77890 100644 --- a/packages/blue-sdk-viem/src/queries/vault-v2/GetVaultV2MorphoVaultV1Adapter.ts +++ b/packages/blue-sdk-viem/src/queries/vault-v2/GetVaultV2MorphoVaultV1Adapter.ts @@ -1,4 +1,12 @@ export const abi = [ + { + inputs: [ + { internalType: "address", name: "factory", type: "address" }, + { internalType: "address", name: "adapter", type: "address" }, + ], + name: "UnknownOfFactory", + type: "error", + }, { inputs: [ { @@ -6,6 +14,11 @@ export const abi = [ name: "adapter", type: "address", }, + { + internalType: "contract IMorphoVaultV1AdapterFactory", + name: "factory", + type: "address", + }, ], name: "query", outputs: [ @@ -38,4 +51,4 @@ export const abi = [ ] as const; export const code = - "0x60808060405234601557610233908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c63d4fc9fc614610025575f80fd5b346101b85760203660031901126101b8576004356001600160a01b03811691908290036101b8576060810181811067ffffffffffffffff8211176101a4576040525f8152602081015f815260408201905f825260405163e4baaddf60e01b8152602081600481885afa90811561015d575f91610185575b506001600160a01b031683526040516307f1b29b60e11b8152602081600481885afa94851561015d576004956020925f91610168575b506001600160a01b0316835260405163388af5b560e01b815295869182905afa801561015d576060945f9161012e575b506001600160a01b03908116835260408051945182168552915181166020850152915190911690820152f35b610150915060203d602011610156575b61014881836101bc565b8101906101de565b5f610102565b503d61013e565b6040513d5f823e3d90fd5b61017f9150833d85116101565761014881836101bc565b5f6100d2565b61019e915060203d6020116101565761014881836101bc565b5f61009c565b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b90601f8019910116810190811067ffffffffffffffff8211176101a457604052565b908160209103126101b857516001600160a01b03811681036101b8579056fea2646970667358221220fd9fcbe191f71c6b2674137c890f7c627af7976d50ddcbbf29aceffa240e67ec64736f6c634300081b0033"; + "0x608080604052346015576102cb908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c63f6f030ce14610025575f80fd5b34610234576040366003190112610234576004356001600160a01b0381169190829003610234576024356001600160a01b03811690819003610234576060820182811067ffffffffffffffff821117610240576040525f8252602082015f815260408301915f8352604051632c77566560e01b8152856004820152602081602481855afa9081156101a3575f91610201575b50156101ea575060405163e4baaddf60e01b8152602081600481885afa9081156101a3575f916101cb575b506001600160a01b031683526040516307f1b29b60e11b8152602081600481885afa9485156101a3576004956020925f916101ae575b506001600160a01b0316835260405163388af5b560e01b815295869182905afa80156101a3576060945f91610174575b506001600160a01b03908116835260408051945182168552915181166020850152915190911690820152f35b610196915060203d60201161019c575b61018e8183610254565b810190610276565b5f610148565b503d610184565b6040513d5f823e3d90fd5b6101c59150833d851161019c5761018e8183610254565b5f610118565b6101e4915060203d60201161019c5761018e8183610254565b5f6100e2565b849063634ba39d60e11b5f5260045260245260445ffd5b90506020813d602011610238575b8161021c60209383610254565b8101031261023457518015158103610234575f6100b7565b5f80fd5b3d915061020f565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff82111761024057604052565b9081602091031261023457516001600160a01b0381168103610234579056fea264697066735822122085a2452553e2f4801b563c99b5b576d6f292803c08eb7cf6a8f6d9f4b42facd664736f6c634300081b0033"; diff --git a/packages/blue-sdk/src/errors.ts b/packages/blue-sdk/src/errors.ts index 0fd5baab..cffbc934 100644 --- a/packages/blue-sdk/src/errors.ts +++ b/packages/blue-sdk/src/errors.ts @@ -141,6 +141,21 @@ export namespace VaultV2Errors { } } +export class UnknownFactory extends Error { + constructor() { + super(`unknown factory`); + } +} + +export class UnknownOfFactory extends Error { + constructor( + public readonly factory: Address, + public readonly address: Address, + ) { + super(`address "${address}" is not from the ${factory} factory`); + } +} + export interface ErrorClass { // biome-ignore lint/suspicious/noExplicitAny: match any type of arg new (...args: any[]): E;