From 51d42e4ca4b83571826f9830e7454138c05abd10 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Fri, 10 Jan 2025 17:12:04 +0100 Subject: [PATCH] feat(metamorpho): add v1.1 lostAssets --- packages/blue-sdk-ethers/package.json | 4 +- packages/blue-sdk-ethers/src/fetch/Vault.ts | 11 +- .../blue-sdk-ethers/test/e2e/Vault.test.ts | 54 ++++++++- packages/blue-sdk-ethers/test/e2e/setup.ts | 5 + packages/blue-sdk-viem/src/abis.ts | 13 ++ packages/blue-sdk-viem/src/fetch/Vault.ts | 8 ++ packages/blue-sdk-viem/test/Vault.test.ts | 54 ++++++++- packages/blue-sdk-viem/test/setup.ts | 5 + packages/blue-sdk/src/position/Position.ts | 50 +++++--- packages/blue-sdk/src/vault/Vault.ts | 18 +++ packages/blue-sdk/src/vault/VaultConfig.ts | 3 + packages/morpho-test/src/fixtures/vaults.ts | 112 ++++++++---------- pnpm-lock.yaml | 37 ++++-- 13 files changed, 278 insertions(+), 96 deletions(-) diff --git a/packages/blue-sdk-ethers/package.json b/packages/blue-sdk-ethers/package.json index b19bc84c..49fb5180 100644 --- a/packages/blue-sdk-ethers/package.json +++ b/packages/blue-sdk-ethers/package.json @@ -17,7 +17,7 @@ "@morpho-org/blue-sdk": "workspace:^", "@morpho-org/morpho-ts": "workspace:^", "ethers": "^6.0.0", - "ethers-types": "^3.17.0" + "ethers-types": "^3.18.1" }, "devDependencies": { "@morpho-org/blue-sdk": "workspace:^", @@ -25,7 +25,7 @@ "@morpho-org/morpho-ts": "workspace:^", "@morpho-org/test": "workspace:^", "ethers": "^6.13.4", - "ethers-types": "^3.17.3", + "ethers-types": "^3.18.1", "typescript": "^5.7.2", "viem": "^2.22.2", "vitest": "^2.1.8" diff --git a/packages/blue-sdk-ethers/src/fetch/Vault.ts b/packages/blue-sdk-ethers/src/fetch/Vault.ts index 0c1c7f15..ebc69220 100644 --- a/packages/blue-sdk-ethers/src/fetch/Vault.ts +++ b/packages/blue-sdk-ethers/src/fetch/Vault.ts @@ -1,5 +1,9 @@ import { type Provider, resolveProperties } from "ethers"; -import { MetaMorpho__factory, PublicAllocator__factory } from "ethers-types"; +import { + MetaMorphoV1_1__factory, + MetaMorpho__factory, + PublicAllocator__factory, +} from "ethers-types"; import { AccrualVault, @@ -43,6 +47,7 @@ export async function fetchVault( totalSupply, totalAssets, lastTotalAssets, + lostAssets, supplyQueueSize, withdrawQueueSize, hasPublicAllocator, @@ -65,6 +70,9 @@ export async function fetchVault( mm.totalSupply(overrides), mm.totalAssets(overrides), mm.lastTotalAssets(overrides), + MetaMorphoV1_1__factory.connect(address, runner) + .lostAssets(overrides) + .catch(() => undefined), mm.supplyQueueLength(overrides).then((r) => Number(r)), mm.withdrawQueueLength(overrides).then((r) => Number(r)), chainAddresses.publicAllocator && @@ -122,6 +130,7 @@ export async function fetchVault( totalSupply, totalAssets, lastTotalAssets, + lostAssets, }); } diff --git a/packages/blue-sdk-ethers/test/e2e/Vault.test.ts b/packages/blue-sdk-ethers/test/e2e/Vault.test.ts index 38ac06d3..62101024 100644 --- a/packages/blue-sdk-ethers/test/e2e/Vault.test.ts +++ b/packages/blue-sdk-ethers/test/e2e/Vault.test.ts @@ -1,5 +1,5 @@ import { describe, expect } from "vitest"; -import { test } from "./setup"; +import { test, test2 } from "./setup"; import { ChainId, @@ -13,7 +13,7 @@ import { zeroAddress, zeroHash } from "viem"; import { Vault } from "../../src/augment/Vault"; import { metaMorphoAbi, publicAllocatorAbi } from "./abis"; -const { steakUsdc } = vaults[ChainId.EthMainnet]; +const { steakUsdc, steakPaxg } = vaults[ChainId.EthMainnet]; describe("augment/Vault", () => { test("should fetch vault data", async ({ client, wallet }) => { @@ -91,4 +91,54 @@ describe("augment/Vault", () => { expect(value).toEqual(expectedData); }); + + test2("should fetch vault v1.1 data", async ({ wallet }) => { + const expectedData = new Vault({ + ...steakPaxg, + curator: zeroAddress, + fee: 50000000000000000n, + feeRecipient: "0x255c7705e8BB334DfCae438197f7C4297988085a", + guardian: "0x5148Db8942C69A431167C1B7FA7590c15DF934f1", + owner: "0x0A0e559bc3b0950a7e448F0d4894db195b9cf8DD", + pendingGuardian: { + validAt: 0n, + value: zeroAddress, + }, + pendingOwner: zeroAddress, + pendingTimelock: { + validAt: 0n, + value: 0n, + }, + skimRecipient: zeroAddress, + publicAllocatorConfig: { + admin: "0xfeed46c11F57B7126a773EeC6ae9cA7aE1C03C9a", + fee: 0n, + accruedFee: 0n, + }, + supplyQueue: [ + "0xb1963517b52c4315a4ed5f6811aee279ab7adc90d9dfbd8f187e05f2758f4d1a" as MarketId, + ], + timelock: 604800n, + withdrawQueue: [ + "0xb1963517b52c4315a4ed5f6811aee279ab7adc90d9dfbd8f187e05f2758f4d1a" as MarketId, + ], + lastTotalAssets: 206000400000000000000n, + lostAssets: 0n, + totalAssets: 206000400000000000000n, + totalSupply: 206000400000000000000n, + eip5267Domain: new Eip5267Domain({ + fields: "0x0f", + name: "", + version: "1", + chainId: 1n, + verifyingContract: steakPaxg.address, + salt: zeroHash, + extensions: [], + }), + }); + + const value = await Vault.fetch(steakPaxg.address, wallet); + + expect(value).toEqual(expectedData); + }); }); diff --git a/packages/blue-sdk-ethers/test/e2e/setup.ts b/packages/blue-sdk-ethers/test/e2e/setup.ts index 2309de0d..4d8321d9 100644 --- a/packages/blue-sdk-ethers/test/e2e/setup.ts +++ b/packages/blue-sdk-ethers/test/e2e/setup.ts @@ -5,3 +5,8 @@ export const test = createEthersTest(mainnet, { forkUrl: process.env.MAINNET_RPC_URL, forkBlockNumber: 19_530_000, }); + +export const test2 = createEthersTest(mainnet, { + forkUrl: process.env.MAINNET_RPC_URL, + forkBlockNumber: 21_595_000, +}); diff --git a/packages/blue-sdk-viem/src/abis.ts b/packages/blue-sdk-viem/src/abis.ts index a7d00636..fe31aefa 100644 --- a/packages/blue-sdk-viem/src/abis.ts +++ b/packages/blue-sdk-viem/src/abis.ts @@ -3684,6 +3684,19 @@ export const metaMorphoAbi = [ ], stateMutability: "view", }, + { + type: "function", + name: "lostAssets", // Only defined for MetaMorpho V1.1 vaults. + inputs: [], + outputs: [ + { + name: "", + type: "uint256", + internalType: "uint256", + }, + ], + stateMutability: "view", + }, { type: "function", name: "maxDeposit", diff --git a/packages/blue-sdk-viem/src/fetch/Vault.ts b/packages/blue-sdk-viem/src/fetch/Vault.ts index c68bf210..205bef54 100644 --- a/packages/blue-sdk-viem/src/fetch/Vault.ts +++ b/packages/blue-sdk-viem/src/fetch/Vault.ts @@ -104,6 +104,7 @@ export async function fetchVault( totalSupply, totalAssets, lastTotalAssets, + lostAssets, supplyQueueSize, withdrawQueueSize, hasPublicAllocator, @@ -187,6 +188,12 @@ export async function fetchVault( abi: metaMorphoAbi, functionName: "lastTotalAssets", }), + readContract(client, { + ...parameters, + address, + abi: metaMorphoAbi, + functionName: "lostAssets", + }).catch(() => undefined), readContract(client, { ...parameters, address, @@ -285,6 +292,7 @@ export async function fetchVault( totalSupply, totalAssets, lastTotalAssets, + lostAssets, }); } export async function fetchAccrualVault( diff --git a/packages/blue-sdk-viem/test/Vault.test.ts b/packages/blue-sdk-viem/test/Vault.test.ts index 1b0fd005..5382de5b 100644 --- a/packages/blue-sdk-viem/test/Vault.test.ts +++ b/packages/blue-sdk-viem/test/Vault.test.ts @@ -1,5 +1,5 @@ import { describe, expect } from "vitest"; -import { test } from "./setup"; +import { test, test2 } from "./setup"; import { ChainId, @@ -13,7 +13,7 @@ import { zeroAddress, zeroHash } from "viem"; import { metaMorphoAbi, publicAllocatorAbi } from "../src"; import { Vault } from "../src/augment/Vault"; -const { steakUsdc } = vaults[ChainId.EthMainnet]; +const { steakUsdc, steakPaxg } = vaults[ChainId.EthMainnet]; describe("augment/Vault", () => { test("should fetch vault data", async ({ client }) => { @@ -91,4 +91,54 @@ describe("augment/Vault", () => { expect(value).toStrictEqual(expectedData); }); + + test2("should fetch vault v1.1 data", async ({ client }) => { + const expectedData = new Vault({ + ...steakPaxg, + curator: zeroAddress, + fee: 50000000000000000n, + feeRecipient: "0x255c7705e8BB334DfCae438197f7C4297988085a", + guardian: "0x5148Db8942C69A431167C1B7FA7590c15DF934f1", + owner: "0x0A0e559bc3b0950a7e448F0d4894db195b9cf8DD", + pendingGuardian: { + validAt: 0n, + value: zeroAddress, + }, + pendingOwner: zeroAddress, + pendingTimelock: { + validAt: 0n, + value: 0n, + }, + skimRecipient: zeroAddress, + publicAllocatorConfig: { + admin: "0xfeed46c11F57B7126a773EeC6ae9cA7aE1C03C9a", + fee: 0n, + accruedFee: 0n, + }, + supplyQueue: [ + "0xb1963517b52c4315a4ed5f6811aee279ab7adc90d9dfbd8f187e05f2758f4d1a" as MarketId, + ], + timelock: 604800n, + withdrawQueue: [ + "0xb1963517b52c4315a4ed5f6811aee279ab7adc90d9dfbd8f187e05f2758f4d1a" as MarketId, + ], + lastTotalAssets: 206000400000000000000n, + lostAssets: 0n, + totalAssets: 206000400000000000000n, + totalSupply: 206000400000000000000n, + eip5267Domain: new Eip5267Domain({ + fields: "0x0f", + name: "", + version: "1", + chainId: 1n, + verifyingContract: steakPaxg.address, + salt: zeroHash, + extensions: [], + }), + }); + + const value = await Vault.fetch(steakPaxg.address, client); + + expect(value).toEqual(expectedData); + }); }); diff --git a/packages/blue-sdk-viem/test/setup.ts b/packages/blue-sdk-viem/test/setup.ts index 9a5060b5..cf5849d5 100644 --- a/packages/blue-sdk-viem/test/setup.ts +++ b/packages/blue-sdk-viem/test/setup.ts @@ -5,3 +5,8 @@ export const test = createViemTest(mainnet, { forkUrl: process.env.MAINNET_RPC_URL, forkBlockNumber: 19_530_000, }); + +export const test2 = createViemTest(mainnet, { + forkUrl: process.env.MAINNET_RPC_URL, + forkBlockNumber: 21_595_000, +}); diff --git a/packages/blue-sdk/src/position/Position.ts b/packages/blue-sdk/src/position/Position.ts index 7ed38023..8914ba51 100644 --- a/packages/blue-sdk/src/position/Position.ts +++ b/packages/blue-sdk/src/position/Position.ts @@ -1,9 +1,12 @@ import { BlueErrors } from "../errors.js"; import { + CapacityLimitReason, Market, type MaxBorrowOptions, + type MaxPositionCapacities, type MaxWithdrawCollateralOptions, } from "../market/index.js"; +import { MathLib } from "../math/MathLib.js"; import type { Address, BigIntish, MarketId } from "../types.js"; export interface IPosition { @@ -96,7 +99,10 @@ export class AccrualPosition extends Position implements IAccrualPosition { * `undefined` iff the market's oracle is undefined or reverts. */ get maxBorrowableAssets() { - return this.market.getMaxBorrowableAssets(this); + const { maxBorrowAssets } = this; + if (maxBorrowAssets == null) return; + + return MathLib.zeroFloorSub(maxBorrowAssets, this.borrowAssets); } /** @@ -166,18 +172,10 @@ export class AccrualPosition extends Position implements IAccrualPosition { return this.market.getBorrowCapacityUsage(this); } - get borrowCapacityLimit() { - return this.market.getBorrowCapacityLimit(this); - } - get withdrawCapacityLimit() { return this.market.getWithdrawCapacityLimit(this); } - get withdrawCollateralCapacityLimit() { - return this.market.getWithdrawCollateralCapacityLimit(this); - } - /** * Returns a new position derived from this position, whose interest has been accrued up to the given timestamp. * @param timestamp The timestamp at which to accrue interest. Must be greater than or equal to the market's `lastUpdate`. @@ -277,6 +275,16 @@ export class AccrualPosition extends Position implements IAccrualPosition { return { position, assets, shares }; } + public getBorrowCapacityLimit(options?: MaxBorrowOptions) { + return this.market.getBorrowCapacityLimit(this, options); + } + + public getWithdrawCollateralCapacityLimit( + options?: MaxWithdrawCollateralOptions, + ) { + return this.market.getWithdrawCollateralCapacityLimit(this, options); + } + public getRepayCapacityLimit(loanTokenBalance: bigint) { return this.market.getRepayCapacityLimit( this.borrowShares, @@ -291,12 +299,22 @@ export class AccrualPosition extends Position implements IAccrualPosition { borrow?: MaxBorrowOptions; withdrawCollateral?: MaxWithdrawCollateralOptions; }, - ) { - return this.market.getMaxCapacities( - this, - loanTokenBalance, - collateralTokenBalance, - options, - ); + ): MaxPositionCapacities { + return { + supply: { + value: loanTokenBalance, + limiter: CapacityLimitReason.balance, + }, + withdraw: this.withdrawCapacityLimit, + borrow: this.getBorrowCapacityLimit(options?.borrow), + repay: this.getRepayCapacityLimit(loanTokenBalance), + supplyCollateral: { + value: collateralTokenBalance, + limiter: CapacityLimitReason.balance, + }, + withdrawCollateral: this.getWithdrawCollateralCapacityLimit( + options?.withdrawCollateral, + ), + }; } } diff --git a/packages/blue-sdk/src/vault/Vault.ts b/packages/blue-sdk/src/vault/Vault.ts index 2dd79376..37f367ff 100644 --- a/packages/blue-sdk/src/vault/Vault.ts +++ b/packages/blue-sdk/src/vault/Vault.ts @@ -45,6 +45,7 @@ export interface IVault extends IVaultConfig { totalSupply: bigint; totalAssets: bigint; lastTotalAssets: bigint; + lostAssets?: bigint; publicAllocatorConfig?: VaultPublicAllocatorConfig; } @@ -116,6 +117,12 @@ export class Vault extends VaultToken implements IVault { */ public lastTotalAssets: bigint; + /** + * The MetaMorpho vault's lost assets due to realized bad debt. + * Only defined for MetaMorpho V1.1 vaults. + */ + public lostAssets?: bigint; + /** * The MetaMorpho vault's public allocator configuration. */ @@ -138,6 +145,7 @@ export class Vault extends VaultToken implements IVault { totalSupply, totalAssets, lastTotalAssets, + lostAssets, ...config }: IVault) { super(config, { totalAssets, totalSupply }); @@ -158,6 +166,7 @@ export class Vault extends VaultToken implements IVault { this.supplyQueue = supplyQueue; this.withdrawQueue = withdrawQueue; this.lastTotalAssets = lastTotalAssets; + this.lostAssets = lostAssets; this.publicAllocatorConfig = publicAllocatorConfig; } @@ -354,6 +363,15 @@ export class AccrualVault extends Vault implements IAccrualVault { }), ); + if (vault.lostAssets != null) { + vault.lostAssets += MathLib.max( + vault.lastTotalAssets - vault.lostAssets - vault.totalAssets, + 0n, + ); + + vault.totalAssets += vault.lostAssets; + } + const feeAssets = MathLib.wMulDown(vault.totalInterest, vault.fee); vault.totalAssets -= feeAssets; diff --git a/packages/blue-sdk/src/vault/VaultConfig.ts b/packages/blue-sdk/src/vault/VaultConfig.ts index 185ff95f..f6975942 100644 --- a/packages/blue-sdk/src/vault/VaultConfig.ts +++ b/packages/blue-sdk/src/vault/VaultConfig.ts @@ -12,6 +12,9 @@ export class VaultConfig extends Token implements IVaultConfig { constructor( { decimalsOffset, asset, ...config }: IVaultConfig, + /** + * @deprecated Kept for backward compatibility. + */ public readonly chainId?: number, ) { super({ ...config, decimals: 18 }); diff --git a/packages/morpho-test/src/fixtures/vaults.ts b/packages/morpho-test/src/fixtures/vaults.ts index 94a53d9f..d07bcccb 100644 --- a/packages/morpho-test/src/fixtures/vaults.ts +++ b/packages/morpho-test/src/fixtures/vaults.ts @@ -10,79 +10,61 @@ const { wNative, usdc, dai } = addresses[ChainId.EthMainnet]; export const vaults = { [ChainId.EthMainnet]: { - steakUsdc: new VaultConfig( - { - address: "0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB", - decimalsOffset: 12n, - symbol: "steakUSDC", - name: "Steakhouse USDC", - asset: usdc, - }, - ChainId.EthMainnet, - ), + steakUsdc: new VaultConfig({ + address: "0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB", + decimalsOffset: 12n, + symbol: "steakUSDC", + name: "Steakhouse USDC", + asset: usdc, + }), - steakEth: new VaultConfig({ - address: "0xBEEf050ecd6a16c4e7bfFbB52Ebba7846C4b8cD4", - asset: wNative, - name: "Steakhouse ETH", + steakPaxg: new VaultConfig({ + address: "0xBeeF7959aE71D4e45e1863dae0B94C35244AF816", + asset: "0x45804880De22913dAFE09f4980848ECE6EcbAf78", + name: "Steakhouse PAXG", decimalsOffset: 0, - symbol: "steakETH", + symbol: "steakPAXG", }), - bbUsdc: new VaultConfig( - { - address: "0x186514400e52270cef3D80e1c6F8d10A75d47344", - decimalsOffset: 12n, - symbol: "bbUSDC", - name: "BlockAnalytica USDC", - asset: wNative, - }, - ChainId.EthMainnet, - ), + bbUsdc: new VaultConfig({ + address: "0x186514400e52270cef3D80e1c6F8d10A75d47344", + decimalsOffset: 12n, + symbol: "bbUSDC", + name: "BlockAnalytica USDC", + asset: wNative, + }), - bbEth: new VaultConfig( - { - address: "0x38989BBA00BDF8181F4082995b3DEAe96163aC5D", - decimalsOffset: 0n, - symbol: "bbETH", - name: "BlockAnalytica ETH", - asset: wNative, - }, - ChainId.EthMainnet, - ), + bbEth: new VaultConfig({ + address: "0x38989BBA00BDF8181F4082995b3DEAe96163aC5D", + decimalsOffset: 0n, + symbol: "bbETH", + name: "BlockAnalytica ETH", + asset: wNative, + }), - bbUsdt: new VaultConfig( - { - address: "0x2C25f6C25770fFEC5959D34B94Bf898865e5D6b1", - decimalsOffset: 12n, - symbol: "bbUSDT", - name: "BlockAnalytica USDT", - asset: "0xdAC17F958D2ee523a2206206994597C13D831ec7", - }, - ChainId.EthMainnet, - ), + bbUsdt: new VaultConfig({ + address: "0x2C25f6C25770fFEC5959D34B94Bf898865e5D6b1", + decimalsOffset: 12n, + symbol: "bbUSDT", + name: "BlockAnalytica USDT", + asset: "0xdAC17F958D2ee523a2206206994597C13D831ec7", + }), - re7Weth: new VaultConfig( - { - address: "0x78Fc2c2eD1A4cDb5402365934aE5648aDAd094d0", - decimalsOffset: 0n, - symbol: "re7WETH", - name: "Re7 WETH", - asset: wNative, - }, - ChainId.EthMainnet, - ), + re7Weth: new VaultConfig({ + address: "0x78Fc2c2eD1A4cDb5402365934aE5648aDAd094d0", + decimalsOffset: 0n, + symbol: "re7WETH", + name: "Re7 WETH", + asset: wNative, + }), - gDai: new VaultConfig( - { - address: "0x500331c9fF24D9d11aee6B07734Aa72343EA74a5", - decimalsOffset: 0n, - symbol: "gDAI", - name: "Gauntlet DAI Core", - asset: dai, - }, - ChainId.EthMainnet, - ), + gDai: new VaultConfig({ + address: "0x500331c9fF24D9d11aee6B07734Aa72343EA74a5", + decimalsOffset: 0n, + symbol: "gDAI", + name: "Gauntlet DAI Core", + asset: dai, + }), }, } as const; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 59495da7..3e887984 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -125,8 +125,8 @@ importers: specifier: ^6.13.4 version: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) ethers-types: - specifier: ^3.17.3 - version: 3.17.3(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + specifier: ^3.18.1 + version: 3.18.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)) typescript: specifier: ^5.7.2 version: 5.7.2 @@ -1704,6 +1704,10 @@ packages: resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -2747,6 +2751,9 @@ packages: bn.js@4.12.0: resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + bn.js@4.12.1: + resolution: {integrity: sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==} + bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} @@ -3379,8 +3386,8 @@ packages: ethereumjs-util@6.2.1: resolution: {integrity: sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==} - ethers-types@3.17.3: - resolution: {integrity: sha512-M2TYtIGQQYmZK3eQULJlyLFiCz/aNJhjloxU9ZVrSUjKFpiwhwJuFMVycylNpVmfoD7U5JD3CTSWpmle9QaaEg==} + ethers-types@3.18.1: + resolution: {integrity: sha512-VUHisDlJrg871DxneLe5PJt8Jyg5radEoriym7KDYiwf8ZeXZh8mIGWtQnRMO4exfj2Qu2nX0xjzgyoKHIwkQg==} peerDependencies: ethers: ^6.0.0 @@ -4626,6 +4633,9 @@ packages: preact@10.24.3: resolution: {integrity: sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==} + preact@10.25.4: + resolution: {integrity: sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==} + prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} @@ -6107,7 +6117,7 @@ snapshots: eth-json-rpc-filters: 6.0.1 eventemitter3: 5.0.1 keccak: 3.0.4 - preact: 10.24.3 + preact: 10.25.4 sha.js: 2.4.11 transitivePeerDependencies: - supports-color @@ -7026,13 +7036,20 @@ snapshots: '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + optional: true + '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/set-array@1.2.1': {} '@jridgewell/source-map@0.3.6': dependencies: - '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 optional: true @@ -8501,6 +8518,8 @@ snapshots: bn.js@4.12.0: {} + bn.js@4.12.1: {} + bn.js@5.2.1: {} bowser@2.11.0: {} @@ -9066,7 +9085,7 @@ snapshots: elliptic@6.5.4: dependencies: - bn.js: 4.12.0 + bn.js: 4.12.1 brorand: 1.1.0 hash.js: 1.1.7 hmac-drbg: 1.0.1 @@ -9246,7 +9265,7 @@ snapshots: ethjs-util: 0.1.6 rlp: 2.2.7 - ethers-types@3.17.3(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)): + ethers-types@3.18.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)): dependencies: ethers: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -10564,6 +10583,8 @@ snapshots: preact@10.24.3: {} + preact@10.25.4: {} + prettier@2.8.8: {} pretty-format@27.5.1: