From b666f8e460477cfd101d57b8615074dc5697c847 Mon Sep 17 00:00:00 2001 From: Oumar Fall Date: Fri, 18 Oct 2024 14:15:39 +0200 Subject: [PATCH 01/32] feat(Time): add fromPeriod util --- .vscode/settings.json | 3 ++ packages/morpho-ts/README.md | 52 ++++++++++++++++------------ packages/morpho-ts/src/time/time.ts | 22 +++++++----- packages/morpho-ts/test/time.test.ts | 6 ++++ 4 files changed, 52 insertions(+), 31 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index d8c37843..2756c224 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -6,5 +6,8 @@ }, "[markdown]": { "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[typescript]": { + "editor.defaultFormatter": "biomejs.biome" } } diff --git a/packages/morpho-ts/README.md b/packages/morpho-ts/README.md index 800c3f56..00569833 100644 --- a/packages/morpho-ts/README.md +++ b/packages/morpho-ts/README.md @@ -172,14 +172,34 @@ format.percent.digits(1).sign().of(0.123456); // "+12.3%" The `Time` utility provides a robust way to handle and convert time units in TypeScript, making it easier to work with various time durations. +- [**Period**](#period-types): Manage time periods - [**Time Unit Conversion**](#converting-time-units): Convert between different time units such as milliseconds, seconds, minutes, hours, days, weeks, months, and years. - [**Wait**](#timewait): Pause execution for a specified amount of time. - [**Timestamp**](#timetimestamp): Get the current Unix timestamp as a bigint. -- [**Period**](#period-types): Manage time periods + + +### Period Types + +The `Time` utility also provides types to define periods: + +- `Unit`: A type representing supported time units (`ms`, `s`, `min`, etc.). +- `Period`: An object with `unit` and `duration` properties, defining a specific time period. +- `PeriodLike`: A type that can either be a `Period` object or a `Unit`. + +You can convert a unit or a period-like object into a `Period`: + +```typescript +import { Time } from "@morpho-org/morpho-ts"; + +Time.toPeriod("h"); // { unit: 'h', duration: 1 } +Time.toPeriod({ unit: "min", duration: 15 }); // { unit: 'min', duration: 15 } +``` + +--- #### Converting Time Units -Each time unit has a `.from` method that allows you to convert from one unit to another. +Each time unit has a `.from` and a `.fromPeriod` method that allows you to convert from one unit to another. The following units are supported: @@ -200,7 +220,8 @@ Convert 1 hour to minutes: ```typescript import { Time } from "@morpho-org/morpho-ts"; -const minutes = Time.h.from.min(1); // 60 +const minutes = Time.min.from.h(1); // 60 +const minutesFromPeriod = Time.min.fromPeriod("h"); // 60 ``` Convert 5 days to hours: @@ -208,7 +229,8 @@ Convert 5 days to hours: ```typescript import { Time } from "@morpho-org/morpho-ts"; -const hours = Time.d.from.h(5n); // 120n +const hours = Time.h.from.d(5n); // 120n +const hoursFromPeriod = Time.h.fromPeriod({unit: "d", duration: 5}); // 120 ``` Convert 2 weeks to days: @@ -216,9 +238,11 @@ Convert 2 weeks to days: ```typescript import { Time } from "@morpho-org/morpho-ts"; -const days = Time.w.from.d(2); // 14 +const days = Time.d.from.w(2); // 14 +const daysFromPeriod = Time.w.fromPeriod({unit: "w", duration: 2}); // 14 ``` + --- ### `Time.wait` @@ -248,21 +272,3 @@ import { Time } from "@morpho-org/morpho-ts"; Time.timestamp(); // 1692671241n ``` ---- - -### Period Types - -The `Time` utility also provides types to define periods: - -- `Unit`: A type representing supported time units (`ms`, `s`, `min`, etc.). -- `Period`: An object with `unit` and `duration` properties, defining a specific time period. -- `PeriodLike`: A type that can either be a `Period` object or a `Unit`. - -You can convert a unit or a period-like object into a `Period`: - -```typescript -import { Time } from "@morpho-org/morpho-ts"; - -Time.toPeriod("h"); // { unit: 'h', duration: 1 } -Time.toPeriod({ unit: "min", duration: 15 }); // { unit: 'min', duration: 15 } -``` diff --git a/packages/morpho-ts/src/time/time.ts b/packages/morpho-ts/src/time/time.ts index 7d09eba7..8839fd7b 100644 --- a/packages/morpho-ts/src/time/time.ts +++ b/packages/morpho-ts/src/time/time.ts @@ -16,16 +16,18 @@ type P = { ) => T extends number ? number : bigint; }; +type Converters = { from: P; fromPeriod(period: Time.PeriodLike): number }; + // biome-ignore lint/complexity/noStaticOnlyClass: export class Time { - static ms: { from: P }; - static s: { from: P }; - static min: { from: P }; - static h: { from: P }; - static d: { from: P }; - static w: { from: P }; - static mo: { from: P }; - static y: { from: P }; + static ms: Converters; + static s: Converters; + static min: Converters; + static h: Converters; + static d: Converters; + static w: Converters; + static mo: Converters; + static y: Converters; } Object.defineProperties( @@ -36,6 +38,10 @@ Object.defineProperties( { writable: false, value: { + fromPeriod(period: Time.PeriodLike) { + const { unit: unitFrom, duration } = Time.toPeriod(period); + return Time[unit].from[unitFrom](duration); + }, from: Object.fromEntries( UNITS.map((unitFrom, iFrom) => { if (iFrom < i) diff --git a/packages/morpho-ts/test/time.test.ts b/packages/morpho-ts/test/time.test.ts index c76cee0d..9496070a 100644 --- a/packages/morpho-ts/test/time.test.ts +++ b/packages/morpho-ts/test/time.test.ts @@ -19,4 +19,10 @@ describe("time", () => { const s = 123456789444n; expect(Time.ms.from.s(s)).toBe(123456789444000n); }); + + test("should convert period to s", () => { + expect(Time.ms.fromPeriod("s")).toBe(1000); + expect(Time.ms.fromPeriod({ unit: "s", duration: 123 })).toBe(123000); + expect(Time.min.fromPeriod({ unit: "s", duration: 123 })).toBe(2); + }); }); From 3ea9cf9d8b5bad6c5fe55fbffae08687fd1721a3 Mon Sep 17 00:00:00 2001 From: Oumar Fall Date: Fri, 18 Oct 2024 14:17:39 +0200 Subject: [PATCH 02/32] fix(Time): fix test name --- packages/morpho-ts/test/time.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/morpho-ts/test/time.test.ts b/packages/morpho-ts/test/time.test.ts index 9496070a..a0cf01ec 100644 --- a/packages/morpho-ts/test/time.test.ts +++ b/packages/morpho-ts/test/time.test.ts @@ -20,7 +20,7 @@ describe("time", () => { expect(Time.ms.from.s(s)).toBe(123456789444000n); }); - test("should convert period to s", () => { + test("should convert periods", () => { expect(Time.ms.fromPeriod("s")).toBe(1000); expect(Time.ms.fromPeriod({ unit: "s", duration: 123 })).toBe(123000); expect(Time.min.fromPeriod({ unit: "s", duration: 123 })).toBe(2); From c8efa9186ecdd13eb4cb672c186e740d3a12fc97 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Fri, 18 Oct 2024 15:58:20 +0200 Subject: [PATCH 03/32] ci(publish): update versioning --- .github/workflows/publish.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index d184bcb0..e9eb543f 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -54,16 +54,12 @@ jobs: run: node ../../scripts/release/release.js working-directory: packages/${{ matrix.package }} - # First, set version of each package to the most recent so they are referenced correctly in dependencies. + # Set version of each package to the most recent so they are referenced correctly in dependencies. - run: | pnpm -r -c exec 'node ../../scripts/release/version.js' echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > ~/.npmrc if: steps.release.outputs.version - - run: pnpm version ${{ steps.release.outputs.version }} --no-git-tag-version - working-directory: packages/${{ matrix.package }} - if: steps.release.outputs.version - - run: pnpm publish --no-git-checks --access public --tag ${{ steps.release.outputs.channel }} working-directory: packages/${{ matrix.package }} if: steps.release.outputs.version From af17f57367a78edba61c833a2d394971f6a59f9a Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Fri, 18 Oct 2024 16:01:44 +0200 Subject: [PATCH 04/32] ci(publish): mom i did it --- .github/workflows/push.yml | 8 +- package.json | 2 +- packages/blue-sdk-ethers/package.json | 2 +- packages/blue-sdk-viem/package.json | 2 +- packages/blue-sdk-wagmi/package.json | 4 +- packages/blue-sdk/package.json | 2 +- packages/bundler-sdk-viem/package.json | 2 +- packages/liquidation-sdk-viem/package.json | 2 +- packages/simulation-sdk-wagmi/package.json | 4 +- packages/simulation-sdk/package.json | 2 +- packages/test-ethers/package.json | 2 +- packages/test-viem/package.json | 2 +- packages/test-wagmi/package.json | 4 +- packages/test/package.json | 2 +- pnpm-lock.yaml | 220 ++++++++++++--------- 15 files changed, 143 insertions(+), 117 deletions(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 5a955152..e918c0bc 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -25,10 +25,10 @@ jobs: publish: if: github.ref_name == 'main' || github.ref_name == 'next' - # needs: - # - lint - # - build - # - test + needs: + - lint + - build + - test uses: ./.github/workflows/publish.yml secrets: inherit \ No newline at end of file diff --git a/package.json b/package.json index a4e500db..1d94c79f 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ }, "devDependencies": { "@actions/core": "^1.11.1", - "@biomejs/biome": "^1.9.3", + "@biomejs/biome": "^1.9.4", "@commitlint/cli": "^19.5.0", "@commitlint/config-conventional": "^19.5.0", "@vitest/coverage-v8": "^2.1.3", diff --git a/packages/blue-sdk-ethers/package.json b/packages/blue-sdk-ethers/package.json index 0ad69a68..496f2190 100644 --- a/packages/blue-sdk-ethers/package.json +++ b/packages/blue-sdk-ethers/package.json @@ -24,7 +24,7 @@ "ethers": "^6.13.3", "ethers-types": "^3.17.0", "typescript": "^5.6.3", - "viem": "^2.21.19", + "viem": "^2.21.29", "vitest": "^2.1.3" }, "peerDependencies": { diff --git a/packages/blue-sdk-viem/package.json b/packages/blue-sdk-viem/package.json index 6d20fc4c..10c4a0e8 100644 --- a/packages/blue-sdk-viem/package.json +++ b/packages/blue-sdk-viem/package.json @@ -34,7 +34,7 @@ "hardhat": "^2.22.13", "ts-node": "^10.9.2", "typescript": "^5.6.3", - "viem": "^2.21.19", + "viem": "^2.21.29", "vitest": "^2.1.3" }, "publishConfig": { diff --git a/packages/blue-sdk-wagmi/package.json b/packages/blue-sdk-wagmi/package.json index 76bb844d..24e7da6f 100644 --- a/packages/blue-sdk-wagmi/package.json +++ b/packages/blue-sdk-wagmi/package.json @@ -45,9 +45,9 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "typescript": "^5.6.3", - "viem": "^2.21.19", + "viem": "^2.21.29", "vitest": "^2.1.3", - "wagmi": "^2.12.17" + "wagmi": "^2.12.19" }, "publishConfig": { "main": "lib/index.js", diff --git a/packages/blue-sdk/package.json b/packages/blue-sdk/package.json index b410c2c0..56c56fa8 100644 --- a/packages/blue-sdk/package.json +++ b/packages/blue-sdk/package.json @@ -31,7 +31,7 @@ "@morpho-org/test-viem": "workspace:^", "@types/node": "^22.1.0", "typescript": "^5.6.3", - "viem": "^2.21.19", + "viem": "^2.21.29", "viem-deal": "^2.0.1", "vitest": "^2.1.3" }, diff --git a/packages/bundler-sdk-viem/package.json b/packages/bundler-sdk-viem/package.json index 0cde06e0..f4d6a2ee 100644 --- a/packages/bundler-sdk-viem/package.json +++ b/packages/bundler-sdk-viem/package.json @@ -39,7 +39,7 @@ "@types/node": "^22.2.0", "lodash": "^4.17.21", "typescript": "^5.6.3", - "viem": "^2.21.19", + "viem": "^2.21.29", "vitest": "^2.1.3" }, "publishConfig": { diff --git a/packages/liquidation-sdk-viem/package.json b/packages/liquidation-sdk-viem/package.json index 708951af..b4dbca90 100644 --- a/packages/liquidation-sdk-viem/package.json +++ b/packages/liquidation-sdk-viem/package.json @@ -54,7 +54,7 @@ "nock": "beta", "ts-node": "^10.9.2", "typescript": "^5.6.3", - "viem": "^2.21.19", + "viem": "^2.21.29", "vitest": "^2.1.3" }, "publishConfig": { diff --git a/packages/simulation-sdk-wagmi/package.json b/packages/simulation-sdk-wagmi/package.json index 3048b4f0..1ba67cf9 100644 --- a/packages/simulation-sdk-wagmi/package.json +++ b/packages/simulation-sdk-wagmi/package.json @@ -53,9 +53,9 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "typescript": "^5.6.3", - "viem": "^2.21.19", + "viem": "^2.21.29", "vitest": "^2.1.3", - "wagmi": "^2.12.17" + "wagmi": "^2.12.19" }, "publishConfig": { "main": "lib/index.js", diff --git a/packages/simulation-sdk/package.json b/packages/simulation-sdk/package.json index a9c78126..7106e0c9 100644 --- a/packages/simulation-sdk/package.json +++ b/packages/simulation-sdk/package.json @@ -34,7 +34,7 @@ "lodash": "^4.17.21", "mutative": "^1.0.11", "typescript": "^5.6.3", - "viem": "^2.21.19", + "viem": "^2.21.29", "vitest": "^2.1.3" }, "publishConfig": { diff --git a/packages/test-ethers/package.json b/packages/test-ethers/package.json index 107f9e66..37ce6f28 100644 --- a/packages/test-ethers/package.json +++ b/packages/test-ethers/package.json @@ -24,7 +24,7 @@ "@types/node": "^22.7.4", "ethers": "^6.13.3", "typescript": "^5.6.3", - "viem": "^2.21.19", + "viem": "^2.21.29", "vitest": "^2.1.3" }, "publishConfig": { diff --git a/packages/test-viem/package.json b/packages/test-viem/package.json index f0be7477..5b6e8d94 100644 --- a/packages/test-viem/package.json +++ b/packages/test-viem/package.json @@ -31,7 +31,7 @@ "@morpho-org/test": "workspace:^", "@types/node": "^22.7.4", "typescript": "^5.6.3", - "viem": "^2.21.19", + "viem": "^2.21.29", "viem-deal": "^2.0.1", "vitest": "^2.1.3" }, diff --git a/packages/test-wagmi/package.json b/packages/test-wagmi/package.json index 1cb8a2b5..cbe5dae4 100644 --- a/packages/test-wagmi/package.json +++ b/packages/test-wagmi/package.json @@ -31,10 +31,10 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "typescript": "^5.6.3", - "viem": "^2.21.19", + "viem": "^2.21.29", "viem-deal": "^2.0.1", "vitest": "^2.1.3", - "wagmi": "^2.12.17" + "wagmi": "^2.12.19" }, "publishConfig": { "main": "lib/index.js", diff --git a/packages/test/package.json b/packages/test/package.json index 586c30dd..3e4ad56e 100644 --- a/packages/test/package.json +++ b/packages/test/package.json @@ -22,7 +22,7 @@ "@types/lodash.kebabcase": "^4.1.9", "@types/node": "^22.7.4", "typescript": "^5.6.3", - "viem": "^2.21.19", + "viem": "^2.21.29", "vitest": "^2.1.3" }, "publishConfig": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4c6ee95b..f6f45ace 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: specifier: ^1.11.1 version: 1.11.1 '@biomejs/biome': - specifier: ^1.9.3 - version: 1.9.3 + specifier: ^1.9.4 + version: 1.9.4 '@commitlint/cli': specifier: ^19.5.0 version: 19.5.0(@types/node@22.7.5)(typescript@5.6.3) @@ -97,11 +97,11 @@ importers: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.19 - version: 2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.29 + version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) viem-deal: specifier: ^2.0.1 - version: 2.0.1(viem@2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + version: 2.0.1(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) vitest: specifier: ^2.1.3 version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) @@ -140,8 +140,8 @@ importers: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.19 - version: 2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.29 + version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) @@ -176,8 +176,8 @@ importers: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.19 - version: 2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.29 + version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) @@ -225,7 +225,7 @@ importers: version: 18.3.1 '@wagmi/core': specifier: ^2.13.5 - version: 2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + version: 2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) react: specifier: ^18.3.1 version: 18.3.1 @@ -236,14 +236,14 @@ importers: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.19 - version: 2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.29 + version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) wagmi: - specifier: ^2.12.17 - version: 2.12.18(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + specifier: ^2.12.19 + version: 2.12.19(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) packages/bundler-sdk-viem: devDependencies: @@ -287,8 +287,8 @@ importers: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.19 - version: 2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.29 + version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) @@ -300,7 +300,7 @@ importers: version: 6.10.0(axios@1.7.7)(typescript@5.6.3) executooor-viem: specifier: ^1.3.3 - version: 1.3.3(evm-maths@7.0.0)(viem@2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + version: 1.3.3(evm-maths@7.0.0)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) graphql: specifier: ^16.9.0 version: 16.9.0 @@ -372,8 +372,8 @@ importers: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.19 - version: 2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.29 + version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) @@ -438,8 +438,8 @@ importers: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.19 - version: 2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.29 + version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) @@ -493,7 +493,7 @@ importers: version: 18.3.1 '@wagmi/core': specifier: ^2.13.5 - version: 2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + version: 2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) lodash: specifier: ^4.17.21 version: 4.17.21 @@ -510,14 +510,14 @@ importers: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.19 - version: 2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.29 + version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) wagmi: - specifier: ^2.12.17 - version: 2.12.18(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + specifier: ^2.12.19 + version: 2.12.19(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) packages/test: dependencies: @@ -535,8 +535,8 @@ importers: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.19 - version: 2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.29 + version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) @@ -559,8 +559,8 @@ importers: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.19 - version: 2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.29 + version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) @@ -581,11 +581,11 @@ importers: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.19 - version: 2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.29 + version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) viem-deal: specifier: ^2.0.1 - version: 2.0.1(viem@2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + version: 2.0.1(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) vitest: specifier: ^2.1.3 version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) @@ -618,7 +618,7 @@ importers: version: 18.3.1 '@wagmi/core': specifier: ^2.13.8 - version: 2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + version: 2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) react: specifier: ^18.3.1 version: 18.3.1 @@ -629,17 +629,17 @@ importers: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.19 - version: 2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.29 + version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) viem-deal: specifier: ^2.0.1 - version: 2.0.1(viem@2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + version: 2.0.1(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) vitest: specifier: ^2.1.3 version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) wagmi: - specifier: ^2.12.17 - version: 2.12.18(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + specifier: ^2.12.19 + version: 2.12.19(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) packages: @@ -1312,55 +1312,55 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@biomejs/biome@1.9.3': - resolution: {integrity: sha512-POjAPz0APAmX33WOQFGQrwLvlu7WLV4CFJMlB12b6ZSg+2q6fYu9kZwLCOA+x83zXfcPd1RpuWOKJW0GbBwLIQ==} + '@biomejs/biome@1.9.4': + resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@1.9.3': - resolution: {integrity: sha512-QZzD2XrjJDUyIZK+aR2i5DDxCJfdwiYbUKu9GzkCUJpL78uSelAHAPy7m0GuPMVtF/Uo+OKv97W3P9nuWZangQ==} + '@biomejs/cli-darwin-arm64@1.9.4': + resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@1.9.3': - resolution: {integrity: sha512-vSCoIBJE0BN3SWDFuAY/tRavpUtNoqiceJ5PrU3xDfsLcm/U6N93JSM0M9OAiC/X7mPPfejtr6Yc9vSgWlEgVw==} + '@biomejs/cli-darwin-x64@1.9.4': + resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@1.9.3': - resolution: {integrity: sha512-VBzyhaqqqwP3bAkkBrhVq50i3Uj9+RWuj+pYmXrMDgjS5+SKYGE56BwNw4l8hR3SmYbLSbEo15GcV043CDSk+Q==} + '@biomejs/cli-linux-arm64-musl@1.9.4': + resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-arm64@1.9.3': - resolution: {integrity: sha512-vJkAimD2+sVviNTbaWOGqEBy31cW0ZB52KtpVIbkuma7PlfII3tsLhFa+cwbRAcRBkobBBhqZ06hXoZAN8NODQ==} + '@biomejs/cli-linux-arm64@1.9.4': + resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-x64-musl@1.9.3': - resolution: {integrity: sha512-TJmnOG2+NOGM72mlczEsNki9UT+XAsMFAOo8J0me/N47EJ/vkLXxf481evfHLlxMejTY6IN8SdRSiPVLv6AHlA==} + '@biomejs/cli-linux-x64-musl@1.9.4': + resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-linux-x64@1.9.3': - resolution: {integrity: sha512-x220V4c+romd26Mu1ptU+EudMXVS4xmzKxPVb9mgnfYlN4Yx9vD5NZraSx/onJnd3Gh/y8iPUdU5CDZJKg9COA==} + '@biomejs/cli-linux-x64@1.9.4': + resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-win32-arm64@1.9.3': - resolution: {integrity: sha512-lg/yZis2HdQGsycUvHWSzo9kOvnGgvtrYRgoCEwPBwwAL8/6crOp3+f47tPwI/LI1dZrhSji7PNsGKGHbwyAhw==} + '@biomejs/cli-win32-arm64@1.9.4': + resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@1.9.3': - resolution: {integrity: sha512-cQMy2zanBkVLpmmxXdK6YePzmZx0s5Z7KEnwmrW54rcXK3myCNbQa09SwGZ8i/8sLw0H9F3X7K4rxVNGU8/D4Q==} + '@biomejs/cli-win32-x64@1.9.4': + resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -2079,8 +2079,8 @@ packages: react-native: optional: true - '@metamask/sdk@0.29.2': - resolution: {integrity: sha512-2BqKTMelIK2i+HjqzOmfN02Bfp3fyOOlqj812q/i7+RfQeNmwGBxoSvsd/rsoT00VmYymzDyY8kWFR84+/i2Tw==} + '@metamask/sdk@0.29.3': + resolution: {integrity: sha512-raOqMlsEjzsz3bOAK1x7/1QyGfnCyGvFZOT4OYoyepKu3QG3ex3o8iHdVYlcMkqZVcOsXWLsrUorn0SYploXyw==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 @@ -2861,8 +2861,8 @@ packages: '@vitest/utils@2.1.3': resolution: {integrity: sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==} - '@wagmi/connectors@5.2.0': - resolution: {integrity: sha512-djj4vhGdc0wslD2q3jj4myojQJdHssgUJ3WEicYhuLRlBH4yssWclt4QUKGbLoaNE/ciJMKa2Qe2bLx5Vo+urg==} + '@wagmi/connectors@5.2.1': + resolution: {integrity: sha512-+QxjRJnSlhBhq6wiMU4zxdfKgszk2Ul7rHxOHdKyq4bTNXikc0iBu+XxLJKBpEsL065rUtBitaBS70xkSWw5ow==} peerDependencies: '@wagmi/core': 2.13.8 typescript: '>=5.0.4' @@ -6465,6 +6465,14 @@ packages: typescript: optional: true + viem@2.21.29: + resolution: {integrity: sha512-n9LoCJjmI1XsE33nl+M4p3Wy5hczv7YC682RpX4Qk9cw8s9HJU+hUi5eDcNDPBcAwIHGCPKsf8yFBEYnE2XYVg==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + vite-node@2.1.3: resolution: {integrity: sha512-I1JadzO+xYX887S39Do+paRePCKoiDrWRRjp9kkG5he0t7RXNvPAJPCQSJqbGN4uCrFFeS3Kj3sLqY8NMYBEdA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -6529,8 +6537,8 @@ packages: vlq@1.0.1: resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} - wagmi@2.12.18: - resolution: {integrity: sha512-ddW67eFmFyPSzW5L2Q11bROhNDOnPJZcbleIsBMfP5Vpk5FC0AjfTOhLesjW0y74lWzpmInlaWFZPlDsEijxJg==} + wagmi@2.12.19: + resolution: {integrity: sha512-ksXR7r8xniaSVYBwmjJFMeqkBf1TNB2L+3yGFD4Elu7+GQdxjrZp6+SR8HYIOGFtR7BGp1VUPGTxbndg7ghxVw==} peerDependencies: '@tanstack/react-query': '>=5.0.0' react: '>=18' @@ -7631,39 +7639,39 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@biomejs/biome@1.9.3': + '@biomejs/biome@1.9.4': optionalDependencies: - '@biomejs/cli-darwin-arm64': 1.9.3 - '@biomejs/cli-darwin-x64': 1.9.3 - '@biomejs/cli-linux-arm64': 1.9.3 - '@biomejs/cli-linux-arm64-musl': 1.9.3 - '@biomejs/cli-linux-x64': 1.9.3 - '@biomejs/cli-linux-x64-musl': 1.9.3 - '@biomejs/cli-win32-arm64': 1.9.3 - '@biomejs/cli-win32-x64': 1.9.3 - - '@biomejs/cli-darwin-arm64@1.9.3': + '@biomejs/cli-darwin-arm64': 1.9.4 + '@biomejs/cli-darwin-x64': 1.9.4 + '@biomejs/cli-linux-arm64': 1.9.4 + '@biomejs/cli-linux-arm64-musl': 1.9.4 + '@biomejs/cli-linux-x64': 1.9.4 + '@biomejs/cli-linux-x64-musl': 1.9.4 + '@biomejs/cli-win32-arm64': 1.9.4 + '@biomejs/cli-win32-x64': 1.9.4 + + '@biomejs/cli-darwin-arm64@1.9.4': optional: true - '@biomejs/cli-darwin-x64@1.9.3': + '@biomejs/cli-darwin-x64@1.9.4': optional: true - '@biomejs/cli-linux-arm64-musl@1.9.3': + '@biomejs/cli-linux-arm64-musl@1.9.4': optional: true - '@biomejs/cli-linux-arm64@1.9.3': + '@biomejs/cli-linux-arm64@1.9.4': optional: true - '@biomejs/cli-linux-x64-musl@1.9.3': + '@biomejs/cli-linux-x64-musl@1.9.4': optional: true - '@biomejs/cli-linux-x64@1.9.3': + '@biomejs/cli-linux-x64@1.9.4': optional: true - '@biomejs/cli-win32-arm64@1.9.3': + '@biomejs/cli-win32-arm64@1.9.4': optional: true - '@biomejs/cli-win32-x64@1.9.3': + '@biomejs/cli-win32-x64@1.9.4': optional: true '@coinbase/wallet-sdk@3.9.3': @@ -8744,7 +8752,7 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-native: 0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@metamask/sdk@0.29.2(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(utf-8-validate@5.0.10)': + '@metamask/sdk@0.29.3(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(utf-8-validate@5.0.10)': dependencies: '@metamask/onboarding': 1.0.1 '@metamask/providers': 16.1.0 @@ -9397,7 +9405,7 @@ snapshots: '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)': dependencies: '@safe-global/safe-gateway-typescript-sdk': 3.22.2 - viem: 2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + viem: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - typescript @@ -9779,17 +9787,17 @@ snapshots: loupe: 3.1.2 tinyrainbow: 1.2.0 - '@wagmi/connectors@5.2.0(@types/react@18.3.11)(@wagmi/core@2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10))': + '@wagmi/connectors@5.2.1(@types/react@18.3.11)(@wagmi/core@2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10))': dependencies: '@coinbase/wallet-sdk': 4.0.4 - '@metamask/sdk': 0.29.2(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(utf-8-validate@5.0.10) + '@metamask/sdk': 0.29.3(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(utf-8-validate@5.0.10) '@safe-global/safe-apps-provider': 0.18.3(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@wagmi/core': 2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + '@wagmi/core': 2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) '@walletconnect/ethereum-provider': 2.17.0(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10) '@walletconnect/modal': 2.7.0(@types/react@18.3.11)(react@18.3.1) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' - viem: 2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + viem: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -9817,11 +9825,11 @@ snapshots: - utf-8-validate - zod - '@wagmi/core@2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10))': + '@wagmi/core@2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10))': dependencies: eventemitter3: 5.0.1 mipd: 0.0.7(typescript@5.6.3) - viem: 2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + viem: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) zustand: 4.4.1(@types/react@18.3.11)(react@18.3.1) optionalDependencies: '@tanstack/query-core': 5.59.13 @@ -11302,10 +11310,10 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 - executooor-viem@1.3.3(evm-maths@7.0.0)(viem@2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)): + executooor-viem@1.3.3(evm-maths@7.0.0)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)): dependencies: evm-maths: 7.0.0 - viem: 2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + viem: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) exponential-backoff@3.1.1: {} @@ -13958,9 +13966,9 @@ snapshots: vary@1.1.2: {} - viem-deal@2.0.1(viem@2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)): + viem-deal@2.0.1(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)): dependencies: - viem: 2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + viem: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) viem@2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10): dependencies: @@ -13980,6 +13988,24 @@ snapshots: - utf-8-validate - zod + viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10): + dependencies: + '@adraffy/ens-normalize': 1.11.0 + '@noble/curves': 1.6.0 + '@noble/hashes': 1.5.0 + '@scure/bip32': 1.5.0 + '@scure/bip39': 1.4.0 + abitype: 1.0.6(typescript@5.6.3) + isows: 1.0.6(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + webauthn-p256: 0.0.10 + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + vite-node@2.1.3(@types/node@22.7.5)(terser@5.35.0): dependencies: cac: 6.7.14 @@ -14044,14 +14070,14 @@ snapshots: vlq@1.0.1: {} - wagmi@2.12.18(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)): + wagmi@2.12.19(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)): dependencies: '@tanstack/react-query': 5.59.15(react@18.3.1) - '@wagmi/connectors': 5.2.0(@types/react@18.3.11)(@wagmi/core@2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) - '@wagmi/core': 2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + '@wagmi/connectors': 5.2.1(@types/react@18.3.11)(@wagmi/core@2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + '@wagmi/core': 2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) react: 18.3.1 use-sync-external-store: 1.2.0(react@18.3.1) - viem: 2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + viem: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: From 8040b05d038a6e1d5e7c5947b2e1e425d7bbb7d3 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Fri, 18 Oct 2024 17:19:03 +0200 Subject: [PATCH 05/32] fix(morpho-ts): test update version --- packages/morpho-ts/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/morpho-ts/package.json b/packages/morpho-ts/package.json index 086558de..039c9d34 100644 --- a/packages/morpho-ts/package.json +++ b/packages/morpho-ts/package.json @@ -1,7 +1,7 @@ { "name": "@morpho-org/morpho-ts", "description": "TypeScript package to handle all things time & format-related.", - "version": "1.12.4", + "version": "1.12.5", "author": "Morpho Association ", "contributors": ["Rubilmax "], "repository": "github:morpho-org/sdks", From aa4004c31ce2b6f9c04517b3da42de516e6d327a Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Fri, 18 Oct 2024 17:45:19 +0200 Subject: [PATCH 06/32] ci(publish): tag on correct branch --- .github/workflows/publish.yml | 2 +- scripts/release/bumper.js | 2 ++ scripts/release/release.js | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index e9eb543f..31646343 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -64,7 +64,7 @@ jobs: working-directory: packages/${{ matrix.package }} if: steps.release.outputs.version - - run: gh release create ${{ steps.release.outputs.tag }} --notes '${{ steps.release.outputs.changelog }}' --title '${{ steps.release.outputs.tag }}' ${{ steps.release.outputs.channel == 'latest' && '--latest' || '--prerelease' }} + - run: gh release create ${{ steps.release.outputs.tag }} --target ${{ steps.release.outputs.branch }} --notes '${{ steps.release.outputs.changelog }}' --title '${{ steps.release.outputs.tag }}' ${{ steps.release.outputs.channel == 'latest' && '--latest' || '--prerelease' }} if: steps.release.outputs.version env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/scripts/release/bumper.js b/scripts/release/bumper.js index 9da7bab8..328a3804 100644 --- a/scripts/release/bumper.js +++ b/scripts/release/bumper.js @@ -16,6 +16,8 @@ export let commits; export const whatBump = async (_commits) => { commits = _commits; + console.log(commits); + if (commits.length === 0) return; let level = 2; diff --git a/scripts/release/release.js b/scripts/release/release.js index c0b68cbb..d391faad 100644 --- a/scripts/release/release.js +++ b/scripts/release/release.js @@ -1,6 +1,7 @@ import { setOutput } from "@actions/core"; import { writeChangelogString } from "conventional-changelog-writer"; import { + branch, channel, commits, lastTag, @@ -15,6 +16,7 @@ if (releaseType) { setOutput("tag", tag); setOutput("version", version); + setOutput("branch", branch); setOutput("channel", channel); setOutput( "changelog", From 0e14640976987be342987423a3c726f8f8f2cde7 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Fri, 18 Oct 2024 17:50:19 +0200 Subject: [PATCH 07/32] fix(publish): remove logs --- scripts/release/bumper.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/release/bumper.js b/scripts/release/bumper.js index 328a3804..9da7bab8 100644 --- a/scripts/release/bumper.js +++ b/scripts/release/bumper.js @@ -16,8 +16,6 @@ export let commits; export const whatBump = async (_commits) => { commits = _commits; - console.log(commits); - if (commits.length === 0) return; let level = 2; From b77cfd222c84620a2d50be72d8cfafe9999ec395 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Fri, 18 Oct 2024 17:53:13 +0200 Subject: [PATCH 08/32] style(package): bump version --- packages/morpho-ts/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/morpho-ts/package.json b/packages/morpho-ts/package.json index 039c9d34..24c3cc91 100644 --- a/packages/morpho-ts/package.json +++ b/packages/morpho-ts/package.json @@ -1,7 +1,7 @@ { "name": "@morpho-org/morpho-ts", "description": "TypeScript package to handle all things time & format-related.", - "version": "1.12.5", + "version": "2.0.0", "author": "Morpho Association ", "contributors": ["Rubilmax "], "repository": "github:morpho-org/sdks", From dadc64e97d8a88ebacfc1de562d14caedc28fe08 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Fri, 18 Oct 2024 17:54:47 +0200 Subject: [PATCH 09/32] style(package): bump version --- packages/blue-api-sdk/package.json | 2 +- packages/blue-sdk-ethers/package.json | 2 +- packages/blue-sdk-viem/package.json | 2 +- packages/blue-sdk-wagmi/package.json | 2 +- packages/blue-sdk/package.json | 2 +- packages/bundler-sdk-viem/package.json | 2 +- packages/liquidation-sdk-viem/package.json | 2 +- packages/morpho-test/package.json | 2 +- packages/simulation-sdk-wagmi/package.json | 2 +- packages/simulation-sdk/package.json | 2 +- packages/test-ethers/package.json | 2 +- packages/test-viem/package.json | 2 +- packages/test-wagmi/package.json | 2 +- packages/test/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/blue-api-sdk/package.json b/packages/blue-api-sdk/package.json index 106fa69b..23b1fe35 100644 --- a/packages/blue-api-sdk/package.json +++ b/packages/blue-api-sdk/package.json @@ -1,7 +1,7 @@ { "name": "@morpho-org/blue-api-sdk", "description": "GraphQL SDK that exports types from the [API's GraphQL schema](https://blue-api.morpho.org/graphql) and a useful Apollo cache controller.", - "version": "1.12.4", + "version": "2.0.0", "author": "Morpho Association ", "contributors": ["Rubilmax "], "repository": "github:morpho-org/sdks", diff --git a/packages/blue-sdk-ethers/package.json b/packages/blue-sdk-ethers/package.json index 496f2190..f2191e87 100644 --- a/packages/blue-sdk-ethers/package.json +++ b/packages/blue-sdk-ethers/package.json @@ -1,7 +1,7 @@ { "name": "@morpho-org/blue-sdk-ethers", "description": "Ethers-based augmentation of `@morpho-org/blue-sdk` that exports (and optionally injects) ethers-based fetch methods.", - "version": "1.12.4", + "version": "2.0.0", "author": "Morpho Association ", "license": "MIT", "type": "module", diff --git a/packages/blue-sdk-viem/package.json b/packages/blue-sdk-viem/package.json index 10c4a0e8..b5e3aace 100644 --- a/packages/blue-sdk-viem/package.json +++ b/packages/blue-sdk-viem/package.json @@ -1,7 +1,7 @@ { "name": "@morpho-org/blue-sdk-viem", "description": "Viem-based augmentation of `@morpho-org/blue-sdk` that exports (and optionally injects) viem-based fetch methods.", - "version": "1.12.4", + "version": "2.0.0", "author": "Morpho Association ", "contributors": ["Rubilmax "], "repository": "github:morpho-org/sdks", diff --git a/packages/blue-sdk-wagmi/package.json b/packages/blue-sdk-wagmi/package.json index 24e7da6f..9637a3b6 100644 --- a/packages/blue-sdk-wagmi/package.json +++ b/packages/blue-sdk-wagmi/package.json @@ -1,7 +1,7 @@ { "name": "@morpho-org/blue-sdk-wagmi", "description": "Wagmi-based package that exports Wagmi (React) hooks to fetch Morpho-related entities.", - "version": "1.12.4", + "version": "2.0.0", "author": "Morpho Association ", "contributors": ["Rubilmax "], "repository": "github:morpho-org/sdks", diff --git a/packages/blue-sdk/package.json b/packages/blue-sdk/package.json index 56c56fa8..1c707f13 100644 --- a/packages/blue-sdk/package.json +++ b/packages/blue-sdk/package.json @@ -1,7 +1,7 @@ { "name": "@morpho-org/blue-sdk", "description": "Framework-agnostic package that defines Morpho-related entity classes (such as `Market`, `Token`, `Vault`).", - "version": "1.12.4", + "version": "2.0.0", "author": "Morpho Association ", "contributors": ["Rubilmax "], "repository": "github:morpho-org/sdks", diff --git a/packages/bundler-sdk-viem/package.json b/packages/bundler-sdk-viem/package.json index f4d6a2ee..051f76eb 100644 --- a/packages/bundler-sdk-viem/package.json +++ b/packages/bundler-sdk-viem/package.json @@ -1,7 +1,7 @@ { "name": "@morpho-org/bundler-sdk-viem", "description": "Viem-based extension of `@morpho-org/simulation-sdk` that exports utilities to transform simple interactions on Morpho (such as `Blue_Borrow`) and Morpho Vaults (such as `MetaMorpho_Deposit`) into the required bundles (with ERC20 approvals, transfers, etc) to submit to the bundler onchain.", - "version": "1.12.4", + "version": "2.0.0", "author": "Morpho Association ", "contributors": ["Rubilmax "], "repository": "github:morpho-org/sdks", diff --git a/packages/liquidation-sdk-viem/package.json b/packages/liquidation-sdk-viem/package.json index b4dbca90..38e43ac7 100644 --- a/packages/liquidation-sdk-viem/package.json +++ b/packages/liquidation-sdk-viem/package.json @@ -1,7 +1,7 @@ { "name": "@morpho-org/liquidation-sdk-viem", "description": "Viem-based package that provides utilities to build viem-based liquidation bots on Morpho and examples using Flashbots and Morpho's GraphQL API.", - "version": "1.12.4", + "version": "2.0.0", "author": "Morpho Association ", "contributors": ["Rubilmax "], "repository": "github:morpho-org/sdks", diff --git a/packages/morpho-test/package.json b/packages/morpho-test/package.json index 236cd294..483a8959 100644 --- a/packages/morpho-test/package.json +++ b/packages/morpho-test/package.json @@ -1,7 +1,7 @@ { "name": "@morpho-org/morpho-test", "description": "Framework-agnostic extension of `@morpho-org/blue-sdk` that exports test fixtures useful for E2E tests on forks.", - "version": "1.12.4", + "version": "2.0.0", "author": "Morpho Association ", "contributors": ["Rubilmax "], "repository": "github:morpho-org/sdks", diff --git a/packages/simulation-sdk-wagmi/package.json b/packages/simulation-sdk-wagmi/package.json index 1ba67cf9..df54a355 100644 --- a/packages/simulation-sdk-wagmi/package.json +++ b/packages/simulation-sdk-wagmi/package.json @@ -1,7 +1,7 @@ { "name": "@morpho-org/simulation-sdk-wagmi", "description": "Wagmi-based extension of `@morpho-org/simulation-sdk` that exports Wagmi (React) hooks to fetch simulation states.", - "version": "1.12.4", + "version": "2.0.0", "author": "Morpho Association ", "contributors": ["Rubilmax "], "repository": "github:morpho-org/sdks", diff --git a/packages/simulation-sdk/package.json b/packages/simulation-sdk/package.json index 7106e0c9..f5ec3dce 100644 --- a/packages/simulation-sdk/package.json +++ b/packages/simulation-sdk/package.json @@ -1,7 +1,7 @@ { "name": "@morpho-org/simulation-sdk", "description": "Framework-agnostic package that defines methods to simulate interactions on Morpho (such as `Supply`, `Borrow`) and Morpho Vaults (such as `Deposit`, `Withdraw`).", - "version": "2.0.0-next.4", + "version": "2.0.0", "author": "Morpho Association ", "contributors": ["Rubilmax "], "repository": "github:morpho-org/sdks", diff --git a/packages/test-ethers/package.json b/packages/test-ethers/package.json index 37ce6f28..9856cf11 100644 --- a/packages/test-ethers/package.json +++ b/packages/test-ethers/package.json @@ -1,7 +1,7 @@ { "name": "@morpho-org/test-ethers", "description": "Ethers-based extension of `@morpho-org/test-viem` that injects a test Ethers wallet as a test fixture alongside viem's anvil client.", - "version": "1.12.4", + "version": "2.0.0", "author": "Morpho Association ", "type": "module", "main": "src/index.ts", diff --git a/packages/test-viem/package.json b/packages/test-viem/package.json index 5b6e8d94..d0bd54fb 100644 --- a/packages/test-viem/package.json +++ b/packages/test-viem/package.json @@ -1,7 +1,7 @@ { "name": "@morpho-org/test-viem", "description": "(Viem+vitest)-based package that defines utilities to spawn independent, concurrent anvil forks for each test, injecting the corresponding viem client as a test fixture.", - "version": "1.12.4", + "version": "2.0.0", "author": "Morpho Association ", "contributors": ["Rubilmax "], "repository": "github:morpho-org/sdks", diff --git a/packages/test-wagmi/package.json b/packages/test-wagmi/package.json index cbe5dae4..cd83f51c 100644 --- a/packages/test-wagmi/package.json +++ b/packages/test-wagmi/package.json @@ -1,7 +1,7 @@ { "name": "@morpho-org/test-wagmi", "description": "Wagmi-based extension of `@morpho-org/test-viem` that injects a test Wagmi config as a test fixture alongside viem's anvil client.", - "version": "1.12.4", + "version": "2.0.0", "author": "Morpho Association ", "type": "module", "main": "src/index.ts", diff --git a/packages/test/package.json b/packages/test/package.json index 3e4ad56e..3b00c215 100644 --- a/packages/test/package.json +++ b/packages/test/package.json @@ -1,7 +1,7 @@ { "name": "@morpho-org/test", "description": "Framework-agnostic package that exports utilities to build test fixtures and spawn anvil forks as child processes.", - "version": "1.12.4", + "version": "2.0.0", "author": "Morpho Association ", "type": "module", "main": "src/index.ts", From dabf506104f7d2df8bd051d8d414d4714c66de23 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Fri, 18 Oct 2024 18:49:36 +0200 Subject: [PATCH 10/32] refactor(market-config)!: rename to MarketParams --- packages/blue-api-sdk/src/converter.ts | 14 +- packages/blue-sdk-ethers/README.md | 10 +- .../src/augment/MarketConfig.ts | 12 -- .../src/augment/MarketParams.ts | 12 ++ packages/blue-sdk-ethers/src/augment/index.ts | 2 +- packages/blue-sdk-ethers/src/fetch/Market.ts | 22 ++-- .../{MarketConfig.ts => MarketParams.ts} | 10 +- .../blue-sdk-ethers/src/fetch/Position.ts | 4 +- packages/blue-sdk-ethers/src/fetch/index.ts | 2 +- .../blue-sdk-ethers/test/e2e/Market.test.ts | 18 +-- ...ketConfig.test.ts => MarketParams.test.ts} | 8 +- packages/blue-sdk-viem/README.md | 8 +- .../blue-sdk-viem/src/augment/MarketConfig.ts | 12 -- .../blue-sdk-viem/src/augment/MarketParams.ts | 12 ++ packages/blue-sdk-viem/src/augment/index.ts | 2 +- packages/blue-sdk-viem/src/fetch/Market.ts | 18 +-- .../{MarketConfig.ts => MarketParams.ts} | 10 +- packages/blue-sdk-viem/src/fetch/index.ts | 2 +- packages/blue-sdk-viem/test/Market.test.ts | 8 +- ...ketConfig.test.ts => MarketParams.test.ts} | 8 +- packages/blue-sdk-wagmi/README.md | 2 +- packages/blue-sdk-wagmi/src/hooks/index.ts | 4 +- ...{useMarketConfig.ts => useMarketParams.ts} | 32 ++--- ...seMarketConfigs.ts => useMarketsParams.ts} | 40 +++--- ...chMarketConfig.ts => fetchMarketParams.ts} | 34 ++--- packages/blue-sdk-wagmi/src/queries/index.ts | 2 +- .../test/unit/structuralSharing.test.ts | 10 +- packages/blue-sdk/README.md | 12 +- packages/blue-sdk/src/errors.ts | 2 +- packages/blue-sdk/src/market/Market.ts | 42 +++--- .../{MarketConfig.ts => MarketParams.ts} | 22 ++-- packages/blue-sdk/src/market/MarketUtils.ts | 28 ++-- packages/blue-sdk/src/market/index.ts | 2 +- packages/blue-sdk/src/vault/Vault.ts | 6 +- packages/blue-sdk/test/e2e/Market.test.ts | 56 ++++---- .../bundler-sdk-viem/src/BundlerAction.ts | 16 +-- packages/bundler-sdk-viem/src/actions.ts | 48 +++---- packages/bundler-sdk-viem/src/operations.ts | 6 +- .../bundler-sdk-viem/src/types/actions.ts | 22 ++-- packages/bundler-sdk-viem/test/helpers.ts | 18 +-- .../test/populateBundle.test.ts | 62 ++++----- .../examples/whitelisted-erc4626-1inch.ts | 28 ++-- .../whitelisted-erc4626-1inch.test.ts | 120 ++++++++--------- packages/morpho-test/src/fixtures/markets.ts | 64 ++++----- .../test/hooks/useSimulationState.test.ts | 2 +- .../simulation-sdk/src/SimulationState.ts | 2 +- .../src/handlers/blue/borrow.ts | 2 +- .../simulation-sdk/src/handlers/blue/repay.ts | 4 +- .../src/handlers/blue/supply.ts | 4 +- .../src/handlers/blue/supplyCollateral.ts | 2 +- .../src/handlers/blue/withdraw.ts | 2 +- .../src/handlers/blue/withdrawCollateral.ts | 2 +- .../test/SimulationState.test.ts | 4 +- packages/simulation-sdk/test/fixtures.ts | 124 +++++++++--------- .../handlers/blue/supplyCollateral.test.ts | 8 +- .../handlers/blue/withdrawCollateral.test.ts | 2 +- 56 files changed, 515 insertions(+), 515 deletions(-) delete mode 100644 packages/blue-sdk-ethers/src/augment/MarketConfig.ts create mode 100644 packages/blue-sdk-ethers/src/augment/MarketParams.ts rename packages/blue-sdk-ethers/src/fetch/{MarketConfig.ts => MarketParams.ts} (84%) rename packages/blue-sdk-ethers/test/e2e/{MarketConfig.test.ts => MarketParams.test.ts} (82%) delete mode 100644 packages/blue-sdk-viem/src/augment/MarketConfig.ts create mode 100644 packages/blue-sdk-viem/src/augment/MarketParams.ts rename packages/blue-sdk-viem/src/fetch/{MarketConfig.ts => MarketParams.ts} (83%) rename packages/blue-sdk-viem/test/{MarketConfig.test.ts => MarketParams.test.ts} (82%) rename packages/blue-sdk-wagmi/src/hooks/{useMarketConfig.ts => useMarketParams.ts} (61%) rename packages/blue-sdk-wagmi/src/hooks/{useMarketConfigs.ts => useMarketsParams.ts} (53%) rename packages/blue-sdk-wagmi/src/queries/{fetchMarketConfig.ts => fetchMarketParams.ts} (57%) rename packages/blue-sdk/src/market/{MarketConfig.ts => MarketParams.ts} (78%) diff --git a/packages/blue-api-sdk/src/converter.ts b/packages/blue-api-sdk/src/converter.ts index 2511f599..89cdb9df 100644 --- a/packages/blue-api-sdk/src/converter.ts +++ b/packages/blue-api-sdk/src/converter.ts @@ -3,7 +3,7 @@ import { AccrualVault, type Address, Market, - MarketConfig, + MarketParams, MathLib, Position, TokenWithPrice, @@ -41,14 +41,14 @@ export interface PartialBlueApiToken name?: BlueApiToken["name"]; } -export interface PartialBlueApiMarketConfig +export interface PartialBlueApiMarketParams extends Pick { collateralAsset: Maybe>; loanAsset: Pick; } export interface PartialBlueApiMarket - extends PartialBlueApiMarketConfig, + extends PartialBlueApiMarketParams, Pick { state: Maybe< Pick< @@ -173,8 +173,8 @@ export class BlueSdkConverter { ); } - public getMarketConfig(dto: PartialBlueApiMarketConfig) { - return new MarketConfig({ + public getMarketParams(dto: PartialBlueApiMarketParams) { + return new MarketParams({ collateralToken: this.options.parseAddress( dto.collateralAsset?.address ?? ZERO_ADDRESS, ), @@ -188,7 +188,7 @@ export class BlueSdkConverter { public getMarket(dto: PartialBlueApiMarket) { if (dto.state == null) return null; - const config = this.getMarketConfig(dto); + const params = this.getMarketParams(dto); const fee = this.options.parseNumber(dto.state.fee, 18); const price = dto.collateralPrice ?? 1n; @@ -201,7 +201,7 @@ export class BlueSdkConverter { : undefined; return new Market({ - config, + params, totalSupplyAssets: dto.state.supplyAssets, totalBorrowAssets: dto.state.borrowAssets, totalSupplyShares: dto.state.supplyShares, diff --git a/packages/blue-sdk-ethers/README.md b/packages/blue-sdk-ethers/README.md index 201c54fe..25ff03cd 100644 --- a/packages/blue-sdk-ethers/README.md +++ b/packages/blue-sdk-ethers/README.md @@ -44,7 +44,7 @@ Opt in classes augmentation to easily fetch an entire entity of the Morpho Blue import "@morpho-org/blue-sdk-ethers/lib/augment/AccrualPosition"; import "@morpho-org/blue-sdk-ethers/lib/augment/Holding"; import "@morpho-org/blue-sdk-ethers/lib/augment/Market"; -import "@morpho-org/blue-sdk-ethers/lib/augment/MarketConfig"; +import "@morpho-org/blue-sdk-ethers/lib/augment/MarketParams"; import "@morpho-org/blue-sdk-ethers/lib/augment/Position"; import "@morpho-org/blue-sdk-ethers/lib/augment/Token"; import "@morpho-org/blue-sdk-ethers/lib/augment/VaultConfig"; @@ -60,14 +60,14 @@ import "@morpho-org/blue-sdk-ethers/lib/augment"; ### Fetch the config of a specific market -Leverage the [`MarketConfig`](./src/market/MarketConfig.ts) class to fetch information on a given market's immutable configuration: +Leverage the [`MarketParams`](./src/market/MarketParams.ts) class to fetch information on a given market's immutable configuration: ```typescript import { MarketId } from "@morpho-org/blue-sdk"; -// /!\ Import MarketConfig from the augmentation file (or simply import the file) -import { MarketConfig } from "@morpho-org/blue-sdk-ethers/lib/augment/MarketConfig"; +// /!\ Import MarketParams from the augmentation file (or simply import the file) +import { MarketParams } from "@morpho-org/blue-sdk-ethers/lib/augment/MarketParams"; -const config = await MarketConfig.fetch( +const config = await MarketParams.fetch( "0xb323495f7e4148be5643a4ea4a8221eef163e4bccfdedc2a6f4696baacbc86cc" as MarketId, provider // Ethers provider. ); diff --git a/packages/blue-sdk-ethers/src/augment/MarketConfig.ts b/packages/blue-sdk-ethers/src/augment/MarketConfig.ts deleted file mode 100644 index f02d2b23..00000000 --- a/packages/blue-sdk-ethers/src/augment/MarketConfig.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { MarketConfig } from "@morpho-org/blue-sdk"; -import { fetchMarketConfig } from "../fetch/index.js"; - -declare module "@morpho-org/blue-sdk" { - namespace MarketConfig { - let fetch: typeof fetchMarketConfig; - } -} - -MarketConfig.fetch = fetchMarketConfig; - -export { MarketConfig }; diff --git a/packages/blue-sdk-ethers/src/augment/MarketParams.ts b/packages/blue-sdk-ethers/src/augment/MarketParams.ts new file mode 100644 index 00000000..019a04dc --- /dev/null +++ b/packages/blue-sdk-ethers/src/augment/MarketParams.ts @@ -0,0 +1,12 @@ +import { MarketParams } from "@morpho-org/blue-sdk"; +import { fetchMarketParams } from "../fetch/index.js"; + +declare module "@morpho-org/blue-sdk" { + namespace MarketParams { + let fetch: typeof fetchMarketParams; + } +} + +MarketParams.fetch = fetchMarketParams; + +export { MarketParams }; diff --git a/packages/blue-sdk-ethers/src/augment/index.ts b/packages/blue-sdk-ethers/src/augment/index.ts index db742505..9d96780c 100644 --- a/packages/blue-sdk-ethers/src/augment/index.ts +++ b/packages/blue-sdk-ethers/src/augment/index.ts @@ -1,6 +1,6 @@ export * from "./Holding.js"; export * from "./Position.js"; -export * from "./MarketConfig.js"; +export * from "./MarketParams.js"; export * from "./Market.js"; export * from "./Token.js"; export * from "./User.js"; diff --git a/packages/blue-sdk-ethers/src/fetch/Market.ts b/packages/blue-sdk-ethers/src/fetch/Market.ts index 6c947d73..0d57d2e4 100644 --- a/packages/blue-sdk-ethers/src/fetch/Market.ts +++ b/packages/blue-sdk-ethers/src/fetch/Market.ts @@ -8,12 +8,12 @@ import { import { ChainUtils, Market, - type MarketConfig, type MarketId, + type MarketParams, getChainAddresses, } from "@morpho-org/blue-sdk"; import type { FetchOptions } from "../types.js"; -import { fetchMarketConfig } from "./MarketConfig.js"; +import { fetchMarketParams } from "./MarketParams.js"; export async function fetchMarket( id: MarketId, @@ -24,13 +24,13 @@ export async function fetchMarket( chainId ?? (await runner.provider.getNetwork()).chainId, ); - const config = await fetchMarketConfig(id, runner, { chainId }); + const config = await fetchMarketParams(id, runner, { chainId }); return fetchMarketFromConfig(config, runner, { chainId, overrides }); } export async function fetchMarketFromConfig( - config: MarketConfig, + params: MarketParams, runner: { provider: Provider }, { chainId, overrides = {} }: FetchOptions = {}, ) { @@ -56,25 +56,25 @@ export async function fetchMarketFromConfig( morpho, // @ts-ignore incompatible commonjs type runner, - ).market(config.id, overrides), - config.oracle !== ZeroAddress + ).market(params.id, overrides), + params.oracle !== ZeroAddress ? BlueOracle__factory.connect( - config.oracle, + params.oracle, // @ts-ignore incompatible commonjs type runner, ).price(overrides) : 0n, - config.irm === adaptiveCurveIrm + params.irm === adaptiveCurveIrm ? await AdaptiveCurveIrm__factory.connect( - config.irm, + params.irm, // @ts-ignore incompatible commonjs type runner, - ).rateAtTarget(config.id, overrides) + ).rateAtTarget(params.id, overrides) : undefined, ]); return new Market({ - config, + params, totalSupplyAssets, totalBorrowAssets, totalSupplyShares, diff --git a/packages/blue-sdk-ethers/src/fetch/MarketConfig.ts b/packages/blue-sdk-ethers/src/fetch/MarketParams.ts similarity index 84% rename from packages/blue-sdk-ethers/src/fetch/MarketConfig.ts rename to packages/blue-sdk-ethers/src/fetch/MarketParams.ts index 55db88c0..7f51a64b 100644 --- a/packages/blue-sdk-ethers/src/fetch/MarketConfig.ts +++ b/packages/blue-sdk-ethers/src/fetch/MarketParams.ts @@ -5,19 +5,19 @@ import { type Address, type ChainId, ChainUtils, - MarketConfig, type MarketId, - UnknownMarketConfigError, + MarketParams, + UnknownMarketParamsError, _try, getChainAddresses, } from "@morpho-org/blue-sdk"; -export async function fetchMarketConfig( +export async function fetchMarketParams( id: MarketId, runner: { provider: Provider }, { chainId }: { chainId?: ChainId } = {}, ) { - let config = _try(() => MarketConfig.get(id), UnknownMarketConfigError); + let config = _try(() => MarketParams.get(id), UnknownMarketParamsError); if (!config) { chainId = ChainUtils.parseSupportedChainId( @@ -35,7 +35,7 @@ export async function fetchMarketConfig( blockTag: "latest", }); - config = new MarketConfig({ + config = new MarketParams({ lltv: marketParams.lltv, loanToken: marketParams.loanToken as Address, collateralToken: marketParams.collateralToken as Address, diff --git a/packages/blue-sdk-ethers/src/fetch/Position.ts b/packages/blue-sdk-ethers/src/fetch/Position.ts index b39a2f9d..ce6ceb67 100644 --- a/packages/blue-sdk-ethers/src/fetch/Position.ts +++ b/packages/blue-sdk-ethers/src/fetch/Position.ts @@ -5,8 +5,8 @@ import { AccrualPosition, type Address, ChainUtils, - type MarketConfig, type MarketId, + type MarketParams, Position, getChainAddresses, } from "@morpho-org/blue-sdk"; @@ -61,7 +61,7 @@ export async function fetchAccrualPosition( export async function fetchAccrualPositionFromConfig( user: Address, - config: MarketConfig, + config: MarketParams, runner: { provider: Provider }, options: FetchOptions = {}, ) { diff --git a/packages/blue-sdk-ethers/src/fetch/index.ts b/packages/blue-sdk-ethers/src/fetch/index.ts index d574c06b..1656a71c 100644 --- a/packages/blue-sdk-ethers/src/fetch/index.ts +++ b/packages/blue-sdk-ethers/src/fetch/index.ts @@ -1,6 +1,6 @@ export * from "./Holding.js"; export * from "./Position.js"; -export * from "./MarketConfig.js"; +export * from "./MarketParams.js"; export * from "./Market.js"; export * from "./Token.js"; export * from "./User.js"; diff --git a/packages/blue-sdk-ethers/test/e2e/Market.test.ts b/packages/blue-sdk-ethers/test/e2e/Market.test.ts index 0906f739..b9bbfc14 100644 --- a/packages/blue-sdk-ethers/test/e2e/Market.test.ts +++ b/packages/blue-sdk-ethers/test/e2e/Market.test.ts @@ -1,4 +1,4 @@ -import { ChainId, MarketConfig, addresses } from "@morpho-org/blue-sdk"; +import { ChainId, MarketParams, addresses } from "@morpho-org/blue-sdk"; import { markets } from "@morpho-org/morpho-test"; import { randomAddress } from "@morpho-org/test"; @@ -13,7 +13,7 @@ const { usdc_wstEth, usdc_idle, eth_wstEth } = markets[ChainId.EthMainnet]; describe("augment/Market", () => { test("should fetch market data", async ({ wallet }) => { const expectedData = new Market({ - config: usdc_wstEth, + params: usdc_wstEth, totalSupplyAssets: 32212092216793n, totalSupplyShares: 31693536738210306937n, totalBorrowAssets: 30448219939637n, @@ -31,7 +31,7 @@ describe("augment/Market", () => { test("should fetch price and rate if idle market", async ({ wallet }) => { const expectedData = new Market({ - config: usdc_idle, + params: usdc_idle, totalSupplyAssets: 0n, totalSupplyShares: 0n, totalBorrowAssets: 0n, @@ -57,13 +57,13 @@ describe("augment/Market", () => { functionName: "owner", }); - const config = new MarketConfig({ + const params = new MarketParams({ ...eth_wstEth, irm: randomAddress(), }); await client.setCode({ - address: config.irm, + address: params.irm, bytecode: (await client.getCode({ address: adaptiveCurveIrm, }))!, @@ -75,7 +75,7 @@ describe("augment/Market", () => { address: morpho, abi: blueAbi, functionName: "enableIrm", - args: [config.irm], + args: [params.irm], }); const timestamp = (await client.timestamp()) + 3n; @@ -86,11 +86,11 @@ describe("augment/Market", () => { address: morpho, abi: blueAbi, functionName: "createMarket", - args: [{ ...config }], + args: [{ ...params }], }); const expectedData = new Market({ - config, + params, totalSupplyAssets: 0n, totalSupplyShares: 0n, totalBorrowAssets: 0n, @@ -101,7 +101,7 @@ describe("augment/Market", () => { rateAtTarget: undefined, }); - const value = await Market.fetch(config.id, wallet); + const value = await Market.fetch(params.id, wallet); expect(value).toStrictEqual(expectedData); }); diff --git a/packages/blue-sdk-ethers/test/e2e/MarketConfig.test.ts b/packages/blue-sdk-ethers/test/e2e/MarketParams.test.ts similarity index 82% rename from packages/blue-sdk-ethers/test/e2e/MarketConfig.test.ts rename to packages/blue-sdk-ethers/test/e2e/MarketParams.test.ts index cd9bd78c..4d2d1556 100644 --- a/packages/blue-sdk-ethers/test/e2e/MarketConfig.test.ts +++ b/packages/blue-sdk-ethers/test/e2e/MarketParams.test.ts @@ -2,7 +2,7 @@ import { zeroAddress } from "viem"; import { ChainId, type MarketId, addresses } from "@morpho-org/blue-sdk"; -import { MarketConfig } from "../../src/augment/MarketConfig.js"; +import { MarketParams } from "../../src/augment/MarketParams.js"; import { test } from "./setup.js"; import { markets } from "@morpho-org/morpho-test"; @@ -10,9 +10,9 @@ import { describe, expect } from "vitest"; const { usdc_wstEth } = markets[ChainId.EthMainnet]; -describe("augment/MarketConfig", () => { +describe("augment/MarketParams", () => { test("should fetch config from cache", async ({ wallet }) => { - const market = await MarketConfig.fetch(usdc_wstEth.id, wallet); + const market = await MarketParams.fetch(usdc_wstEth.id, wallet); expect(market).toStrictEqual(usdc_wstEth); }); @@ -28,7 +28,7 @@ describe("augment/MarketConfig", () => { liquidationIncentiveFactor: 1150000000000000000n, }; - const market = await MarketConfig.fetch( + const market = await MarketParams.fetch( "0x58e212060645d18eab6d9b2af3d56fbc906a92ff5667385f616f662c70372284" as MarketId, wallet, ); diff --git a/packages/blue-sdk-viem/README.md b/packages/blue-sdk-viem/README.md index 2f37bd04..0d1c0f44 100644 --- a/packages/blue-sdk-viem/README.md +++ b/packages/blue-sdk-viem/README.md @@ -44,7 +44,7 @@ Opt in classes augmentation to easily fetch an entire entity of the Morpho Blue import "@morpho-org/blue-sdk-viem/lib/augment/AccrualPosition"; import "@morpho-org/blue-sdk-viem/lib/augment/Holding"; import "@morpho-org/blue-sdk-viem/lib/augment/Market"; -import "@morpho-org/blue-sdk-viem/lib/augment/MarketConfig"; +import "@morpho-org/blue-sdk-viem/lib/augment/MarketParams"; import "@morpho-org/blue-sdk-viem/lib/augment/Position"; import "@morpho-org/blue-sdk-viem/lib/augment/Token"; import "@morpho-org/blue-sdk-viem/lib/augment/VaultConfig"; @@ -60,14 +60,14 @@ import "@morpho-org/blue-sdk-viem/lib/augment"; ### Fetch the config of a specific market -Leverage the [`MarketConfig`](./src/market/MarketConfig.ts) class to fetch information on a given market's immutable configuration: +Leverage the [`MarketParams`](./src/market/MarketParams.ts) class to fetch information on a given market's immutable configuration: ```typescript import { MarketId } from "@morpho-org/blue-sdk"; // /!\ Import AccrualPosition from the augmentation file (or simply import the file) -import { MarketConfig } from "@morpho-org/blue-sdk-viem/lib/augment/MarketConfig"; +import { MarketParams } from "@morpho-org/blue-sdk-viem/lib/augment/MarketParams"; -const config = await MarketConfig.fetch( +const config = await MarketParams.fetch( "0xb323495f7e4148be5643a4ea4a8221eef163e4bccfdedc2a6f4696baacbc86cc" as MarketId, client // viem client. ); diff --git a/packages/blue-sdk-viem/src/augment/MarketConfig.ts b/packages/blue-sdk-viem/src/augment/MarketConfig.ts deleted file mode 100644 index f02d2b23..00000000 --- a/packages/blue-sdk-viem/src/augment/MarketConfig.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { MarketConfig } from "@morpho-org/blue-sdk"; -import { fetchMarketConfig } from "../fetch/index.js"; - -declare module "@morpho-org/blue-sdk" { - namespace MarketConfig { - let fetch: typeof fetchMarketConfig; - } -} - -MarketConfig.fetch = fetchMarketConfig; - -export { MarketConfig }; diff --git a/packages/blue-sdk-viem/src/augment/MarketParams.ts b/packages/blue-sdk-viem/src/augment/MarketParams.ts new file mode 100644 index 00000000..019a04dc --- /dev/null +++ b/packages/blue-sdk-viem/src/augment/MarketParams.ts @@ -0,0 +1,12 @@ +import { MarketParams } from "@morpho-org/blue-sdk"; +import { fetchMarketParams } from "../fetch/index.js"; + +declare module "@morpho-org/blue-sdk" { + namespace MarketParams { + let fetch: typeof fetchMarketParams; + } +} + +MarketParams.fetch = fetchMarketParams; + +export { MarketParams }; diff --git a/packages/blue-sdk-viem/src/augment/index.ts b/packages/blue-sdk-viem/src/augment/index.ts index d574c06b..1656a71c 100644 --- a/packages/blue-sdk-viem/src/augment/index.ts +++ b/packages/blue-sdk-viem/src/augment/index.ts @@ -1,6 +1,6 @@ export * from "./Holding.js"; export * from "./Position.js"; -export * from "./MarketConfig.js"; +export * from "./MarketParams.js"; export * from "./Market.js"; export * from "./Token.js"; export * from "./User.js"; diff --git a/packages/blue-sdk-viem/src/fetch/Market.ts b/packages/blue-sdk-viem/src/fetch/Market.ts index 273b891f..24d1b326 100644 --- a/packages/blue-sdk-viem/src/fetch/Market.ts +++ b/packages/blue-sdk-viem/src/fetch/Market.ts @@ -3,8 +3,8 @@ import { type Client, zeroAddress } from "viem"; import { ChainUtils, Market, - MarketConfig, type MarketId, + MarketParams, addresses, } from "@morpho-org/blue-sdk"; @@ -48,7 +48,7 @@ export async function fetchMarket( }); return new Market({ - config: new MarketConfig(marketParams), + params: new MarketParams(marketParams), totalSupplyAssets, totalBorrowAssets, totalSupplyShares, @@ -75,7 +75,7 @@ export async function fetchMarket( }, ); - const config = new MarketConfig({ + const params = new MarketParams({ loanToken, collateralToken, oracle, @@ -100,28 +100,28 @@ export async function fetchMarket( address: morpho, abi: blueAbi, functionName: "market", - args: [config.id], + args: [params.id], }), - config.oracle !== zeroAddress + params.oracle !== zeroAddress ? readContract(client, { ...parameters, - address: config.oracle, + address: params.oracle, abi: blueOracleAbi, functionName: "price", }) : 0n, - config.irm === adaptiveCurveIrm + params.irm === adaptiveCurveIrm ? await readContract(client, { ...parameters, address: adaptiveCurveIrm, abi: adaptiveCurveIrmAbi, functionName: "rateAtTarget", - args: [config.id], + args: [params.id], }) : undefined, ]); return new Market({ - config, + params, totalSupplyAssets, totalBorrowAssets, totalSupplyShares, diff --git a/packages/blue-sdk-viem/src/fetch/MarketConfig.ts b/packages/blue-sdk-viem/src/fetch/MarketParams.ts similarity index 83% rename from packages/blue-sdk-viem/src/fetch/MarketConfig.ts rename to packages/blue-sdk-viem/src/fetch/MarketParams.ts index 12e6efd8..4f4da1d3 100644 --- a/packages/blue-sdk-viem/src/fetch/MarketConfig.ts +++ b/packages/blue-sdk-viem/src/fetch/MarketParams.ts @@ -1,8 +1,8 @@ import { ChainUtils, - MarketConfig, type MarketId, - UnknownMarketConfigError, + MarketParams, + UnknownMarketParamsError, _try, addresses, } from "@morpho-org/blue-sdk"; @@ -11,12 +11,12 @@ import { getChainId, readContract } from "viem/actions"; import { blueAbi } from "../abis.js"; import type { FetchParameters } from "../types.js"; -export async function fetchMarketConfig( +export async function fetchMarketParams( id: MarketId, client: Client, { chainId }: Pick = {}, ) { - let config = _try(() => MarketConfig.get(id), UnknownMarketConfigError); + let config = _try(() => MarketParams.get(id), UnknownMarketParamsError); if (!config) { chainId = ChainUtils.parseSupportedChainId( @@ -37,7 +37,7 @@ export async function fetchMarketConfig( }, ); - config = new MarketConfig({ + config = new MarketParams({ loanToken, collateralToken, oracle, diff --git a/packages/blue-sdk-viem/src/fetch/index.ts b/packages/blue-sdk-viem/src/fetch/index.ts index d574c06b..1656a71c 100644 --- a/packages/blue-sdk-viem/src/fetch/index.ts +++ b/packages/blue-sdk-viem/src/fetch/index.ts @@ -1,6 +1,6 @@ export * from "./Holding.js"; export * from "./Position.js"; -export * from "./MarketConfig.js"; +export * from "./MarketParams.js"; export * from "./Market.js"; export * from "./Token.js"; export * from "./User.js"; diff --git a/packages/blue-sdk-viem/test/Market.test.ts b/packages/blue-sdk-viem/test/Market.test.ts index 3eed4f41..df033ba2 100644 --- a/packages/blue-sdk-viem/test/Market.test.ts +++ b/packages/blue-sdk-viem/test/Market.test.ts @@ -1,4 +1,4 @@ -import { ChainId, MarketConfig, addresses } from "@morpho-org/blue-sdk"; +import { ChainId, MarketParams, addresses } from "@morpho-org/blue-sdk"; import { markets } from "@morpho-org/morpho-test"; import { randomAddress } from "@morpho-org/test"; @@ -13,7 +13,7 @@ const { usdc_wstEth, usdc_idle, eth_wstEth } = markets[ChainId.EthMainnet]; describe("augment/Market", () => { test("should fetch market data", async ({ client }) => { const expectedData = new Market({ - config: usdc_wstEth, + params: usdc_wstEth, totalSupplyAssets: 32212092216793n, totalSupplyShares: 31693536738210306937n, totalBorrowAssets: 30448219939637n, @@ -31,7 +31,7 @@ describe("augment/Market", () => { test("should fetch price and rate if idle market", async ({ client }) => { const expectedData = new Market({ - config: usdc_idle, + params: usdc_idle, totalSupplyAssets: 0n, totalSupplyShares: 0n, totalBorrowAssets: 0n, @@ -56,7 +56,7 @@ describe("augment/Market", () => { functionName: "owner", }); - const config = new MarketConfig({ + const config = new MarketParams({ ...eth_wstEth, irm: randomAddress(), }); diff --git a/packages/blue-sdk-viem/test/MarketConfig.test.ts b/packages/blue-sdk-viem/test/MarketParams.test.ts similarity index 82% rename from packages/blue-sdk-viem/test/MarketConfig.test.ts rename to packages/blue-sdk-viem/test/MarketParams.test.ts index 63d5ff6c..e22d8a73 100644 --- a/packages/blue-sdk-viem/test/MarketConfig.test.ts +++ b/packages/blue-sdk-viem/test/MarketParams.test.ts @@ -2,7 +2,7 @@ import { zeroAddress } from "viem"; import { ChainId, type MarketId, addresses } from "@morpho-org/blue-sdk"; -import { MarketConfig } from "../src/augment/MarketConfig.js"; +import { MarketParams } from "../src/augment/MarketParams.js"; import { test } from "./setup.js"; import { markets } from "@morpho-org/morpho-test"; @@ -10,9 +10,9 @@ import { describe, expect } from "vitest"; const { usdc_wstEth } = markets[ChainId.EthMainnet]; -describe("augment/MarketConfig", () => { +describe("augment/MarketParams", () => { test("should fetch config from cache", async ({ client }) => { - const market = await MarketConfig.fetch(usdc_wstEth.id, client); + const market = await MarketParams.fetch(usdc_wstEth.id, client); expect(market).toStrictEqual(usdc_wstEth); }); @@ -28,7 +28,7 @@ describe("augment/MarketConfig", () => { liquidationIncentiveFactor: 1150000000000000000n, }; - const market = await MarketConfig.fetch( + const market = await MarketParams.fetch( "0x58e212060645d18eab6d9b2af3d56fbc906a92ff5667385f616f662c70372284" as MarketId, client, ); diff --git a/packages/blue-sdk-wagmi/README.md b/packages/blue-sdk-wagmi/README.md index cbf8e104..64c1e1b0 100644 --- a/packages/blue-sdk-wagmi/README.md +++ b/packages/blue-sdk-wagmi/README.md @@ -44,7 +44,7 @@ export function Component({ marketId }: { marketId?: MarketId }) { return (

- {market?.config.loanToken} / {market?.config.collateralToken} + {market?.params.loanToken} / {market?.params.collateralToken}

); } diff --git a/packages/blue-sdk-wagmi/src/hooks/index.ts b/packages/blue-sdk-wagmi/src/hooks/index.ts index 1d527887..1c812620 100644 --- a/packages/blue-sdk-wagmi/src/hooks/index.ts +++ b/packages/blue-sdk-wagmi/src/hooks/index.ts @@ -1,6 +1,6 @@ export * from "./useChainId.js"; export * from "./useMarket.js"; -export * from "./useMarketConfig.js"; +export * from "./useMarketParams.js"; export * from "./useToken.js"; export * from "./useUser.js"; export * from "./useVault.js"; @@ -10,7 +10,7 @@ export * from "./usePosition.js"; export * from "./useHolding.js"; export * from "./useVaultMarketConfig.js"; export * from "./useMarkets.js"; -export * from "./useMarketConfigs.js"; +export * from "./useMarketsParams.js"; export * from "./useTokens.js"; export * from "./useUsers.js"; export * from "./useVaults.js"; diff --git a/packages/blue-sdk-wagmi/src/hooks/useMarketConfig.ts b/packages/blue-sdk-wagmi/src/hooks/useMarketParams.ts similarity index 61% rename from packages/blue-sdk-wagmi/src/hooks/useMarketConfig.ts rename to packages/blue-sdk-wagmi/src/hooks/useMarketParams.ts index 76f9aa44..c253bd98 100644 --- a/packages/blue-sdk-wagmi/src/hooks/useMarketConfig.ts +++ b/packages/blue-sdk-wagmi/src/hooks/useMarketParams.ts @@ -1,45 +1,45 @@ -import type { MarketConfig } from "@morpho-org/blue-sdk"; +import type { MarketParams } from "@morpho-org/blue-sdk"; import type { ReadContractErrorType } from "viem"; import { type Config, type ResolvedRegister, useConfig } from "wagmi"; import { type UseQueryReturnType, useQuery } from "wagmi/query"; import { - type FetchMarketConfigParameters, - type FetchMarketConfigQueryKey, - fetchMarketConfigQueryOptions, -} from "../queries/fetchMarketConfig.js"; + type FetchMarketParamsParameters, + type FetchMarketParamsQueryKey, + fetchMarketParamsQueryOptions, +} from "../queries/fetchMarketParams.js"; import type { ConfigParameter, QueryParameter } from "../types/index.js"; import { mergeDeepEqual } from "../utils/index.js"; import { useChainId } from "./useChainId.js"; -export type UseMarketConfigParameters< +export type UseMarketParamsParameters< config extends Config = Config, - selectData = MarketConfig, -> = FetchMarketConfigParameters & + selectData = MarketParams, +> = FetchMarketParamsParameters & ConfigParameter & QueryParameter< - MarketConfig, + MarketParams, ReadContractErrorType, selectData, - FetchMarketConfigQueryKey + FetchMarketParamsQueryKey >; -export type UseMarketConfigReturnType = +export type UseMarketParamsReturnType = UseQueryReturnType; -export function useMarketConfig< +export function useMarketParams< config extends Config = ResolvedRegister["config"], - selectData = MarketConfig, + selectData = MarketParams, >({ query = {}, ...parameters -}: UseMarketConfigParameters< +}: UseMarketParamsParameters< config, selectData ->): UseMarketConfigReturnType { +>): UseMarketParamsReturnType { const config = useConfig(parameters); const chainId = useChainId(parameters); - const options = fetchMarketConfigQueryOptions(config, { + const options = fetchMarketParamsQueryOptions(config, { ...parameters, chainId, }); diff --git a/packages/blue-sdk-wagmi/src/hooks/useMarketConfigs.ts b/packages/blue-sdk-wagmi/src/hooks/useMarketsParams.ts similarity index 53% rename from packages/blue-sdk-wagmi/src/hooks/useMarketConfigs.ts rename to packages/blue-sdk-wagmi/src/hooks/useMarketsParams.ts index d59a7c7a..c1dda4c6 100644 --- a/packages/blue-sdk-wagmi/src/hooks/useMarketConfigs.ts +++ b/packages/blue-sdk-wagmi/src/hooks/useMarketsParams.ts @@ -1,59 +1,59 @@ -import type { MarketConfig, MarketId } from "@morpho-org/blue-sdk"; +import type { MarketId, MarketParams } from "@morpho-org/blue-sdk"; import { type UseQueryResult, useQueries } from "@tanstack/react-query"; import type { ReadContractErrorType, UnionOmit } from "viem"; import { type Config, type ResolvedRegister, useConfig } from "wagmi"; import { combineIndexedQueries } from "../queries/combineIndexedQueries.js"; -import { fetchMarketConfigQueryOptions } from "../queries/fetchMarketConfig.js"; -import type { MarketConfigParameters } from "../queries/fetchMarketConfig.js"; +import { fetchMarketParamsQueryOptions } from "../queries/fetchMarketParams.js"; +import type { MarketParamsParameters } from "../queries/fetchMarketParams.js"; import { mergeDeepEqual } from "../utils/index.js"; import { useChainId } from "./useChainId.js"; -import type { UseMarketConfigParameters } from "./useMarketConfig.js"; +import type { UseMarketParamsParameters } from "./useMarketParams.js"; -export type FetchMarketConfigsParameters = { +export type FetchMarketsParamsParameters = { marketIds: Iterable; }; -export type UseMarketConfigsParameters< +export type UseMarketsParamsParameters< config extends Config = Config, - TCombinedResult = ReturnType, -> = FetchMarketConfigsParameters & - UnionOmit, keyof MarketConfigParameters> & { + TCombinedResult = ReturnType, +> = FetchMarketsParamsParameters & + UnionOmit, keyof MarketParamsParameters> & { combine?: ( - results: UseQueryResult[], + results: UseQueryResult[], ) => TCombinedResult; }; -export type UseMarketConfigsReturnType< - TCombinedResult = ReturnType, +export type UseMarketsParamsReturnType< + TCombinedResult = ReturnType, > = TCombinedResult; -export const combineMarketConfigs = combineIndexedQueries< - MarketConfig, +export const combineMarketsParams = combineIndexedQueries< + MarketParams, [MarketId], ReadContractErrorType >((market) => [market.id]); -export function useMarketConfigs< +export function useMarketsParams< config extends Config = ResolvedRegister["config"], - TCombinedResult = ReturnType, + TCombinedResult = ReturnType, >({ marketIds, // biome-ignore lint/suspicious/noExplicitAny: compatible default type - combine = combineMarketConfigs as any, + combine = combineMarketsParams as any, query = {}, ...parameters -}: UseMarketConfigsParameters< +}: UseMarketsParamsParameters< config, TCombinedResult ->): UseMarketConfigsReturnType { +>): UseMarketsParamsReturnType { const config = useConfig(parameters); const chainId = useChainId(parameters); return useQueries({ queries: Array.from(new Set(marketIds), (marketId) => ({ ...query, - ...fetchMarketConfigQueryOptions(config, { + ...fetchMarketParamsQueryOptions(config, { ...parameters, marketId, chainId, diff --git a/packages/blue-sdk-wagmi/src/queries/fetchMarketConfig.ts b/packages/blue-sdk-wagmi/src/queries/fetchMarketParams.ts similarity index 57% rename from packages/blue-sdk-wagmi/src/queries/fetchMarketConfig.ts rename to packages/blue-sdk-wagmi/src/queries/fetchMarketParams.ts index ef5e3c69..db97373d 100644 --- a/packages/blue-sdk-wagmi/src/queries/fetchMarketConfig.ts +++ b/packages/blue-sdk-wagmi/src/queries/fetchMarketParams.ts @@ -1,7 +1,7 @@ -import type { MarketConfig } from "@morpho-org/blue-sdk"; +import type { MarketParams } from "@morpho-org/blue-sdk"; import { type FetchParameters, - fetchMarketConfig, + fetchMarketParams, } from "@morpho-org/blue-sdk-viem"; import type { QueryOptions } from "@tanstack/query-core"; import type { ReadContractErrorType } from "viem"; @@ -9,14 +9,14 @@ import type { Config } from "wagmi"; import { hashFn } from "wagmi/query"; import type { MarketParameters } from "./fetchMarket.js"; -export type MarketConfigParameters = MarketParameters; +export type MarketParamsParameters = MarketParameters; -export type FetchMarketConfigParameters = Partial & +export type FetchMarketParamsParameters = Partial & Pick; -export function fetchMarketConfigQueryOptions( +export function fetchMarketParamsQueryOptions( config: config, - parameters: FetchMarketConfigParameters, + parameters: FetchMarketParamsParameters, ) { return { // TODO: Support `signal` once Viem actions allow passthrough @@ -25,34 +25,34 @@ export function fetchMarketConfigQueryOptions( const { marketId, chainId } = queryKey[1]; if (!marketId) throw Error("marketId is required"); - return fetchMarketConfig(marketId, config.getClient({ chainId }), { + return fetchMarketParams(marketId, config.getClient({ chainId }), { chainId, }); }, - queryKey: fetchMarketConfigQueryKey(parameters), + queryKey: fetchMarketParamsQueryKey(parameters), queryKeyHashFn: hashFn, // for bigint support } as const satisfies QueryOptions< - MarketConfig, + MarketParams, ReadContractErrorType, - MarketConfig, - FetchMarketConfigQueryKey + MarketParams, + FetchMarketParamsQueryKey >; } -export function fetchMarketConfigQueryKey({ +export function fetchMarketParamsQueryKey({ marketId, chainId, -}: FetchMarketConfigParameters) { +}: FetchMarketParamsParameters) { return [ - "fetchMarketConfig", + "fetchMarketParams", // Ignore all other irrelevant parameters. { marketId, chainId, - } as FetchMarketConfigParameters, + } as FetchMarketParamsParameters, ] as const; } -export type FetchMarketConfigQueryKey = ReturnType< - typeof fetchMarketConfigQueryKey +export type FetchMarketParamsQueryKey = ReturnType< + typeof fetchMarketParamsQueryKey >; diff --git a/packages/blue-sdk-wagmi/src/queries/index.ts b/packages/blue-sdk-wagmi/src/queries/index.ts index 5c0785aa..53d58d33 100644 --- a/packages/blue-sdk-wagmi/src/queries/index.ts +++ b/packages/blue-sdk-wagmi/src/queries/index.ts @@ -1,5 +1,5 @@ export * from "./fetchMarket.js"; -export * from "./fetchMarketConfig.js"; +export * from "./fetchMarketParams.js"; export * from "./fetchToken.js"; export * from "./fetchUser.js"; export * from "./fetchVault.js"; diff --git a/packages/blue-sdk-wagmi/test/unit/structuralSharing.test.ts b/packages/blue-sdk-wagmi/test/unit/structuralSharing.test.ts index ce2578a7..60cd556b 100644 --- a/packages/blue-sdk-wagmi/test/unit/structuralSharing.test.ts +++ b/packages/blue-sdk-wagmi/test/unit/structuralSharing.test.ts @@ -1,11 +1,11 @@ -import { Market, MarketConfig } from "@morpho-org/blue-sdk"; +import { Market, MarketParams } from "@morpho-org/blue-sdk"; import { replaceEqualDeep } from "@tanstack/query-core"; import { describe, expect } from "vitest"; import { mergeDeepEqual } from "../../src/index.js"; import { test } from "../e2e/setup.js"; const prevMarket = new Market({ - config: new MarketConfig({ + params: new MarketParams({ collateralToken: "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0", irm: "0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC", lltv: 860000000000000000n, @@ -23,7 +23,7 @@ const prevMarket = new Market({ }); const newMarket = new Market({ - config: new MarketConfig({ + params: new MarketParams({ collateralToken: "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0", irm: "0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC", lltv: 860000000000000000n, @@ -71,7 +71,7 @@ describe("structuralSharing", () => { const merged = mergeDeepEqual(prevMarket, newMarket); expect(merged).not.toBe(prevMarket); - expect(merged.config).toBe(prevMarket.config); + expect(merged.params).toBe(prevMarket.params); expect(Object.getPrototypeOf(merged)).toBe( Object.getPrototypeOf(prevMarket), ); @@ -91,7 +91,7 @@ describe("structuralSharing", () => { const merged = mergeDeepEqual([prevMarket], [newMarket])[0]!; expect(merged).not.toBe(prevMarket); - expect(merged.config).toBe(prevMarket.config); + expect(merged.params).toBe(prevMarket.params); expect(Object.getPrototypeOf(merged)).toBe( Object.getPrototypeOf(prevMarket), ); diff --git a/packages/blue-sdk/README.md b/packages/blue-sdk/README.md index df4be7e1..ebf81152 100644 --- a/packages/blue-sdk/README.md +++ b/packages/blue-sdk/README.md @@ -23,7 +23,7 @@ Framework-agnostic package that defines Morpho-related entity classes: -- [**`MarketConfig`**](./src/market/MarketConfig.ts): represents the immutable configuration of a market on Morpho +- [**`MarketParams`**](./src/market/MarketParams.ts): represents the immutable configuration of a market on Morpho - [**`Market`**](./src/market/Market.ts): represents the state of a market on Morpho - [**`Token`**](./src/token/Token.ts): represents a ERC20 token - [**`User`**](./src/user/User.ts): represents a user of Morpho @@ -46,12 +46,12 @@ yarn add @morpho-org/blue-sdk ### Instance of the immutable configuration of a specific market -Leverage the [`MarketConfig`](./src/market/MarketConfig.ts) class to manipulate a given market's immutable configuration: +Leverage the [`MarketParams`](./src/market/MarketParams.ts) class to manipulate a given market's immutable configuration: ```typescript -import { MarketConfig } from "@morpho-org/blue-sdk"; +import { MarketParams } from "@morpho-org/blue-sdk"; -const config = new MarketConfig({ +const config = new MarketParams({ loanToken: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // WETH collateralToken: "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0", // wstETH oracle: "0x2a01EB9496094dA03c4E364Def50f5aD1280AD72", @@ -67,11 +67,11 @@ config.liquidationIncentiveFactor; // e.g. 1_090000000000000000n (109%). Leverage the [`Market`](./src/market/Market.ts) class to manipulate a specific market: ```typescript -import { Market } from "@morpho-org/blue-sdk"; +import { Market, MarketParams } from "@morpho-org/blue-sdk"; import { Time } from "@morpho-org/morpho-ts"; const market = new Market({ - config: new MarketConfig({ + config: new MarketParams({ loanToken: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // WETH collateralToken: "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0", // wstETH oracle: "0x2a01EB9496094dA03c4E364Def50f5aD1280AD72", diff --git a/packages/blue-sdk/src/errors.ts b/packages/blue-sdk/src/errors.ts index 3c8571d1..6ae3289f 100644 --- a/packages/blue-sdk/src/errors.ts +++ b/packages/blue-sdk/src/errors.ts @@ -14,7 +14,7 @@ export class UnknownTokenPriceError extends UnknownDataError { } } -export class UnknownMarketConfigError extends UnknownDataError { +export class UnknownMarketParamsError extends UnknownDataError { constructor(public readonly marketId: MarketId) { super(`unknown config for market ${marketId}`); } diff --git a/packages/blue-sdk/src/market/Market.ts b/packages/blue-sdk/src/market/Market.ts index 38f13576..cf7d71a7 100644 --- a/packages/blue-sdk/src/market/Market.ts +++ b/packages/blue-sdk/src/market/Market.ts @@ -7,7 +7,7 @@ import { } from "../math/index.js"; import type { BigIntish } from "../types.js"; -import type { MarketConfig } from "./MarketConfig.js"; +import type { MarketParams } from "./MarketParams.js"; import { MarketUtils } from "./MarketUtils.js"; export enum CapacityLimitReason { @@ -40,7 +40,7 @@ export interface MaxPositionCapacities { } export interface InputMarket { - config: MarketConfig; + params: MarketParams; totalSupplyAssets: bigint; totalBorrowAssets: bigint; totalSupplyShares: bigint; @@ -56,9 +56,9 @@ export interface InputMarket { */ export class Market implements InputMarket { /** - * The market's config. + * The market's params. */ - public readonly config: MarketConfig; + public readonly params: MarketParams; /** * The amount of loan assets supplied in total on the market. @@ -98,7 +98,7 @@ export class Market implements InputMarket { public rateAtTarget?: bigint; constructor({ - config, + params, totalSupplyAssets, totalBorrowAssets, totalSupplyShares, @@ -108,7 +108,7 @@ export class Market implements InputMarket { price, rateAtTarget, }: InputMarket) { - this.config = config; + this.params = params; this.totalSupplyAssets = totalSupplyAssets; this.totalBorrowAssets = totalBorrowAssets; this.totalSupplyShares = totalSupplyShares; @@ -124,14 +124,14 @@ export class Market implements InputMarket { * The market's hex-encoded id, defined as the hash of the market params. */ get id() { - return this.config.id; + return this.params.id; } /** * Whether the market satisfies the canonical definition of an idle market (i.e. collateral token is the zero address). */ get isIdle() { - return this.config.collateralToken === ZERO_ADDRESS; + return this.params.collateralToken === ZERO_ADDRESS; } /** @@ -390,10 +390,10 @@ export class Market implements InputMarket { */ public getMaxBorrowAssets( collateral: bigint, - { maxLtv = this.config.lltv }: MaxBorrowOptions = {}, + { maxLtv = this.params.lltv }: MaxBorrowOptions = {}, ) { return MarketUtils.getMaxBorrowAssets(collateral, this, { - lltv: MathLib.min(maxLtv, this.config.lltv), + lltv: MathLib.min(maxLtv, this.params.lltv), }); } @@ -405,7 +405,7 @@ export class Market implements InputMarket { collateral: bigint; borrowShares: bigint; }) { - return MarketUtils.getMaxBorrowableAssets(position, this, this.config); + return MarketUtils.getMaxBorrowableAssets(position, this, this.params); } /** @@ -416,7 +416,7 @@ export class Market implements InputMarket { return MarketUtils.getLiquidationSeizedAssets( repaidShares, this, - this.config, + this.params, ); } @@ -428,7 +428,7 @@ export class Market implements InputMarket { return MarketUtils.getLiquidationRepaidShares( seizedAssets, this, - this.config, + this.params, ); } @@ -440,7 +440,7 @@ export class Market implements InputMarket { collateral: bigint; borrowShares: bigint; }) { - return MarketUtils.getSeizableCollateral(position, this, this.config); + return MarketUtils.getSeizableCollateral(position, this, this.params); } /** @@ -452,10 +452,10 @@ export class Market implements InputMarket { collateral: bigint; borrowShares: bigint; }, - { maxLtv = this.config.lltv }: MaxWithdrawCollateralOptions = {}, + { maxLtv = this.params.lltv }: MaxWithdrawCollateralOptions = {}, ) { return MarketUtils.getWithdrawableCollateral(position, this, { - lltv: MathLib.min(maxLtv, this.config.lltv), + lltv: MathLib.min(maxLtv, this.params.lltv), }); } @@ -464,7 +464,7 @@ export class Market implements InputMarket { * @param position The borrow position to check. */ public isHealthy(position: { collateral: bigint; borrowShares: bigint }) { - return MarketUtils.isHealthy(position, this, this.config); + return MarketUtils.isHealthy(position, this, this.params); } /** @@ -475,7 +475,7 @@ export class Market implements InputMarket { collateral: bigint; borrowShares: bigint; }) { - return MarketUtils.getLiquidationPrice(position, this, this.config); + return MarketUtils.getLiquidationPrice(position, this, this.params); } /** @@ -491,7 +491,7 @@ export class Market implements InputMarket { return MarketUtils.getPriceVariationToLiquidationPrice( position, this, - this.config, + this.params, ); } @@ -503,7 +503,7 @@ export class Market implements InputMarket { collateral: bigint; borrowShares: bigint; }) { - return MarketUtils.getHealthFactor(position, this, this.config); + return MarketUtils.getHealthFactor(position, this, this.params); } /** @@ -522,7 +522,7 @@ export class Market implements InputMarket { collateral: bigint; borrowShares: bigint; }) { - return MarketUtils.getBorrowCapacityUsage(position, this, this.config); + return MarketUtils.getBorrowCapacityUsage(position, this, this.params); } /** diff --git a/packages/blue-sdk/src/market/MarketConfig.ts b/packages/blue-sdk/src/market/MarketParams.ts similarity index 78% rename from packages/blue-sdk/src/market/MarketConfig.ts rename to packages/blue-sdk/src/market/MarketParams.ts index 41a10a14..43d8940e 100644 --- a/packages/blue-sdk/src/market/MarketConfig.ts +++ b/packages/blue-sdk/src/market/MarketParams.ts @@ -1,10 +1,10 @@ import { ZERO_ADDRESS } from "@morpho-org/morpho-ts"; -import { UnknownMarketConfigError } from "../errors.js"; +import { UnknownMarketParamsError } from "../errors.js"; import type { Address, BigIntish, MarketId } from "../types.js"; import { MarketUtils } from "./MarketUtils.js"; -export interface MarketParams { +export interface InputMarketParams { loanToken: Address; collateralToken: Address; oracle: Address; @@ -15,26 +15,26 @@ export interface MarketParams { /** * Represents a market's configuration (also called market params). */ -export class MarketConfig implements MarketParams { - private static readonly _CACHE: Record = {}; +export class MarketParams implements InputMarketParams { + private static readonly _CACHE: Record = {}; /** * Returns the previously cached market config for the given id, if any. - * @throws {UnknownMarketConfigError} If no market config is cached. + * @throws {UnknownMarketParamsError} If no market config is cached. */ static get(id: MarketId) { - const marketConfig = MarketConfig._CACHE[id]; + const marketParams = MarketParams._CACHE[id]; - if (!marketConfig) throw new UnknownMarketConfigError(id); + if (!marketParams) throw new UnknownMarketParamsError(id); - return marketConfig; + return marketParams; } /** * Returns the canonical idle market configuration for the given loan token. */ static idle(token: Address) { - return new MarketConfig({ + return new MarketParams({ collateralToken: ZERO_ADDRESS, loanToken: token, oracle: ZERO_ADDRESS, @@ -80,7 +80,7 @@ export class MarketConfig implements MarketParams { // Cached because lltv is readonly. public readonly liquidationIncentiveFactor: bigint; - constructor(params: MarketParams) { + constructor(params: InputMarketParams) { const { collateralToken, loanToken, oracle, irm, lltv } = params; this.collateralToken = collateralToken; @@ -93,6 +93,6 @@ export class MarketConfig implements MarketParams { this.liquidationIncentiveFactor = MarketUtils.getLiquidationIncentiveFactor(params); - MarketConfig._CACHE[this.id] = this; + MarketParams._CACHE[this.id] = this; } } diff --git a/packages/blue-sdk/src/market/MarketUtils.ts b/packages/blue-sdk/src/market/MarketUtils.ts index 75c81f34..04b70d33 100644 --- a/packages/blue-sdk/src/market/MarketUtils.ts +++ b/packages/blue-sdk/src/market/MarketUtils.ts @@ -9,7 +9,7 @@ import { import { MathLib, type RoundingDirection, SharesMath } from "../math/index.js"; import type { BigIntish, MarketId } from "../types.js"; -import type { MarketParams } from "./MarketConfig.js"; +import type { InputMarketParams } from "./MarketParams.js"; /** * Namespace of utility functions to ease market-related calculations. @@ -19,7 +19,7 @@ export namespace MarketUtils { * Returns the id of a market based on its params. * @param market The market params. */ - export function getMarketId(market: MarketParams) { + export function getMarketId(market: InputMarketParams) { return `0x${keccak256( `0x${ market.loanToken.substring(2).toLowerCase().padStart(64, "0") + @@ -261,10 +261,10 @@ export namespace MarketUtils { totalBorrowShares: BigIntish; price: BigIntish; }, - marketConfig: { lltv: BigIntish }, + marketParams: { lltv: BigIntish }, ) { return MathLib.zeroFloorSub( - getMaxBorrowAssets(collateral, market, marketConfig), + getMaxBorrowAssets(collateral, market, marketParams), toBorrowAssets(borrowShares, market), ); } @@ -366,10 +366,10 @@ export namespace MarketUtils { totalBorrowShares: BigIntish; price: BigIntish; }, - marketConfig: { lltv: BigIntish }, + marketParams: { lltv: BigIntish }, ) { return ( - getMaxBorrowAssets(collateral, market, marketConfig) >= + getMaxBorrowAssets(collateral, market, marketParams) >= toBorrowAssets(borrowShares, market) ); } @@ -388,13 +388,13 @@ export namespace MarketUtils { totalBorrowAssets: BigIntish; totalBorrowShares: BigIntish; }, - marketConfig: { lltv: BigIntish }, + marketParams: { lltv: BigIntish }, ) { borrowShares = BigInt(borrowShares); market.totalBorrowShares = BigInt(market.totalBorrowShares); if (borrowShares === 0n || market.totalBorrowShares === 0n) return null; - const collateralPower = getCollateralPower(collateral, marketConfig); + const collateralPower = getCollateralPower(collateral, marketParams); if (collateralPower === 0n) return MathLib.MAX_UINT_256; const borrowAssets = toBorrowAssets(borrowShares, market); @@ -414,7 +414,7 @@ export namespace MarketUtils { totalBorrowShares: BigIntish; price: BigIntish; }, - marketConfig: { lltv: BigIntish }, + marketParams: { lltv: BigIntish }, ) { market.price = BigInt(market.price); if (market.price === 0n) return null; @@ -422,7 +422,7 @@ export namespace MarketUtils { const liquidationPrice = getLiquidationPrice( position, market, - marketConfig, + marketParams, ); if (liquidationPrice == null) return null; @@ -439,7 +439,7 @@ export namespace MarketUtils { totalBorrowShares: BigIntish; price: BigIntish; }, - marketConfig: { lltv: BigIntish }, + marketParams: { lltv: BigIntish }, ) { borrowShares = BigInt(borrowShares); market.totalBorrowShares = BigInt(market.totalBorrowShares); @@ -451,7 +451,7 @@ export namespace MarketUtils { const maxBorrowAssets = getMaxBorrowAssets( collateral, market, - marketConfig, + marketParams, ); return MathLib.wDivDown(maxBorrowAssets, borrowAssets); @@ -488,9 +488,9 @@ export namespace MarketUtils { totalBorrowShares: BigIntish; price: BigIntish; }, - marketConfig: { lltv: BigIntish }, + marketParams: { lltv: BigIntish }, ) { - const hf = getHealthFactor(position, market, marketConfig); + const hf = getHealthFactor(position, market, marketParams); if (hf === null) return null; if (hf === 0n) return MathLib.MAX_UINT_256; diff --git a/packages/blue-sdk/src/market/index.ts b/packages/blue-sdk/src/market/index.ts index dd5f9ee4..a181aeba 100644 --- a/packages/blue-sdk/src/market/index.ts +++ b/packages/blue-sdk/src/market/index.ts @@ -1,3 +1,3 @@ export * from "./MarketUtils.js"; -export * from "./MarketConfig.js"; +export * from "./MarketParams.js"; export * from "./Market.js"; diff --git a/packages/blue-sdk/src/vault/Vault.ts b/packages/blue-sdk/src/vault/Vault.ts index 2e38b2f3..c19077c1 100644 --- a/packages/blue-sdk/src/vault/Vault.ts +++ b/packages/blue-sdk/src/vault/Vault.ts @@ -216,7 +216,7 @@ export class AccrualVault extends Vault implements InputAccrualVault { this.collateralAllocations = new Map(); for (const { marketId, position } of this.allocations.values()) { - const address = position.market.config.collateralToken; + const address = position.market.params.collateralToken; let exposure = this.collateralAllocations.get(address); if (!exposure) @@ -231,8 +231,8 @@ export class AccrualVault extends Vault implements InputAccrualVault { }), ); - exposure.lltvs.add(position.market.config.lltv); - exposure.oracles.add(position.market.config.oracle); + exposure.lltvs.add(position.market.params.lltv); + exposure.oracles.add(position.market.params.oracle); exposure.markets.add(marketId); exposure.proportion += this.getAllocationProportion(marketId); } diff --git a/packages/blue-sdk/test/e2e/Market.test.ts b/packages/blue-sdk/test/e2e/Market.test.ts index 56043f8b..0d934959 100644 --- a/packages/blue-sdk/test/e2e/Market.test.ts +++ b/packages/blue-sdk/test/e2e/Market.test.ts @@ -1,14 +1,14 @@ import { Time } from "@morpho-org/morpho-ts"; import { parseUnits } from "viem"; import { describe, expect } from "vitest"; -import { ChainId, Market, MarketConfig, addresses } from "../../src/index.js"; +import { ChainId, Market, MarketParams, addresses } from "../../src/index.js"; import { adaptiveCurveIrmAbi, blueAbi, blueOracleAbi } from "./abis.js"; import { test } from "./setup.js"; const { morpho, usdc, wstEth, adaptiveCurveIrm } = addresses[ChainId.EthMainnet]; -const config = new MarketConfig({ +const params = new MarketParams({ // USDC(wstETH, 86%, Chainlink, AdaptiveCurve) loanToken: usdc, collateralToken: wstEth, @@ -21,25 +21,25 @@ describe("Market", () => { test("should borrow borrowable assets", async ({ client }) => { const collateral = parseUnits("1", 18); await client.deal({ - erc20: config.collateralToken, + erc20: params.collateralToken, amount: collateral, }); await client.approve({ - address: config.collateralToken, + address: params.collateralToken, args: [morpho, collateral], }); await client.writeContract({ abi: blueAbi, address: morpho, functionName: "supplyCollateral", - args: [config, collateral, client.account.address, "0x"], + args: [params, collateral, client.account.address, "0x"], }); await client.writeContract({ abi: blueAbi, address: morpho, functionName: "borrow", args: [ - config, + params, parseUnits("1", 6), 0n, client.account.address, @@ -60,11 +60,11 @@ describe("Market", () => { abi: blueAbi, address: morpho, functionName: "market", - args: [config.id], + args: [params.id], }); const market = new Market({ - config, + params, totalSupplyAssets, totalSupplyShares, totalBorrowAssets, @@ -73,14 +73,14 @@ describe("Market", () => { fee, price: await client.readContract({ abi: blueOracleAbi, - address: config.oracle, + address: params.oracle, functionName: "price", }), rateAtTarget: await client.readContract({ abi: adaptiveCurveIrmAbi, - address: config.irm, + address: params.irm, functionName: "rateAtTarget", - args: [config.id], + args: [params.id], }), }).accrueInterest(timestamp); @@ -90,7 +90,7 @@ describe("Market", () => { abi: blueAbi, address: morpho, functionName: "position", - args: [config.id, client.account.address], + args: [params.id, client.account.address], }); const maxBorrowable = market.getMaxBorrowableAssets({ @@ -104,7 +104,7 @@ describe("Market", () => { address: morpho, functionName: "borrow", args: [ - config, + params, maxBorrowable + 10n, 0n, client.account.address, @@ -118,7 +118,7 @@ describe("Market", () => { address: morpho, functionName: "borrow", args: [ - config, + params, maxBorrowable, 0n, client.account.address, @@ -136,25 +136,25 @@ describe("Market", () => { }) => { const collateral = parseUnits("10000000000", 18); await client.deal({ - erc20: config.collateralToken, + erc20: params.collateralToken, amount: collateral, }); await client.approve({ - address: config.collateralToken, + address: params.collateralToken, args: [morpho, collateral], }); await client.writeContract({ abi: blueAbi, address: morpho, functionName: "supplyCollateral", - args: [config, collateral, client.account.address, "0x"], + args: [params, collateral, client.account.address, "0x"], }); await client.writeContract({ abi: blueAbi, address: morpho, functionName: "borrow", args: [ - config, + params, parseUnits("1", 6), 0n, client.account.address, @@ -175,11 +175,11 @@ describe("Market", () => { abi: blueAbi, address: morpho, functionName: "market", - args: [config.id], + args: [params.id], }); const market = new Market({ - config, + params, totalSupplyAssets, totalSupplyShares, totalBorrowAssets, @@ -188,14 +188,14 @@ describe("Market", () => { fee, price: await client.readContract({ abi: blueOracleAbi, - address: config.oracle, + address: params.oracle, functionName: "price", }), rateAtTarget: await client.readContract({ abi: adaptiveCurveIrmAbi, - address: config.irm, + address: params.irm, functionName: "rateAtTarget", - args: [config.id], + args: [params.id], }), }).accrueInterest(timestamp); @@ -203,7 +203,7 @@ describe("Market", () => { abi: blueAbi, address: morpho, functionName: "position", - args: [config.id, client.account.address], + args: [params.id, client.account.address], }); const maxBorrowable = market.getMaxBorrowableAssets({ @@ -212,18 +212,18 @@ describe("Market", () => { }); await client.deal({ - erc20: config.loanToken, + erc20: params.loanToken, amount: maxBorrowable, }); await client.approve({ - address: config.loanToken, + address: params.loanToken, args: [morpho, maxBorrowable], }); await client.writeContract({ abi: blueAbi, address: morpho, functionName: "supply", - args: [config, maxBorrowable, 0n, client.account.address, "0x"], + args: [params, maxBorrowable, 0n, client.account.address, "0x"], }); await client.setNextBlockTimestamp({ timestamp }); @@ -233,7 +233,7 @@ describe("Market", () => { address: morpho, functionName: "borrow", args: [ - config, + params, maxBorrowable, 0n, client.account.address, diff --git a/packages/bundler-sdk-viem/src/BundlerAction.ts b/packages/bundler-sdk-viem/src/BundlerAction.ts index e1f09c37..bb9a5c4a 100644 --- a/packages/bundler-sdk-viem/src/BundlerAction.ts +++ b/packages/bundler-sdk-viem/src/BundlerAction.ts @@ -27,7 +27,7 @@ import { BundlerErrors } from "./errors.js"; import type { Action, Authorization, - MarketParams, + InputMarketParams, Permit2PermitSingle, ReallocationWithdrawal, } from "./types/index.js"; @@ -621,7 +621,7 @@ export namespace BundlerAction { * @param callbackCalls The array of calls to execute inside Morpho Blue's `onMorphoSupply` callback. */ export function morphoSupply( - market: MarketParams, + market: InputMarketParams, assets: bigint, shares: bigint, slippageAmount: bigint, @@ -650,7 +650,7 @@ export namespace BundlerAction { * @param callbackCalls The array of calls to execute inside Morpho Blue's `onMorphoSupplyCollateral` callback. */ export function morphoSupplyCollateral( - market: MarketParams, + market: InputMarketParams, assets: bigint, onBehalf: Address, callbackCalls: BundlerCall[], @@ -676,7 +676,7 @@ export namespace BundlerAction { * @param receiver The address to send borrowed tokens to. */ export function morphoBorrow( - market: MarketParams, + market: InputMarketParams, assets: bigint, shares: bigint, slippageAmount: bigint, @@ -699,7 +699,7 @@ export namespace BundlerAction { * @param callbackCalls The array of calls to execute inside Morpho Blue's `onMorphoSupply` callback. */ export function morphoRepay( - market: MarketParams, + market: InputMarketParams, assets: bigint, shares: bigint, slippageAmount: bigint, @@ -729,7 +729,7 @@ export namespace BundlerAction { * @param receiver The address to send withdrawn tokens to. */ export function morphoWithdraw( - market: MarketParams, + market: InputMarketParams, assets: bigint, shares: bigint, slippageAmount: bigint, @@ -749,7 +749,7 @@ export namespace BundlerAction { * @param receiver The address to send withdrawn tokens to. */ export function morphoWithdrawCollateral( - market: MarketParams, + market: InputMarketParams, assets: bigint, receiver: Address, ): BundlerCall { @@ -795,7 +795,7 @@ export namespace BundlerAction { vault: Address, value: bigint, withdrawals: ReallocationWithdrawal[], - supplyMarketParams: MarketParams, + supplyMarketParams: InputMarketParams, ): BundlerCall { return encodeFunctionData({ abi: morphoBundlerAbi, diff --git a/packages/bundler-sdk-viem/src/actions.ts b/packages/bundler-sdk-viem/src/actions.ts index 04e8790c..7466e8e3 100644 --- a/packages/bundler-sdk-viem/src/actions.ts +++ b/packages/bundler-sdk-viem/src/actions.ts @@ -595,20 +595,20 @@ export const encodeOperation = ( case "Blue_Supply": { const { id, assets = 0n, shares = 0n, onBehalf } = operation.args; - const { config } = dataBefore.getMarket(id); + const { params } = dataBefore.getMarket(id); // Already takes slippage into account. const slippageAmount = shares === 0n ? dataAfter.getPosition(onBehalf, id).supplyShares - dataBefore.getPosition(onBehalf, id).supplyShares - : dataAfter.getHolding(sender, config.loanToken).balance - - dataBefore.getHolding(sender, config.loanToken).balance; + : dataAfter.getHolding(sender, params.loanToken).balance - + dataBefore.getHolding(sender, params.loanToken).balance; actions.push({ type: "morphoSupply", args: [ - config, + params, assets, shares, slippageAmount, @@ -628,19 +628,19 @@ export const encodeOperation = ( receiver, } = operation.args; - const { config } = dataBefore.getMarket(id); + const { params } = dataBefore.getMarket(id); // Already takes slippage into account. const slippageAmount = shares === 0n ? dataBefore.getPosition(onBehalf, id).supplyShares - dataAfter.getPosition(onBehalf, id).supplyShares - : dataBefore.getHolding(sender, config.loanToken).balance - - dataAfter.getHolding(sender, config.loanToken).balance; + : dataBefore.getHolding(sender, params.loanToken).balance - + dataAfter.getHolding(sender, params.loanToken).balance; actions.push({ type: "morphoWithdraw", - args: [config, assets, shares, slippageAmount, receiver], + args: [params, assets, shares, slippageAmount, receiver], }); break; @@ -654,19 +654,19 @@ export const encodeOperation = ( receiver, } = operation.args; - const { config } = dataBefore.getMarket(id); + const { params } = dataBefore.getMarket(id); // Already takes slippage into account. const slippageAmount = shares === 0n ? dataAfter.getPosition(onBehalf, id).borrowShares - dataBefore.getPosition(onBehalf, id).borrowShares - : dataAfter.getHolding(sender, config.loanToken).balance - - dataBefore.getHolding(sender, config.loanToken).balance; + : dataAfter.getHolding(sender, params.loanToken).balance - + dataBefore.getHolding(sender, params.loanToken).balance; actions.push({ type: "morphoBorrow", - args: [config, assets, shares, slippageAmount, receiver], + args: [params, assets, shares, slippageAmount, receiver], }); break; @@ -674,20 +674,20 @@ export const encodeOperation = ( case "Blue_Repay": { const { id, assets = 0n, shares = 0n, onBehalf } = operation.args; - const { config } = dataBefore.getMarket(id); + const { params } = dataBefore.getMarket(id); // Already takes slippage into account. const slippageAmount = shares === 0n ? dataBefore.getPosition(onBehalf, id).borrowShares - dataAfter.getPosition(onBehalf, id).borrowShares - : dataBefore.getHolding(sender, config.loanToken).balance - - dataAfter.getHolding(sender, config.loanToken).balance; + : dataBefore.getHolding(sender, params.loanToken).balance - + dataAfter.getHolding(sender, params.loanToken).balance; actions.push({ type: "morphoRepay", args: [ - config, + params, assets, shares, slippageAmount, @@ -701,12 +701,12 @@ export const encodeOperation = ( case "Blue_SupplyCollateral": { const { id, assets, onBehalf } = operation.args; - const { config } = dataBefore.getMarket(id); + const { params } = dataBefore.getMarket(id); - if (convexWrapperTokens[chainId].has(config.collateralToken)) { + if (convexWrapperTokens[chainId].has(params.collateralToken)) { actions.push({ type: "erc20WrapperDepositFor", - args: [config.collateralToken, assets], + args: [params.collateralToken, assets], }); break; @@ -714,7 +714,7 @@ export const encodeOperation = ( actions.push({ type: "morphoSupplyCollateral", - args: [config, assets, onBehalf, callbackBundle?.actions ?? []], + args: [params, assets, onBehalf, callbackBundle?.actions ?? []], }); break; @@ -722,11 +722,11 @@ export const encodeOperation = ( case "Blue_WithdrawCollateral": { const { id, assets, receiver } = operation.args; - const { config } = dataBefore.getMarket(id); + const { params } = dataBefore.getMarket(id); actions.push({ type: "morphoWithdrawCollateral", - args: [config, assets, receiver], + args: [params, assets, receiver], }); break; @@ -806,10 +806,10 @@ export const encodeOperation = ( address, fee, withdrawals.map(({ id, assets }) => ({ - marketParams: dataBefore.getMarket(id).config, + marketParams: dataBefore.getMarket(id).params, amount: assets, })), - dataBefore.getMarket(supplyMarketId).config, + dataBefore.getMarket(supplyMarketId).params, ], }); diff --git a/packages/bundler-sdk-viem/src/operations.ts b/packages/bundler-sdk-viem/src/operations.ts index 09623b7d..32ea62c9 100644 --- a/packages/bundler-sdk-viem/src/operations.ts +++ b/packages/bundler-sdk-viem/src/operations.ts @@ -293,7 +293,7 @@ export const populateSubBundle = ( } = {}; const supplyTargetUtilization = - publicAllocatorOptions?.supplyTargetUtilization?.[market.config.id] ?? + publicAllocatorOptions?.supplyTargetUtilization?.[market.params.id] ?? DEFAULT_SUPPLY_TARGET_UTILIZATION; if ( @@ -667,10 +667,10 @@ export const finalizeBundle = ( switch (operation.type) { case "Blue_Borrow": case "Blue_Withdraw": - token = startData.getMarket(operation.args.id).config.loanToken; + token = startData.getMarket(operation.args.id).params.loanToken; break; case "Blue_WithdrawCollateral": - token = startData.getMarket(operation.args.id).config.collateralToken; + token = startData.getMarket(operation.args.id).params.collateralToken; break; case "MetaMorpho_Withdraw": token = startData.getVault(operation.address).asset; diff --git a/packages/bundler-sdk-viem/src/types/actions.ts b/packages/bundler-sdk-viem/src/types/actions.ts index edd569cc..86d3827e 100644 --- a/packages/bundler-sdk-viem/src/types/actions.ts +++ b/packages/bundler-sdk-viem/src/types/actions.ts @@ -7,11 +7,11 @@ import type { Transport, } from "viem"; -import type { Address, MarketConfig } from "@morpho-org/blue-sdk"; +import type { Address, MarketParams } from "@morpho-org/blue-sdk"; import type { SimulationResult } from "@morpho-org/simulation-sdk"; -export type MarketParams = Pick< - MarketConfig, +export type InputMarketParams = Pick< + MarketParams, "loanToken" | "collateralToken" | "oracle" | "irm" | "lltv" >; @@ -24,7 +24,7 @@ export interface Authorization { } export interface ReallocationWithdrawal { - marketParams: MarketParams; + marketParams: InputMarketParams; amount: bigint; } @@ -116,7 +116,7 @@ export interface ActionArgs { skipRevert?: boolean, ]; morphoSupply: [ - market: MarketParams, + market: InputMarketParams, assets: bigint, shares: bigint, slippageAmount: bigint, @@ -124,20 +124,20 @@ export interface ActionArgs { onMorphoSupply: Action[], ]; morphoSupplyCollateral: [ - market: MarketParams, + market: InputMarketParams, assets: bigint, onBehalf: Address, onMorphoSupplyCollateral: Action[], ]; morphoBorrow: [ - market: MarketParams, + market: InputMarketParams, assets: bigint, shares: bigint, slippageAmount: bigint, receiver: Address, ]; morphoRepay: [ - market: MarketParams, + market: InputMarketParams, assets: bigint, shares: bigint, slippageAmount: bigint, @@ -145,14 +145,14 @@ export interface ActionArgs { onMorphoRepay: Action[], ]; morphoWithdraw: [ - market: MarketParams, + market: InputMarketParams, assets: bigint, shares: bigint, slippageAmount: bigint, receiver: Address, ]; morphoWithdrawCollateral: [ - market: MarketParams, + market: InputMarketParams, assets: bigint, receiver: Address, ]; @@ -164,7 +164,7 @@ export interface ActionArgs { vault: Address, value: bigint, withdrawals: ReallocationWithdrawal[], - supplyMarket: MarketParams, + supplyMarket: InputMarketParams, ]; /* Universal Rewards Distributor */ diff --git a/packages/bundler-sdk-viem/test/helpers.ts b/packages/bundler-sdk-viem/test/helpers.ts index dd87ebe4..0be032a7 100644 --- a/packages/bundler-sdk-viem/test/helpers.ts +++ b/packages/bundler-sdk-viem/test/helpers.ts @@ -1,7 +1,7 @@ import { type Address, - MarketConfig, - UnknownMarketConfigError, + MarketParams, + UnknownMarketParamsError, VaultConfig, getChainAddresses, getUnwrappedToken, @@ -57,7 +57,7 @@ export const donate = abi: blueAbi, functionName: "supply", args: [ - data.getMarket(data.getVault(vault).withdrawQueue[0]!).config, + data.getMarket(data.getVault(vault).withdrawQueue[0]!).params, donation, 0n, vault, @@ -114,15 +114,15 @@ export const setupBundle = async ( operation.type !== "Blue_SetAuthorization" ) { try { - const marketConfig = MarketConfig.get(operation.args.id); + const marketParams = MarketParams.get(operation.args.id); - if (marketConfig.loanToken !== zeroAddress) - tokens.add(marketConfig.loanToken); + if (marketParams.loanToken !== zeroAddress) + tokens.add(marketParams.loanToken); - if (marketConfig.collateralToken !== zeroAddress) - tokens.add(marketConfig.collateralToken); + if (marketParams.collateralToken !== zeroAddress) + tokens.add(marketParams.collateralToken); } catch (error) { - if (!(error instanceof UnknownMarketConfigError)) throw error; + if (!(error instanceof UnknownMarketParamsError)) throw error; } } diff --git a/packages/bundler-sdk-viem/test/populateBundle.test.ts b/packages/bundler-sdk-viem/test/populateBundle.test.ts index 2bbce424..7148f504 100644 --- a/packages/bundler-sdk-viem/test/populateBundle.test.ts +++ b/packages/bundler-sdk-viem/test/populateBundle.test.ts @@ -1,7 +1,7 @@ import { ChainId, DEFAULT_SLIPPAGE_TOLERANCE, - MarketConfig, + MarketParams, MathLib, NATIVE_ADDRESS, addresses, @@ -627,7 +627,7 @@ describe("populateBundle", () => { }); await client.deal({ erc20: usdt, amount }); - const marketConfig = new MarketConfig({ + const marketParams = new MarketParams({ loanToken: zeroAddress, collateralToken: bbUsdt.address, lltv: 0n, @@ -638,7 +638,7 @@ describe("populateBundle", () => { address: morpho, abi: blueAbi, functionName: "createMarket", - args: [marketConfig], + args: [marketParams], }); const block = await client.getBlock(); @@ -646,7 +646,7 @@ describe("populateBundle", () => { const { result } = await renderHook(config, () => useSimulationState({ marketIds: [ - marketConfig.id, + marketParams.id, usdt_wstEth.id, usdt_idle.id, usdt_wbtc.id, @@ -681,7 +681,7 @@ describe("populateBundle", () => { sender: client.account.address, address: morpho, args: { - id: marketConfig.id, + id: marketParams.id, assets: maxUint256, onBehalf: client.account.address, }, @@ -744,7 +744,7 @@ describe("populateBundle", () => { sender: bundler, address: morpho, args: { - id: marketConfig.id, + id: marketParams.id, assets: maxUint256, onBehalf: client.account.address, }, @@ -756,7 +756,7 @@ describe("populateBundle", () => { const { collateral } = await fetchPosition( client.account.address, - marketConfig.id, + marketParams.id, client, ); expect(format.number.of(collateral, 18)).toBeCloseTo( @@ -787,7 +787,7 @@ describe("populateBundle", () => { }); await client.deal({ erc20: usdt, amount }); - const marketConfig = new MarketConfig({ + const marketParams = new MarketParams({ loanToken: zeroAddress, collateralToken: bbUsdt.address, lltv: 0n, @@ -798,7 +798,7 @@ describe("populateBundle", () => { address: morpho, abi: blueAbi, functionName: "createMarket", - args: [marketConfig], + args: [marketParams], }); const block = await client.getBlock(); @@ -806,7 +806,7 @@ describe("populateBundle", () => { const { result } = await renderHook(config, () => useSimulationState({ marketIds: [ - marketConfig.id, + marketParams.id, usdt_wstEth.id, usdt_idle.id, usdt_wbtc.id, @@ -841,7 +841,7 @@ describe("populateBundle", () => { sender: client.account.address, address: morpho, args: { - id: marketConfig.id, + id: marketParams.id, assets: shares, onBehalf: client.account.address, }, @@ -904,7 +904,7 @@ describe("populateBundle", () => { sender: bundler, address: morpho, args: { - id: marketConfig.id, + id: marketParams.id, assets: shares, onBehalf: client.account.address, }, @@ -934,7 +934,7 @@ describe("populateBundle", () => { const { collateral } = await fetchPosition( client.account.address, - marketConfig.id, + marketParams.id, client, ); expect(collateral).toBe(shares); @@ -3072,7 +3072,7 @@ describe("populateBundle", () => { }); await client.deal({ erc20: usdt, amount }); - const marketConfig = new MarketConfig({ + const marketParams = new MarketParams({ loanToken: zeroAddress, collateralToken: bbUsdt.address, lltv: 0n, @@ -3083,7 +3083,7 @@ describe("populateBundle", () => { address: morpho, abi: blueAbi, functionName: "createMarket", - args: [marketConfig], + args: [marketParams], }); const block = await client.getBlock(); @@ -3091,7 +3091,7 @@ describe("populateBundle", () => { const { result } = await renderHook(config, () => useSimulationState({ marketIds: [ - marketConfig.id, + marketParams.id, usdt_wstEth.id, usdt_idle.id, usdt_wbtc.id, @@ -3129,7 +3129,7 @@ describe("populateBundle", () => { sender: client.account.address, address: morpho, args: { - id: marketConfig.id, + id: marketParams.id, assets: maxUint256, onBehalf: client.account.address, }, @@ -3197,7 +3197,7 @@ describe("populateBundle", () => { sender: bundler, address: morpho, args: { - id: marketConfig.id, + id: marketParams.id, assets: maxUint256, onBehalf: client.account.address, }, @@ -3209,7 +3209,7 @@ describe("populateBundle", () => { const { collateral } = await fetchPosition( client.account.address, - marketConfig.id, + marketParams.id, client, ); expect(format.number.of(collateral, 18)).toBeCloseTo( @@ -3240,7 +3240,7 @@ describe("populateBundle", () => { }); await client.deal({ erc20: usdt, amount }); - const marketConfig = new MarketConfig({ + const marketParams = new MarketParams({ loanToken: zeroAddress, collateralToken: bbUsdt.address, lltv: 0n, @@ -3251,7 +3251,7 @@ describe("populateBundle", () => { address: morpho, abi: blueAbi, functionName: "createMarket", - args: [marketConfig], + args: [marketParams], }); const block = await client.getBlock(); @@ -3259,7 +3259,7 @@ describe("populateBundle", () => { const { result } = await renderHook(config, () => useSimulationState({ marketIds: [ - marketConfig.id, + marketParams.id, usdt_wstEth.id, usdt_idle.id, usdt_wbtc.id, @@ -3297,7 +3297,7 @@ describe("populateBundle", () => { sender: client.account.address, address: morpho, args: { - id: marketConfig.id, + id: marketParams.id, assets: shares, onBehalf: client.account.address, }, @@ -3362,7 +3362,7 @@ describe("populateBundle", () => { sender: bundler, address: morpho, args: { - id: marketConfig.id, + id: marketParams.id, assets: shares, onBehalf: client.account.address, }, @@ -3392,7 +3392,7 @@ describe("populateBundle", () => { const { collateral } = await fetchPosition( client.account.address, - marketConfig.id, + marketParams.id, client, ); expect(collateral).toBe(shares); @@ -4951,7 +4951,7 @@ describe("populateBundle", () => { test[ChainId.BaseMainnet]( "should wrap then supply aUSDC", async ({ client, config }) => { - const marketConfig = new MarketConfig({ + const marketParams = new MarketParams({ collateralToken: wNative, loanToken: verUsdc, oracle: "0xFEa2D58cEfCb9fcb597723c6bAE66fFE4193aFE4", @@ -4963,7 +4963,7 @@ describe("populateBundle", () => { address: morpho, abi: blueAbi, functionName: "createMarket", - args: [marketConfig], + args: [marketParams], }); const whitelisted = "0x53753098E2660AbD4834A3eD713D11AC1123421A"; @@ -4979,7 +4979,7 @@ describe("populateBundle", () => { const { result } = await renderHook(config, () => useSimulationState({ - marketIds: [marketConfig.id], + marketIds: [marketParams.id], users: [whitelisted, bundler], tokens: [usdc, verUsdc, wNative], vaults: [], @@ -5008,7 +5008,7 @@ describe("populateBundle", () => { sender: whitelisted, address: morpho, args: { - id: marketConfig.id, + id: marketParams.id, assets, onBehalf: whitelisted, }, @@ -5076,7 +5076,7 @@ describe("populateBundle", () => { sender: bundler, address: morpho, args: { - id: marketConfig.id, + id: marketParams.id, assets, onBehalf: whitelisted, }, @@ -5085,7 +5085,7 @@ describe("populateBundle", () => { const position = await fetchPosition( whitelisted, - marketConfig.id, + marketParams.id, client, ); diff --git a/packages/liquidation-sdk-viem/examples/whitelisted-erc4626-1inch.ts b/packages/liquidation-sdk-viem/examples/whitelisted-erc4626-1inch.ts index 15b36c27..612261de 100644 --- a/packages/liquidation-sdk-viem/examples/whitelisted-erc4626-1inch.ts +++ b/packages/liquidation-sdk-viem/examples/whitelisted-erc4626-1inch.ts @@ -120,7 +120,7 @@ export const check = async < ] = await Promise.all([ // Convex staking wrapper tokens expose both EIP-4626's `asset` and OZ's ERC20Wrapper's `underlying` view function. readContract(client, { - address: market.config.collateralToken, + address: market.params.collateralToken, abi: erc4626Abi, functionName: "asset", }).catch(() => undefined), @@ -146,7 +146,7 @@ export const check = async < repaidShares, repaidAssets: market.toBorrowAssets(repaidShares), withdrawnAssets: await readContract(client, { - address: market.config.collateralToken, + address: market.params.collateralToken, abi: erc4626Abi, functionName: "previewRedeem", args: [seizedAssets], @@ -161,14 +161,14 @@ export const check = async < if (triedLiquidity.length === 0) throw Error("seized zero"); const slippage = - (market.config.liquidationIncentiveFactor - BigInt.WAD) / 2n; + (market.params.liquidationIncentiveFactor - BigInt.WAD) / 2n; await Promise.allSettled( triedLiquidity.map( async ({ seizedAssets, repaidAssets, withdrawnAssets }) => { try { let srcToken = - collateralUnderlyingAsset ?? market.config.collateralToken; + collateralUnderlyingAsset ?? market.params.collateralToken; let srcAmount = withdrawnAssets ?? seizedAssets; const encoder = new LiquidationEncoder(executorAddress, client); @@ -177,14 +177,14 @@ export const check = async < // Handle Pendle Tokens // To retrieve the tokens, we need to call the Pendle API to get the swap calldata ({ srcAmount, srcToken } = await encoder.handlePendleTokens( - market.config.collateralToken, + market.params.collateralToken, seizedAssets, pendleTokens, )); // As there is no liquidity for sUSDS, we use the sUSDS withdrawal function to get USDS instead if ( - market.config.collateralToken === mainnetAddresses.sUsds && + market.params.collateralToken === mainnetAddresses.sUsds && chainId === ChainId.EthMainnet ) { const usdsWithdrawalAmount = @@ -207,7 +207,7 @@ export const check = async < switch (true) { // In case of Usual tokens, there aren't much liquidity outside of curve, so we use it instead of 1inch/paraswap // Process USD0/USD0++ collateral liquidation with specific process (using curve) - case market.config.collateralToken === + case market.params.collateralToken === mainnetAddresses["usd0usd0++"] && chainId === ChainId.EthMainnet: dstAmount = await encoder.curveSwapUsd0Usd0PPForUsdc( @@ -221,7 +221,7 @@ export const check = async < ); break; // Process USD0++ colalteral liquidation with specific process (using curve) - case market.config.collateralToken === + case market.params.collateralToken === mainnetAddresses["usd0++"] && chainId === ChainId.EthMainnet: { dstAmount = await encoder.swapUSD0PPToUSDC( @@ -240,7 +240,7 @@ export const check = async < const bestSwap = await fetchBestSwap({ chainId, src: srcToken, - dst: market.config.loanToken, + dst: market.params.loanToken, amount: srcAmount, from: executorAddress, slippage, @@ -278,10 +278,10 @@ export const check = async < // Handle ERC20Wrapper collateral tokens. if ( - erc20WrapperTokens[chainId].has(market.config.collateralToken) + erc20WrapperTokens[chainId].has(market.params.collateralToken) ) encoder.erc20WrapperWithdrawTo( - market.config.collateralToken, + market.params.collateralToken, executorAddress, seizedAssets, ); @@ -295,7 +295,7 @@ export const check = async < !(mainnetAddresses.sUsds && chainId === ChainId.EthMainnet) ) encoder.erc4626Redeem( - market.config.collateralToken, + market.params.collateralToken, seizedAssets, executorAddress, executorAddress, @@ -304,14 +304,14 @@ export const check = async < if (loanMorphoAllowance === 0n) // Allows to handle changes in repaidAssets due to price changes and saves gas. encoder.erc20Approve( - market.config.loanToken, + market.params.loanToken, morpho, maxUint256, ); encoder.morphoBlueLiquidate( morpho, - market.config, + market.params, user, seizedAssets, 0n, diff --git a/packages/liquidation-sdk-viem/test/examples/whitelisted-erc4626-1inch.test.ts b/packages/liquidation-sdk-viem/test/examples/whitelisted-erc4626-1inch.test.ts index 0c791085..dabbbc53 100644 --- a/packages/liquidation-sdk-viem/test/examples/whitelisted-erc4626-1inch.test.ts +++ b/packages/liquidation-sdk-viem/test/examples/whitelisted-erc4626-1inch.test.ts @@ -449,8 +449,8 @@ describe("erc4626-1inch", () => { const market = await fetchMarket(marketId, client); const [collateralToken, loanToken] = await Promise.all([ - fetchToken(market.config.collateralToken, client), - fetchToken(market.config.loanToken, client), + fetchToken(market.params.collateralToken, client), + fetchToken(market.params.loanToken, client), ]); const collateral = parseUnits("1", collateralToken.decimals); @@ -469,7 +469,7 @@ describe("erc4626-1inch", () => { address: morpho, abi: blueAbi, functionName: "supplyCollateral", - args: [market.config, collateral, borrower.address, "0x"], + args: [market.params, collateral, borrower.address, "0x"], }); await client.writeContract({ @@ -478,8 +478,8 @@ describe("erc4626-1inch", () => { abi: blueAbi, functionName: "borrow", args: [ - market.config as Pick< - typeof market.config, + market.params as Pick< + typeof market.params, "collateralToken" | "loanToken" | "oracle" | "irm" | "lltv" >, market.getMaxBorrowAssets(collateral) - 10n, @@ -510,13 +510,13 @@ describe("erc4626-1inch", () => { market: { uniqueKey: marketId, collateralAsset: { - address: market.config.collateralToken, + address: market.params.collateralToken, decimals: collateralToken.decimals, priceUsd: collateralPriceUsd, spotPriceEth: collateralPriceUsd / ethPriceUsd, }, loanAsset: { - address: market.config.loanToken, + address: market.params.loanToken, decimals: loanToken.decimals, priceUsd: null, spotPriceEth: 1 / ethPriceUsd, @@ -544,7 +544,7 @@ describe("erc4626-1inch", () => { const decimals = Number(loanToken.decimals); const decimalBalance = await client.readContract({ - address: market.config.loanToken, + address: market.params.loanToken, abi: erc20Abi, functionName: "balanceOf", args: [encoder.address], @@ -569,8 +569,8 @@ describe("erc4626-1inch", () => { const market = await fetchMarket(marketId, client); const [collateralToken, loanToken] = await Promise.all([ - fetchToken(market.config.collateralToken, client), - fetchToken(market.config.loanToken, client), + fetchToken(market.params.collateralToken, client), + fetchToken(market.params.loanToken, client), ]); const collateral = parseUnits("10000", collateralToken.decimals); @@ -589,7 +589,7 @@ describe("erc4626-1inch", () => { address: morpho, abi: blueAbi, functionName: "supplyCollateral", - args: [market.config, collateral, borrower.address, "0x"], + args: [market.params, collateral, borrower.address, "0x"], }); const borrowed = market.getMaxBorrowAssets(collateral) - 1n; @@ -609,7 +609,7 @@ describe("erc4626-1inch", () => { abi: blueAbi, functionName: "supply", args: [ - market.config, + market.params, borrowed - market.liquidity, // 100% utilization after borrow. 0n, borrower.address, @@ -623,8 +623,8 @@ describe("erc4626-1inch", () => { abi: blueAbi, functionName: "borrow", args: [ - market.config as Pick< - typeof market.config, + market.params as Pick< + typeof market.params, "collateralToken" | "loanToken" | "oracle" | "irm" | "lltv" >, borrowed, @@ -655,12 +655,12 @@ describe("erc4626-1inch", () => { market: { uniqueKey: marketId, collateralAsset: { - address: market.config.collateralToken, + address: market.params.collateralToken, decimals: collateralToken.decimals, priceUsd: collateralPriceUsd, }, loanAsset: { - address: market.config.loanToken, + address: market.params.loanToken, decimals: loanToken.decimals, priceUsd: null, spotPriceEth: 1 / ethPriceUsd, @@ -688,7 +688,7 @@ describe("erc4626-1inch", () => { const decimals = Number(loanToken.decimals); const decimalBalance = await client.readContract({ - address: market.config.loanToken, + address: market.params.loanToken, abi: erc20Abi, functionName: "balanceOf", args: [encoder.address], @@ -713,8 +713,8 @@ describe("erc4626-1inch", () => { const market = await fetchMarket(marketId, client); const [collateralToken, loanToken] = await Promise.all([ - fetchToken(market.config.collateralToken, client), - fetchToken(market.config.loanToken, client), + fetchToken(market.params.collateralToken, client), + fetchToken(market.params.loanToken, client), ]); const collateral = parseUnits("10000", collateralToken.decimals); @@ -733,7 +733,7 @@ describe("erc4626-1inch", () => { address: morpho, abi: blueAbi, functionName: "supplyCollateral", - args: [market.config, collateral, borrower.address, "0x"], + args: [market.params, collateral, borrower.address, "0x"], }); await client.writeContract({ @@ -742,8 +742,8 @@ describe("erc4626-1inch", () => { abi: blueAbi, functionName: "borrow", args: [ - market.config as Pick< - typeof market.config, + market.params as Pick< + typeof market.params, "collateralToken" | "loanToken" | "oracle" | "irm" | "lltv" >, market.getMaxBorrowAssets(collateral) - 1n, @@ -776,13 +776,13 @@ describe("erc4626-1inch", () => { market: { uniqueKey: marketId, collateralAsset: { - address: market.config.collateralToken, + address: market.params.collateralToken, decimals: collateralToken.decimals, priceUsd: newCollateralPriceUsd, spotPriceEth: newCollateralPriceUsd / ethPriceUsd, }, loanAsset: { - address: market.config.loanToken, + address: market.params.loanToken, decimals: loanToken.decimals, priceUsd: null, spotPriceEth: 1 / ethPriceUsd, @@ -806,7 +806,7 @@ describe("erc4626-1inch", () => { encoder, seizedCollateral, "60475733901", - market.config.collateralToken, + market.params.collateralToken, ); mockOneInch(encoder, seizedCollateral, "11669266773005108147657"); mockParaSwap(encoder, seizedCollateral, "11669266773005108147656"); @@ -816,7 +816,7 @@ describe("erc4626-1inch", () => { const decimals = Number(loanToken.decimals); const decimalBalance = await client.readContract({ - address: market.config.loanToken, + address: market.params.loanToken, abi: erc20Abi, functionName: "balanceOf", args: [encoder.address], @@ -841,8 +841,8 @@ describe("erc4626-1inch", () => { const market = await fetchMarket(marketId, client); const [collateralToken, loanToken] = await Promise.all([ - fetchToken(market.config.collateralToken, client), - fetchToken(market.config.loanToken, client), + fetchToken(market.params.collateralToken, client), + fetchToken(market.params.loanToken, client), ]); const collateral = parseUnits("10000", collateralToken.decimals); @@ -861,7 +861,7 @@ describe("erc4626-1inch", () => { address: morpho, abi: blueAbi, functionName: "supplyCollateral", - args: [market.config, collateral, borrower.address, "0x"], + args: [market.params, collateral, borrower.address, "0x"], }); await client.writeContract({ @@ -870,8 +870,8 @@ describe("erc4626-1inch", () => { abi: blueAbi, functionName: "borrow", args: [ - market.config as Pick< - typeof market.config, + market.params as Pick< + typeof market.params, "collateralToken" | "loanToken" | "oracle" | "irm" | "lltv" >, market.getMaxBorrowAssets(collateral) - 1n, @@ -909,13 +909,13 @@ describe("erc4626-1inch", () => { market: { uniqueKey: marketId, collateralAsset: { - address: market.config.collateralToken, + address: market.params.collateralToken, decimals: collateralToken.decimals, priceUsd: newCollateralPriceUsd, spotPriceEth: newCollateralPriceUsd / ethPriceUsd, }, loanAsset: { - address: market.config.loanToken, + address: market.params.loanToken, decimals: loanToken.decimals, priceUsd: null, spotPriceEth: 1 / ethPriceUsd, @@ -939,7 +939,7 @@ describe("erc4626-1inch", () => { encoder, seizedCollateral, "11669266773005108147657", - market.config.collateralToken, + market.params.collateralToken, ); mockOneInch(encoder, seizedCollateral, "11669266773005108147657"); mockParaSwap(encoder, seizedCollateral, "11669266773005108147656"); @@ -949,7 +949,7 @@ describe("erc4626-1inch", () => { const decimals = Number(loanToken.decimals); const decimalBalance = await client.readContract({ - address: market.config.loanToken, + address: market.params.loanToken, abi: erc20Abi, functionName: "balanceOf", args: [encoder.address], @@ -974,8 +974,8 @@ describe("erc4626-1inch", () => { const market = await fetchMarket(marketId, client); const [collateralToken, loanToken] = await Promise.all([ - fetchToken(market.config.collateralToken, client), - fetchToken(market.config.loanToken, client), + fetchToken(market.params.collateralToken, client), + fetchToken(market.params.loanToken, client), ]); const collateral = 100000000000000000000000n; @@ -1022,7 +1022,7 @@ describe("erc4626-1inch", () => { address: morpho, abi: blueAbi, functionName: "supplyCollateral", - args: [market.config, newCollatValue, borrower.address, "0x"], + args: [market.params, newCollatValue, borrower.address, "0x"], }); await client.writeContract({ @@ -1031,8 +1031,8 @@ describe("erc4626-1inch", () => { abi: blueAbi, functionName: "borrow", args: [ - market.config as Pick< - typeof market.config, + market.params as Pick< + typeof market.params, "collateralToken" | "loanToken" | "oracle" | "irm" | "lltv" >, market.getMaxBorrowAssets(newCollatValue) - 1n, @@ -1067,13 +1067,13 @@ describe("erc4626-1inch", () => { market: { uniqueKey: marketId, collateralAsset: { - address: market.config.collateralToken, + address: market.params.collateralToken, decimals: collateralToken.decimals, priceUsd: newCollateralPriceUsd, spotPriceEth: newCollateralPriceUsd / ethPriceUsd, }, loanAsset: { - address: market.config.loanToken, + address: market.params.loanToken, decimals: loanToken.decimals, priceUsd: null, spotPriceEth: 1 / ethPriceUsd, @@ -1112,7 +1112,7 @@ describe("erc4626-1inch", () => { const decimals = Number(loanToken.decimals); const decimalBalance = await client.readContract({ - address: market.config.loanToken, + address: market.params.loanToken, abi: erc20Abi, functionName: "balanceOf", args: [encoder.address], @@ -1137,8 +1137,8 @@ describe("erc4626-1inch", () => { const market = await fetchMarket(marketId, client); const [collateralToken, loanToken] = await Promise.all([ - fetchToken(market.config.collateralToken, client), - fetchToken(market.config.loanToken, client), + fetchToken(market.params.collateralToken, client), + fetchToken(market.params.loanToken, client), ]); const collateral = 100000000000000000000000n; @@ -1162,7 +1162,7 @@ describe("erc4626-1inch", () => { address: morpho, abi: blueAbi, functionName: "supplyCollateral", - args: [market.config, collateral, borrower.address, "0x"], + args: [market.params, collateral, borrower.address, "0x"], }); await client.writeContract({ @@ -1171,8 +1171,8 @@ describe("erc4626-1inch", () => { abi: blueAbi, functionName: "borrow", args: [ - market.config as Pick< - typeof market.config, + market.params as Pick< + typeof market.params, "collateralToken" | "loanToken" | "oracle" | "irm" | "lltv" >, market.getMaxBorrowAssets(collateral) - 1n, @@ -1207,13 +1207,13 @@ describe("erc4626-1inch", () => { market: { uniqueKey: marketId, collateralAsset: { - address: market.config.collateralToken, + address: market.params.collateralToken, decimals: collateralToken.decimals, priceUsd: newCollateralPriceUsd, spotPriceEth: newCollateralPriceUsd / ethPriceUsd, }, loanAsset: { - address: market.config.loanToken, + address: market.params.loanToken, decimals: loanToken.decimals, priceUsd: null, spotPriceEth: 1 / ethPriceUsd, @@ -1252,7 +1252,7 @@ describe("erc4626-1inch", () => { const decimals = Number(loanToken.decimals); const decimalBalance = await client.readContract({ - address: market.config.loanToken, + address: market.params.loanToken, abi: erc20Abi, functionName: "balanceOf", args: [encoder.address], @@ -1276,8 +1276,8 @@ describe("erc4626-1inch", () => { const market = await fetchMarket(marketId, client); const [collateralToken, loanToken] = await Promise.all([ - fetchToken(market.config.collateralToken, client), - fetchToken(market.config.loanToken, client), + fetchToken(market.params.collateralToken, client), + fetchToken(market.params.loanToken, client), ]); const collateral = parseUnits("100000", collateralToken.decimals); @@ -1296,7 +1296,7 @@ describe("erc4626-1inch", () => { address: morpho, abi: blueAbi, functionName: "supplyCollateral", - args: [market.config, collateral, borrower.address, "0x"], + args: [market.params, collateral, borrower.address, "0x"], }); const borrowed = market.getMaxBorrowAssets(collateral) - 1n; @@ -1315,7 +1315,7 @@ describe("erc4626-1inch", () => { address: morpho, abi: blueAbi, functionName: "supply", - args: [market.config, borrowed, 0n, borrower.address, "0x"], + args: [market.params, borrowed, 0n, borrower.address, "0x"], }); await client.writeContract({ @@ -1324,8 +1324,8 @@ describe("erc4626-1inch", () => { abi: blueAbi, functionName: "borrow", args: [ - market.config as Pick< - typeof market.config, + market.params as Pick< + typeof market.params, "collateralToken" | "loanToken" | "oracle" | "irm" | "lltv" >, borrowed, @@ -1358,13 +1358,13 @@ describe("erc4626-1inch", () => { market: { uniqueKey: marketId, collateralAsset: { - address: market.config.collateralToken, + address: market.params.collateralToken, decimals: collateralToken.decimals, priceUsd: newCollateralPriceUsd, spotPriceEth: newCollateralPriceUsd / ethPriceUsd, }, loanAsset: { - address: market.config.loanToken, + address: market.params.loanToken, decimals: loanToken.decimals, priceUsd: null, spotPriceEth: 1 / ethPriceUsd, @@ -1396,7 +1396,7 @@ describe("erc4626-1inch", () => { const decimals = Number(loanToken.decimals); const decimalBalance = await client.readContract({ - address: market.config.loanToken, + address: market.params.loanToken, abi: erc20Abi, functionName: "balanceOf", args: [encoder.address], diff --git a/packages/morpho-test/src/fixtures/markets.ts b/packages/morpho-test/src/fixtures/markets.ts index a1231e00..5931ad1a 100644 --- a/packages/morpho-test/src/fixtures/markets.ts +++ b/packages/morpho-test/src/fixtures/markets.ts @@ -1,7 +1,7 @@ import { ChainId, - MarketConfig, - type MarketParams, + type InputMarketParams, + MarketParams, addresses, } from "@morpho-org/blue-sdk"; import { randomAddress } from "@morpho-org/test"; @@ -12,64 +12,64 @@ const { adaptiveCurveIrm, wNative, sDai, usdc, wstEth, wbIB01, usdt } = export const markets = { [ChainId.EthMainnet]: { - eth_idle: MarketConfig.idle(wNative), - eth_wstEth: new MarketConfig({ + eth_idle: MarketParams.idle(wNative), + eth_wstEth: new MarketParams({ loanToken: wNative, collateralToken: wstEth, oracle: "0x2a01EB9496094dA03c4E364Def50f5aD1280AD72", irm: adaptiveCurveIrm, lltv: parseUnits("94.5", 16), }), - eth_wstEth_2: new MarketConfig({ + eth_wstEth_2: new MarketParams({ loanToken: wNative, collateralToken: wstEth, oracle: "0xbD60A6770b27E084E8617335ddE769241B0e71D8", irm: adaptiveCurveIrm, lltv: parseUnits("94.5", 16), }), - eth_rEth: new MarketConfig({ + eth_rEth: new MarketParams({ loanToken: wNative, collateralToken: "0xae78736Cd615f374D3085123A210448E74Fc6393", oracle: "0x1b4A3F92e5Fffd1d35A98751c9FE4472483579bB", irm: adaptiveCurveIrm, lltv: parseUnits("94.5", 16), }), - eth_sDai: new MarketConfig({ + eth_sDai: new MarketParams({ loanToken: wNative, collateralToken: sDai, oracle: "0x0f9bb760D76af1B5Ca89102084E1963F6698AFda", irm: adaptiveCurveIrm, lltv: parseUnits("86", 16), }), - eth_wbtc: new MarketConfig({ + eth_wbtc: new MarketParams({ loanToken: wNative, collateralToken: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", oracle: "0xc29B3Bc033640baE31ca53F8a0Eb892AdF68e663", irm: adaptiveCurveIrm, lltv: parseUnits("91.5", 16), }), - eth_ezEth: new MarketConfig({ + eth_ezEth: new MarketParams({ loanToken: wNative, collateralToken: "0xbf5495Efe5DB9ce00f80364C8B423567e58d2110", oracle: "0x61025e2B0122ac8bE4e37365A4003d87ad888Cc3", irm: adaptiveCurveIrm, lltv: parseUnits("86", 16), }), - eth_apxEth: new MarketConfig({ + eth_apxEth: new MarketParams({ loanToken: wNative, collateralToken: "0x9Ba021B0a9b958B5E75cE9f6dff97C7eE52cb3E6", oracle: "0x037D67A5E6F19d0Fb26A6603d2D4fE9d70eC3258", irm: adaptiveCurveIrm, lltv: parseUnits("86", 16), }), - eth_osEth: new MarketConfig({ + eth_osEth: new MarketParams({ loanToken: wNative, collateralToken: "0xf1C9acDc66974dFB6dEcB12aA385b9cD01190E38", oracle: "0x224F2F1333b45E34fFCfC3bD01cE43C73A914498", irm: adaptiveCurveIrm, lltv: parseUnits("86", 16), }), - eth_weEth: new MarketConfig({ + eth_weEth: new MarketParams({ loanToken: wNative, collateralToken: "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee", oracle: "0x3fa58b74e9a8eA8768eb33c8453e9C2Ed089A40a", @@ -77,36 +77,36 @@ export const markets = { lltv: parseUnits("86", 16), }), - usdt_idle: MarketConfig.idle(usdt), - usdt_weth_86: new MarketConfig({ + usdt_idle: MarketParams.idle(usdt), + usdt_weth_86: new MarketParams({ loanToken: usdt, collateralToken: wNative, oracle: "0xe9eE579684716c7Bb837224F4c7BeEfA4f1F3d7f", irm: adaptiveCurveIrm, lltv: parseUnits("86", 16), }), - usdt_weth_91_5: new MarketConfig({ + usdt_weth_91_5: new MarketParams({ loanToken: usdt, collateralToken: wNative, oracle: "0xe9eE579684716c7Bb837224F4c7BeEfA4f1F3d7f", irm: adaptiveCurveIrm, lltv: parseUnits("91.5", 16), }), - usdt_wbtc: new MarketConfig({ + usdt_wbtc: new MarketParams({ loanToken: usdt, collateralToken: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", oracle: "0x008bF4B1cDA0cc9f0e882E0697f036667652E1ef", irm: adaptiveCurveIrm, lltv: parseUnits("86", 16), }), - usdt_wstEth: new MarketConfig({ + usdt_wstEth: new MarketParams({ loanToken: usdt, collateralToken: wstEth, oracle: "0x95DB30fAb9A3754e42423000DF27732CB2396992", irm: adaptiveCurveIrm, lltv: parseUnits("86", 16), }), - usdt_sDai: new MarketConfig({ + usdt_sDai: new MarketParams({ loanToken: usdt, collateralToken: sDai, oracle: "0x7538C68d863b28E34b986C1E8daFEDa31D824923", @@ -114,8 +114,8 @@ export const markets = { lltv: parseUnits("94.5", 16), }), - usdc_idle: MarketConfig.idle(usdc), - usdc_wbtc: new MarketConfig({ + usdc_idle: MarketParams.idle(usdc), + usdc_wbtc: new MarketParams({ // USDC(wBTC, 86%, Chainlink, AdaptiveCurve) loanToken: usdc, collateralToken: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", @@ -123,7 +123,7 @@ export const markets = { irm: adaptiveCurveIrm, lltv: parseUnits("86", 16), }), - usdc_wstEth: new MarketConfig({ + usdc_wstEth: new MarketParams({ // USDC(wstETH, 86%, Chainlink, AdaptiveCurve) loanToken: usdc, collateralToken: wstEth, @@ -131,14 +131,14 @@ export const markets = { irm: adaptiveCurveIrm, lltv: parseUnits("86", 16), }), - usdc_sDai: new MarketConfig({ + usdc_sDai: new MarketParams({ loanToken: usdc, collateralToken: sDai, oracle: "0x6CAFE228eC0B0bC2D076577d56D35Fe704318f6d", irm: adaptiveCurveIrm, lltv: parseUnits("96.5", 16), }), - usdc_wbIB01: new MarketConfig({ + usdc_wbIB01: new MarketParams({ // USDC(wbIB01, 96.5%, Chainlink, AdaptiveCurve) loanToken: usdc, collateralToken: wbIB01, @@ -147,42 +147,42 @@ export const markets = { lltv: parseUnits("96.5", 16), }), - crvUsd_stkcvxcrvUSDTWBTCWETH: new MarketConfig({ + crvUsd_stkcvxcrvUSDTWBTCWETH: new MarketParams({ loanToken: "0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E", collateralToken: "0xb0Ce26C88e4e7DCa51968b6047f44646f5064278", oracle: "0x077Af6c2D4A75D4145d141F9e9421864C3940CB3", irm: adaptiveCurveIrm, lltv: parseUnits("86", 16), }), - crvUsd_stkcvxcrvUSDCWBTCWETH: new MarketConfig({ + crvUsd_stkcvxcrvUSDCWBTCWETH: new MarketParams({ loanToken: "0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E", collateralToken: "0x0ea1a65A2c255f24Ee8D81eA6AaC54Decd9d269e", oracle: "0xd2F7C3B2fC97cC7b6AfDd76D163394680EFc35b9", irm: adaptiveCurveIrm, lltv: parseUnits("86", 16), }), - crvUsd_stkcvxcrvCRVUSDTBTCWSTETH: new MarketConfig({ + crvUsd_stkcvxcrvCRVUSDTBTCWSTETH: new MarketParams({ loanToken: "0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E", collateralToken: "0x3ce8Ec9f3d89aD0A2DdbCC3FDB8991BD241Fc82E", oracle: "0xa9f7900476F43C45Ebf56cEa669B9c960C176112", irm: adaptiveCurveIrm, lltv: parseUnits("86", 16), }), - crvUsd_stkcvxTryLSD: new MarketConfig({ + crvUsd_stkcvxTryLSD: new MarketParams({ loanToken: "0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E", collateralToken: "0x6BA072F0d22806F2C52e9792AF47f2D59103BEBE", oracle: "0x18B0d7311a97c5377445C80c768ab5201Bb27B5a", irm: adaptiveCurveIrm, lltv: parseUnits("86", 16), }), - crvUsd_stkcvxcrvUSDETHCRV: new MarketConfig({ + crvUsd_stkcvxcrvUSDETHCRV: new MarketParams({ loanToken: "0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E", collateralToken: "0xAc904BAfBb5FB04Deb2b6198FdCEedE75a78Ce5a", oracle: "0xad7e157815df05029125B568E39d5402550d60bb", irm: adaptiveCurveIrm, lltv: parseUnits("86", 16), }), - crvUsd_stkcvx2BTC: new MarketConfig({ + crvUsd_stkcvx2BTC: new MarketParams({ loanToken: "0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E", collateralToken: "0x385E12cf4040543Bc8C18e05C1298Be5B04f3f5e", oracle: "0x20c4fA59f032bEC6de1905B7201CB88DFD968abA", @@ -190,7 +190,7 @@ export const markets = { lltv: 860000000000000000n, }), - usda_re7Eth: new MarketConfig({ + usda_re7Eth: new MarketParams({ loanToken: "0x0000206329b97DB379d5E1Bf586BbDB969C63274", collateralToken: "0x78Fc2c2eD1A4cDb5402365934aE5648aDAd094d0", oracle: "0x76052A2A28fDCB8124f4686C63C68355b142de3B", @@ -200,8 +200,8 @@ export const markets = { }, } as const; -export const randomMarket = (params: Partial = {}) => - new MarketConfig({ +export const randomMarket = (params: Partial = {}) => + new MarketParams({ collateralToken: randomAddress(), loanToken: randomAddress(), oracle: randomAddress(), diff --git a/packages/simulation-sdk-wagmi/test/hooks/useSimulationState.test.ts b/packages/simulation-sdk-wagmi/test/hooks/useSimulationState.test.ts index 06719d0d..80b7dd39 100644 --- a/packages/simulation-sdk-wagmi/test/hooks/useSimulationState.test.ts +++ b/packages/simulation-sdk-wagmi/test/hooks/useSimulationState.test.ts @@ -219,7 +219,7 @@ describe("useSimulationState", () => { }, markets: { [usdc_wstEth.id]: new Market({ - config: usdc_wstEth, + params: usdc_wstEth, fee: 0n, lastUpdate: 1714261175n, price: 3775466720554092397807658269n, diff --git a/packages/simulation-sdk/src/SimulationState.ts b/packages/simulation-sdk/src/SimulationState.ts index 240d3027..0301143a 100644 --- a/packages/simulation-sdk/src/SimulationState.ts +++ b/packages/simulation-sdk/src/SimulationState.ts @@ -358,7 +358,7 @@ export class SimulationState implements InputSimulationState { }, ) { return _try(() => { - const { loanToken, collateralToken } = this.getMarket(marketId).config; + const { loanToken, collateralToken } = this.getMarket(marketId).params; const loanBalance = this.getBundleMaxBalance( user, diff --git a/packages/simulation-sdk/src/handlers/blue/borrow.ts b/packages/simulation-sdk/src/handlers/blue/borrow.ts index ea5d9d59..b16c86bc 100644 --- a/packages/simulation-sdk/src/handlers/blue/borrow.ts +++ b/packages/simulation-sdk/src/handlers/blue/borrow.ts @@ -64,7 +64,7 @@ export const handleBlueBorrowOperation: OperationHandler< { type: "Erc20_Transfer", sender: morpho, - address: market.config.loanToken, + address: market.params.loanToken, args: { amount: assets, from: morpho, diff --git a/packages/simulation-sdk/src/handlers/blue/repay.ts b/packages/simulation-sdk/src/handlers/blue/repay.ts index 29243fa0..d392774f 100644 --- a/packages/simulation-sdk/src/handlers/blue/repay.ts +++ b/packages/simulation-sdk/src/handlers/blue/repay.ts @@ -34,7 +34,7 @@ export const handleBlueRepayOperation: OperationHandler< if (sender === bundler && assets === MathLib.MAX_UINT_256) assets = MathLib.min( assets, - data.getHolding(bundler, market.config.loanToken).balance, + data.getHolding(bundler, market.params.loanToken).balance, ); if (assets === 0n && shares === 0n) throw new BlueErrors.InconsistentInput(); @@ -66,7 +66,7 @@ export const handleBlueRepayOperation: OperationHandler< { type: "Erc20_Transfer", sender: morpho, - address: market.config.loanToken, + address: market.params.loanToken, args: { amount: assets, from: sender, diff --git a/packages/simulation-sdk/src/handlers/blue/supply.ts b/packages/simulation-sdk/src/handlers/blue/supply.ts index 41415e15..75632423 100644 --- a/packages/simulation-sdk/src/handlers/blue/supply.ts +++ b/packages/simulation-sdk/src/handlers/blue/supply.ts @@ -33,7 +33,7 @@ export const handleBlueSupplyOperation: OperationHandler< if (sender === bundler && assets === MathLib.MAX_UINT_256) assets = MathLib.min( assets, - data.getHolding(bundler, market.config.loanToken).balance, + data.getHolding(bundler, market.params.loanToken).balance, ); if (assets === 0n && shares === 0n) throw new BlueErrors.InconsistentInput(); @@ -63,7 +63,7 @@ export const handleBlueSupplyOperation: OperationHandler< { type: "Erc20_Transfer", sender: morpho, - address: market.config.loanToken, + address: market.params.loanToken, args: { amount: assets, from: sender, diff --git a/packages/simulation-sdk/src/handlers/blue/supplyCollateral.ts b/packages/simulation-sdk/src/handlers/blue/supplyCollateral.ts index 07d101c3..2c627a4c 100644 --- a/packages/simulation-sdk/src/handlers/blue/supplyCollateral.ts +++ b/packages/simulation-sdk/src/handlers/blue/supplyCollateral.ts @@ -10,7 +10,7 @@ export const handleBlueSupplyCollateralOperation: OperationHandler< BlueOperations["Blue_SupplyCollateral"] > = ({ args: { id, assets, onBehalf, callback }, sender }, data) => { const { - config: { collateralToken }, + params: { collateralToken }, } = data.getMarket(id); const { morpho, bundler } = getChainAddresses(data.chainId); diff --git a/packages/simulation-sdk/src/handlers/blue/withdraw.ts b/packages/simulation-sdk/src/handlers/blue/withdraw.ts index 6f7f6d26..4cf20c77 100644 --- a/packages/simulation-sdk/src/handlers/blue/withdraw.ts +++ b/packages/simulation-sdk/src/handlers/blue/withdraw.ts @@ -64,7 +64,7 @@ export const handleBlueWithdrawOperation: OperationHandler< { type: "Erc20_Transfer", sender: morpho, - address: market.config.loanToken, + address: market.params.loanToken, args: { amount: assets, from: morpho, diff --git a/packages/simulation-sdk/src/handlers/blue/withdrawCollateral.ts b/packages/simulation-sdk/src/handlers/blue/withdrawCollateral.ts index 1050ce28..619d5c88 100644 --- a/packages/simulation-sdk/src/handlers/blue/withdrawCollateral.ts +++ b/packages/simulation-sdk/src/handlers/blue/withdrawCollateral.ts @@ -46,7 +46,7 @@ export const handleBlueWithdrawCollateralOperation: OperationHandler< { type: "Erc20_Transfer", sender: morpho, - address: market.config.collateralToken, + address: market.params.collateralToken, args: { amount: assets, from: morpho, diff --git a/packages/simulation-sdk/test/SimulationState.test.ts b/packages/simulation-sdk/test/SimulationState.test.ts index c3a04956..58c9e55b 100644 --- a/packages/simulation-sdk/test/SimulationState.test.ts +++ b/packages/simulation-sdk/test/SimulationState.test.ts @@ -3,7 +3,7 @@ import { parseEther, parseUnits } from "viem"; import { ChainId, Market, - MarketConfig, + MarketParams, Position, Token, Vault, @@ -133,7 +133,7 @@ describe("SimulationState", () => { test("should calculate reallocatable liquidity on idle market with target 0%", () => { // We create a state with only a vault that has all the liquidity in the idle market. const idleMarketA = new Market({ - config: MarketConfig.idle(tokenA), + params: MarketParams.idle(tokenA), totalBorrowAssets: 0n, totalBorrowShares: 0n, totalSupplyAssets: parseUnits("100000", 6), diff --git a/packages/simulation-sdk/test/fixtures.ts b/packages/simulation-sdk/test/fixtures.ts index 92aeca02..e0268782 100644 --- a/packages/simulation-sdk/test/fixtures.ts +++ b/packages/simulation-sdk/test/fixtures.ts @@ -31,7 +31,7 @@ export const tokenB = "0x2222222222222222222222222222222222222222"; unwrappedTokensMapping[ChainId.EthMainnet][tokenB] = tokenA; export const marketA1 = new Market({ - config: randomMarket({ loanToken: tokenA }), + params: randomMarket({ loanToken: tokenA }), totalBorrowAssets: parseUnits("10000", 6), totalBorrowShares: parseUnits("10000", 6 + 6), totalSupplyAssets: parseUnits("10750", 6), @@ -42,7 +42,7 @@ export const marketA1 = new Market({ rateAtTarget: parseEther("0.007") / SECONDS_PER_YEAR, }); export const marketA2 = new Market({ - config: randomMarket({ loanToken: tokenA }), + params: randomMarket({ loanToken: tokenA }), totalBorrowAssets: parseUnits("10000", 6), totalBorrowShares: parseUnits("10000", 6 + 6), totalSupplyAssets: parseUnits("20200", 6), @@ -53,7 +53,7 @@ export const marketA2 = new Market({ rateAtTarget: parseEther("0.05") / SECONDS_PER_YEAR, }); export const marketA3 = new Market({ - config: randomMarket({ loanToken: tokenA }), + params: randomMarket({ loanToken: tokenA }), totalBorrowAssets: parseUnits("5000", 6), totalBorrowShares: parseUnits("5000", 6 + 6), totalSupplyAssets: parseUnits("5300", 6), @@ -64,7 +64,7 @@ export const marketA3 = new Market({ rateAtTarget: parseEther("0.04") / SECONDS_PER_YEAR, }); export const marketB1 = new Market({ - config: randomMarket({ loanToken: tokenB }), + params: randomMarket({ loanToken: tokenB }), totalBorrowAssets: parseEther("10000"), totalBorrowShares: parseUnits("10000", 24), totalSupplyAssets: parseEther("20000"), @@ -75,7 +75,7 @@ export const marketB1 = new Market({ rateAtTarget: parseEther("0.05") / SECONDS_PER_YEAR, }); export const marketB2 = new Market({ - config: randomMarket({ loanToken: tokenB }), + params: randomMarket({ loanToken: tokenB }), totalBorrowAssets: parseEther("10000"), totalBorrowShares: parseUnits("10000", 24), totalSupplyAssets: parseEther("20000"), @@ -86,7 +86,7 @@ export const marketB2 = new Market({ rateAtTarget: parseEther("0.05") / SECONDS_PER_YEAR, }); export const marketB3 = new Market({ - config: randomMarket({ collateralToken: tokenA, loanToken: tokenB }), + params: randomMarket({ collateralToken: tokenA, loanToken: tokenB }), totalBorrowAssets: parseEther("1400"), totalBorrowShares: parseUnits("1400", 24), totalSupplyAssets: parseEther("2000"), @@ -153,26 +153,26 @@ export const blueFixture = { symbol: "TBB", name: "Token B loan", }), - [marketA1.config.collateralToken]: new Token({ - address: marketA1.config.collateralToken, + [marketA1.params.collateralToken]: new Token({ + address: marketA1.params.collateralToken, decimals: 18, symbol: "TAC", name: "Token A collateral", }), - [marketA2.config.collateralToken]: new Token({ - address: marketA2.config.collateralToken, + [marketA2.params.collateralToken]: new Token({ + address: marketA2.params.collateralToken, decimals: 18, symbol: "TBC", name: "Token B collateral", }), - [marketB1.config.collateralToken]: new Token({ - address: marketB1.config.collateralToken, + [marketB1.params.collateralToken]: new Token({ + address: marketB1.params.collateralToken, decimals: 18, symbol: "TBC", name: "Token B collateral", }), - [marketB2.config.collateralToken]: new Token({ - address: marketB2.config.collateralToken, + [marketB2.params.collateralToken]: new Token({ + address: marketB2.params.collateralToken, decimals: 18, symbol: "TBC", name: "Token B collateral", @@ -537,14 +537,14 @@ export const blueFixture = { }, }, }), - [marketA1.config.collateralToken]: new Holding({ + [marketA1.params.collateralToken]: new Holding({ erc20Allowances: { morpho: maxUint256, permit2: maxUint256, bundler: maxUint256, }, user: userA, - token: marketA1.config.collateralToken, + token: marketA1.params.collateralToken, balance: 0n, permit2Allowances: { morpho: { @@ -559,14 +559,14 @@ export const blueFixture = { }, }, }), - [marketA2.config.collateralToken]: new Holding({ + [marketA2.params.collateralToken]: new Holding({ erc20Allowances: { morpho: maxUint256, permit2: maxUint256, bundler: maxUint256, }, user: userA, - token: marketA2.config.collateralToken, + token: marketA2.params.collateralToken, balance: 0n, permit2Allowances: { morpho: { @@ -581,14 +581,14 @@ export const blueFixture = { }, }, }), - [marketB1.config.collateralToken]: new Holding({ + [marketB1.params.collateralToken]: new Holding({ erc20Allowances: { morpho: maxUint256, permit2: maxUint256, bundler: maxUint256, }, user: userA, - token: marketB1.config.collateralToken, + token: marketB1.params.collateralToken, balance: 0n, permit2Allowances: { morpho: { @@ -603,14 +603,14 @@ export const blueFixture = { }, }, }), - [marketB2.config.collateralToken]: new Holding({ + [marketB2.params.collateralToken]: new Holding({ erc20Allowances: { morpho: maxUint256, permit2: maxUint256, bundler: maxUint256, }, user: userA, - token: marketB2.config.collateralToken, + token: marketB2.params.collateralToken, balance: 0n, permit2Allowances: { morpho: { @@ -763,14 +763,14 @@ export const blueFixture = { }, }, }), - [marketA1.config.collateralToken]: new Holding({ + [marketA1.params.collateralToken]: new Holding({ erc20Allowances: { morpho: maxUint256, permit2: maxUint256, bundler: maxUint256, }, user: userB, - token: marketA1.config.collateralToken, + token: marketA1.params.collateralToken, balance: parseEther("1000"), permit2Allowances: { morpho: { @@ -785,14 +785,14 @@ export const blueFixture = { }, }, }), - [marketA2.config.collateralToken]: new Holding({ + [marketA2.params.collateralToken]: new Holding({ erc20Allowances: { morpho: maxUint256, permit2: maxUint256, bundler: maxUint256, }, user: userB, - token: marketA2.config.collateralToken, + token: marketA2.params.collateralToken, balance: 0n, permit2Allowances: { morpho: { @@ -807,14 +807,14 @@ export const blueFixture = { }, }, }), - [marketB1.config.collateralToken]: new Holding({ + [marketB1.params.collateralToken]: new Holding({ erc20Allowances: { morpho: maxUint256, permit2: maxUint256, bundler: maxUint256, }, user: userB, - token: marketB1.config.collateralToken, + token: marketB1.params.collateralToken, balance: 0n, permit2Allowances: { morpho: { @@ -829,14 +829,14 @@ export const blueFixture = { }, }, }), - [marketB2.config.collateralToken]: new Holding({ + [marketB2.params.collateralToken]: new Holding({ erc20Allowances: { morpho: maxUint256, permit2: maxUint256, bundler: maxUint256, }, user: userB, - token: marketB2.config.collateralToken, + token: marketB2.params.collateralToken, balance: 0n, permit2Allowances: { morpho: { @@ -989,14 +989,14 @@ export const blueFixture = { }, }, }), - [marketA1.config.collateralToken]: new Holding({ + [marketA1.params.collateralToken]: new Holding({ erc20Allowances: { morpho: maxUint256, permit2: maxUint256, bundler: maxUint256, }, user: userC, - token: marketA1.config.collateralToken, + token: marketA1.params.collateralToken, balance: 0n, permit2Allowances: { morpho: { @@ -1011,14 +1011,14 @@ export const blueFixture = { }, }, }), - [marketA2.config.collateralToken]: new Holding({ + [marketA2.params.collateralToken]: new Holding({ erc20Allowances: { morpho: maxUint256, permit2: maxUint256, bundler: maxUint256, }, user: userC, - token: marketA2.config.collateralToken, + token: marketA2.params.collateralToken, balance: 0n, permit2Allowances: { morpho: { @@ -1033,14 +1033,14 @@ export const blueFixture = { }, }, }), - [marketB1.config.collateralToken]: new Holding({ + [marketB1.params.collateralToken]: new Holding({ erc20Allowances: { morpho: maxUint256, permit2: maxUint256, bundler: maxUint256, }, user: userC, - token: marketB1.config.collateralToken, + token: marketB1.params.collateralToken, balance: 0n, permit2Allowances: { morpho: { @@ -1055,14 +1055,14 @@ export const blueFixture = { }, }, }), - [marketB2.config.collateralToken]: new Holding({ + [marketB2.params.collateralToken]: new Holding({ erc20Allowances: { morpho: maxUint256, permit2: maxUint256, bundler: maxUint256, }, user: userC, - token: marketB2.config.collateralToken, + token: marketB2.params.collateralToken, balance: 0n, permit2Allowances: { morpho: { @@ -1214,14 +1214,14 @@ export const blueFixture = { }, }, }), - [marketA1.config.collateralToken]: new Holding({ + [marketA1.params.collateralToken]: new Holding({ erc20Allowances: { morpho: 0n, permit2: 0n, bundler: 0n, }, user: vaultA.address, - token: marketA1.config.collateralToken, + token: marketA1.params.collateralToken, balance: 0n, permit2Allowances: { morpho: { @@ -1236,14 +1236,14 @@ export const blueFixture = { }, }, }), - [marketA2.config.collateralToken]: new Holding({ + [marketA2.params.collateralToken]: new Holding({ erc20Allowances: { morpho: 0n, permit2: 0n, bundler: 0n, }, user: vaultA.address, - token: marketA2.config.collateralToken, + token: marketA2.params.collateralToken, balance: 0n, permit2Allowances: { morpho: { @@ -1258,14 +1258,14 @@ export const blueFixture = { }, }, }), - [marketB1.config.collateralToken]: new Holding({ + [marketB1.params.collateralToken]: new Holding({ erc20Allowances: { morpho: 0n, permit2: 0n, bundler: 0n, }, user: vaultA.address, - token: marketB1.config.collateralToken, + token: marketB1.params.collateralToken, balance: 0n, permit2Allowances: { morpho: { @@ -1280,14 +1280,14 @@ export const blueFixture = { }, }, }), - [marketB2.config.collateralToken]: new Holding({ + [marketB2.params.collateralToken]: new Holding({ erc20Allowances: { morpho: 0n, permit2: 0n, bundler: 0n, }, user: vaultA.address, - token: marketB2.config.collateralToken, + token: marketB2.params.collateralToken, balance: 0n, permit2Allowances: { morpho: { @@ -1439,14 +1439,14 @@ export const blueFixture = { }, }, }), - [marketA1.config.collateralToken]: new Holding({ + [marketA1.params.collateralToken]: new Holding({ erc20Allowances: { morpho: 0n, permit2: 0n, bundler: 0n, }, user: vaultB.address, - token: marketA1.config.collateralToken, + token: marketA1.params.collateralToken, balance: 0n, permit2Allowances: { morpho: { @@ -1461,14 +1461,14 @@ export const blueFixture = { }, }, }), - [marketA2.config.collateralToken]: new Holding({ + [marketA2.params.collateralToken]: new Holding({ erc20Allowances: { morpho: 0n, permit2: 0n, bundler: 0n, }, user: vaultB.address, - token: marketA2.config.collateralToken, + token: marketA2.params.collateralToken, balance: 0n, permit2Allowances: { morpho: { @@ -1483,14 +1483,14 @@ export const blueFixture = { }, }, }), - [marketB1.config.collateralToken]: new Holding({ + [marketB1.params.collateralToken]: new Holding({ erc20Allowances: { morpho: 0n, permit2: 0n, bundler: 0n, }, user: vaultB.address, - token: marketB1.config.collateralToken, + token: marketB1.params.collateralToken, balance: 0n, permit2Allowances: { morpho: { @@ -1505,14 +1505,14 @@ export const blueFixture = { }, }, }), - [marketB2.config.collateralToken]: new Holding({ + [marketB2.params.collateralToken]: new Holding({ erc20Allowances: { morpho: 0n, permit2: 0n, bundler: 0n, }, user: vaultB.address, - token: marketB2.config.collateralToken, + token: marketB2.params.collateralToken, balance: 0n, permit2Allowances: { morpho: { @@ -1664,14 +1664,14 @@ export const blueFixture = { }, }, }), - [marketA1.config.collateralToken]: new Holding({ + [marketA1.params.collateralToken]: new Holding({ erc20Allowances: { morpho: maxUint256, permit2: maxUint256, bundler: maxUint256, }, user: vaultC.address, - token: marketA1.config.collateralToken, + token: marketA1.params.collateralToken, balance: 0n, permit2Allowances: { morpho: { @@ -1686,14 +1686,14 @@ export const blueFixture = { }, }, }), - [marketA2.config.collateralToken]: new Holding({ + [marketA2.params.collateralToken]: new Holding({ erc20Allowances: { morpho: 0n, permit2: 0n, bundler: 0n, }, user: vaultC.address, - token: marketA2.config.collateralToken, + token: marketA2.params.collateralToken, balance: 0n, permit2Allowances: { morpho: { @@ -1708,14 +1708,14 @@ export const blueFixture = { }, }, }), - [marketB1.config.collateralToken]: new Holding({ + [marketB1.params.collateralToken]: new Holding({ erc20Allowances: { morpho: 0n, permit2: 0n, bundler: 0n, }, user: vaultC.address, - token: marketB1.config.collateralToken, + token: marketB1.params.collateralToken, balance: 0n, permit2Allowances: { morpho: { @@ -1730,14 +1730,14 @@ export const blueFixture = { }, }, }), - [marketB2.config.collateralToken]: new Holding({ + [marketB2.params.collateralToken]: new Holding({ erc20Allowances: { morpho: 0n, permit2: 0n, bundler: 0n, }, user: vaultC.address, - token: marketB2.config.collateralToken, + token: marketB2.params.collateralToken, balance: 0n, permit2Allowances: { morpho: { diff --git a/packages/simulation-sdk/test/handlers/blue/supplyCollateral.test.ts b/packages/simulation-sdk/test/handlers/blue/supplyCollateral.test.ts index 6c7d99a0..dff0d08f 100644 --- a/packages/simulation-sdk/test/handlers/blue/supplyCollateral.test.ts +++ b/packages/simulation-sdk/test/handlers/blue/supplyCollateral.test.ts @@ -43,10 +43,10 @@ describe(type, () => { const expected = _.cloneDeep(dataFixture); expected.positions[userA]![marketA1.id]!.collateral += assets; - expected.holdings[userB]![marketA1.config.collateralToken]!.balance -= + expected.holdings[userB]![marketA1.params.collateralToken]!.balance -= assets; expected.holdings[userB]![ - marketA1.config.collateralToken + marketA1.params.collateralToken ]!.erc20Allowances.morpho -= assets; expect(result).toEqual(expected); @@ -85,7 +85,7 @@ describe(type, () => { ), ).toThrow( new Erc20Errors.InsufficientBalance( - marketA1.config.collateralToken, + marketA1.params.collateralToken, userA, ), ); @@ -129,7 +129,7 @@ describe(type, () => { expected.positions[userC]![marketA3.id]!.borrowShares += borrowShares; expected.holdings[userC]![ - marketB3.config.collateralToken + marketB3.params.collateralToken ]!.erc20Allowances.morpho -= collateral; expect(result).toEqual(expected); diff --git a/packages/simulation-sdk/test/handlers/blue/withdrawCollateral.test.ts b/packages/simulation-sdk/test/handlers/blue/withdrawCollateral.test.ts index f9216e10..5c839a5a 100644 --- a/packages/simulation-sdk/test/handlers/blue/withdrawCollateral.test.ts +++ b/packages/simulation-sdk/test/handlers/blue/withdrawCollateral.test.ts @@ -33,7 +33,7 @@ describe(type, () => { const expected = _.cloneDeep(dataFixture); expected.positions[userB]![marketA1.id]!.collateral -= assets; - expected.holdings[userA]![marketA1.config.collateralToken]!.balance += + expected.holdings[userA]![marketA1.params.collateralToken]!.balance += assets; expect(result).toEqual(expected); From 9ac19db9a8ed9524d2d9fbc8c62845e7a82df2a7 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Fri, 18 Oct 2024 19:14:05 +0200 Subject: [PATCH 11/32] ci(test): use updated foundry action --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index feaebd84..86837023 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,7 +20,7 @@ jobs: node-version-file: .nvmrc cache: pnpm - - uses: foundry-rs/foundry-toolchain@v1 + - uses: foundry-rs/foundry-toolchain@v1.2.0 - run: pnpm install From 61850686eb5beaf84ff42263248aeb52015321f3 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Fri, 18 Oct 2024 19:16:07 +0200 Subject: [PATCH 12/32] fix(test): update market params --- packages/blue-sdk-viem/test/Market.test.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/blue-sdk-viem/test/Market.test.ts b/packages/blue-sdk-viem/test/Market.test.ts index df033ba2..2a436f6d 100644 --- a/packages/blue-sdk-viem/test/Market.test.ts +++ b/packages/blue-sdk-viem/test/Market.test.ts @@ -56,13 +56,13 @@ describe("augment/Market", () => { functionName: "owner", }); - const config = new MarketParams({ + const params = new MarketParams({ ...eth_wstEth, irm: randomAddress(), }); await client.setCode({ - address: config.irm, + address: params.irm, bytecode: (await client.getCode({ address: adaptiveCurveIrm, }))!, @@ -74,7 +74,7 @@ describe("augment/Market", () => { address: morpho, abi: blueAbi, functionName: "enableIrm", - args: [config.irm], + args: [params.irm], }); const timestamp = (await client.timestamp()) + 3n; @@ -85,11 +85,11 @@ describe("augment/Market", () => { address: morpho, abi: blueAbi, functionName: "createMarket", - args: [{ ...config }], + args: [{ ...params }], }); const expectedData = new Market({ - config, + params, totalSupplyAssets: 0n, totalSupplyShares: 0n, totalBorrowAssets: 0n, @@ -100,7 +100,7 @@ describe("augment/Market", () => { rateAtTarget: undefined, }); - const value = await Market.fetch(config.id, client); + const value = await Market.fetch(params.id, client); expect(value).toStrictEqual(expectedData); }); From 7d137fb2c1a1ce5568bc654483837935b86749be Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Mon, 21 Oct 2024 10:05:47 +0200 Subject: [PATCH 13/32] refactor(market): make market price possibly undefined BREAKING CHANGE: The `price` property of the `Market` class is now optional. It is undefined when the market's oracle is undefined or reverts. --- packages/blue-sdk-ethers/src/fetch/Market.ts | 6 +- packages/blue-sdk-viem/src/fetch/Market.ts | 4 +- packages/blue-sdk/src/market/Market.ts | 30 +++-- packages/blue-sdk/src/market/MarketUtils.ts | 116 ++++++++++++++++--- 4 files changed, 126 insertions(+), 30 deletions(-) diff --git a/packages/blue-sdk-ethers/src/fetch/Market.ts b/packages/blue-sdk-ethers/src/fetch/Market.ts index 0d57d2e4..14973952 100644 --- a/packages/blue-sdk-ethers/src/fetch/Market.ts +++ b/packages/blue-sdk-ethers/src/fetch/Market.ts @@ -62,8 +62,10 @@ export async function fetchMarketFromConfig( params.oracle, // @ts-ignore incompatible commonjs type runner, - ).price(overrides) - : 0n, + ) + .price(overrides) + .catch(() => undefined) + : undefined, params.irm === adaptiveCurveIrm ? await AdaptiveCurveIrm__factory.connect( params.irm, diff --git a/packages/blue-sdk-viem/src/fetch/Market.ts b/packages/blue-sdk-viem/src/fetch/Market.ts index 24d1b326..7bd0bd2d 100644 --- a/packages/blue-sdk-viem/src/fetch/Market.ts +++ b/packages/blue-sdk-viem/src/fetch/Market.ts @@ -108,8 +108,8 @@ export async function fetchMarket( address: params.oracle, abi: blueOracleAbi, functionName: "price", - }) - : 0n, + }).catch(() => undefined) + : undefined, params.irm === adaptiveCurveIrm ? await readContract(client, { ...parameters, diff --git a/packages/blue-sdk/src/market/Market.ts b/packages/blue-sdk/src/market/Market.ts index cf7d71a7..7046ee39 100644 --- a/packages/blue-sdk/src/market/Market.ts +++ b/packages/blue-sdk/src/market/Market.ts @@ -33,10 +33,10 @@ export interface MaxWithdrawCollateralOptions { export interface MaxPositionCapacities { supply: CapacityLimit; withdraw: CapacityLimit; - borrow: CapacityLimit; + borrow: CapacityLimit | undefined; repay: CapacityLimit; supplyCollateral: CapacityLimit; - withdrawCollateral: CapacityLimit; + withdrawCollateral: CapacityLimit | undefined; } export interface InputMarket { @@ -47,7 +47,7 @@ export interface InputMarket { totalBorrowShares: bigint; lastUpdate: bigint; fee: bigint; - price: bigint; + price?: bigint; rateAtTarget?: bigint; } @@ -88,8 +88,9 @@ export class Market implements InputMarket { /** * The price as returned by the market's oracle. + * Undefined if the oracle is undefined or reverts. */ - public price: bigint; + public price?: bigint; /** * If the market uses the Adaptive Curve IRM, the rate at target utilization. @@ -377,6 +378,7 @@ export class Market implements InputMarket { /** * Returns the value of a given amount of collateral quoted in loan assets. + * Undefined iff the market's oracle is undefined or reverts. * @param collateral The amount of collateral to quote. */ public getCollateralValue(collateral: bigint) { @@ -385,6 +387,7 @@ export class Market implements InputMarket { /** * Returns the maximum debt allowed given a certain amount of collateral. + * Undefined iff the market's oracle is undefined or reverts. * To calculate the amount of loan assets that can be borrowed, use `getMaxBorrowableAssets`. * @param collateral The amount of collateral to consider. */ @@ -399,6 +402,7 @@ export class Market implements InputMarket { /** * Returns the maximum amount of loan assets that can be borrowed given a certain borrow position. + * Undefined iff the market's oracle is undefined or reverts. * @param position The borrow position to consider. */ public getMaxBorrowableAssets(position: { @@ -410,6 +414,7 @@ export class Market implements InputMarket { /** * Returns the amount of collateral that would be seized in a liquidation given a certain amount of repaid shares. + * Undefined iff the market's oracle is undefined or reverts. * @param repaidShares The amount of shares hypothetically repaid. */ public getLiquidationSeizedAssets(repaidShares: bigint) { @@ -422,6 +427,7 @@ export class Market implements InputMarket { /** * Returns the amount of borrow shares that would be repaid in a liquidation given a certain amount of seized collateral. + * Undefined iff the market's oracle is undefined or reverts. * @param seizedAssets The amount of collateral hypothetically seized. */ public getLiquidationRepaidShares(seizedAssets: bigint) { @@ -434,6 +440,7 @@ export class Market implements InputMarket { /** * Returns the maximum amount of collateral that is worth being seized in a liquidation given a certain borrow position. + * Undefined iff the market's oracle is undefined or reverts. * @param position The borrow position to consider. */ public getSeizableCollateral(position: { @@ -445,6 +452,7 @@ export class Market implements InputMarket { /** * Returns the amount of collateral that can be withdrawn given a certain borrow position. + * Undefined iff the market's oracle is undefined or reverts. * @param position The borrow position to consider. */ public getWithdrawableCollateral( @@ -461,6 +469,7 @@ export class Market implements InputMarket { /** * Returns whether a given borrow position is healthy. + * Undefined iff the market's oracle is undefined or reverts. * @param position The borrow position to check. */ public isHealthy(position: { collateral: bigint; borrowShares: bigint }) { @@ -481,6 +490,7 @@ export class Market implements InputMarket { /** * Returns the price variation required for the given position to reach its liquidation threshold (scaled by WAD). * Negative when healthy (the price needs to drop x%), positive when unhealthy (the price needs to soar x%). + * Returns undefined iff the market's price is undefined. * Returns null if the position is not a borrow. * @param position The borrow position to consider. */ @@ -528,6 +538,7 @@ export class Market implements InputMarket { /** * Returns the maximum amount of loan assets that can be borrowed given a certain borrow position * and the reason for the limit. + * Returns undefined iff the market's price is undefined. * @param position The borrow position to consider. */ public getBorrowCapacityLimit( @@ -539,10 +550,13 @@ export class Market implements InputMarket { borrowShares?: bigint; }, options?: MaxBorrowOptions, - ): CapacityLimit { + ): CapacityLimit | undefined { + const maxBorrowAssets = this.getMaxBorrowAssets(collateral, options); + if (maxBorrowAssets == null) return; + // handle edge cases when the user is liquidatable (maxBorrow < borrow) const maxBorrowableAssets = MathLib.zeroFloorSub( - this.getMaxBorrowAssets(collateral, options), + maxBorrowAssets, this.toBorrowAssets(borrowShares), ); @@ -611,6 +625,7 @@ export class Market implements InputMarket { /** * Returns the maximum amount of collateral assets that can be withdrawn given a certain borrow position * and the reason for the limit. + * Returns undefined iff the market's price is undefined. * @param position The borrow position to consider. */ public getWithdrawCollateralCapacityLimit( @@ -619,11 +634,12 @@ export class Market implements InputMarket { borrowShares: bigint; }, options?: MaxWithdrawCollateralOptions, - ): CapacityLimit { + ): CapacityLimit | undefined { const withdrawableCollateral = this.getWithdrawableCollateral( position, options, ); + if (withdrawableCollateral == null) return; if (position.collateral > withdrawableCollateral) return { diff --git a/packages/blue-sdk/src/market/MarketUtils.ts b/packages/blue-sdk/src/market/MarketUtils.ts index 04b70d33..e766e917 100644 --- a/packages/blue-sdk/src/market/MarketUtils.ts +++ b/packages/blue-sdk/src/market/MarketUtils.ts @@ -236,21 +236,39 @@ export namespace MarketUtils { return MathLib.wMulDown(collateral, lltv); } + /** + * Returns the value of a given amount of collateral quoted in loan assets. + * Return undefined iff the market's price is undefined. + */ export function getCollateralValue( collateral: BigIntish, - { price }: { price: BigIntish }, + { price }: { price?: BigIntish }, ) { + if (price == null) return; + return MathLib.mulDivDown(collateral, price, ORACLE_PRICE_SCALE); } + /** + * Returns the maximum debt allowed given a certain amount of collateral. + * Return undefined iff the market's price is undefined. + * To calculate the amount of loan assets that can be borrowed, use `getMaxBorrowableAssets`. + */ export function getMaxBorrowAssets( collateral: BigIntish, - market: { price: BigIntish }, + market: { price?: BigIntish }, { lltv }: { lltv: BigIntish }, ) { - return MathLib.wMulDown(getCollateralValue(collateral, market), lltv); + const collateralValue = getCollateralValue(collateral, market); + if (collateralValue == null) return; + + return MathLib.wMulDown(collateralValue, lltv); } + /** + * Returns the maximum amount of loan assets that can be borrowed given a certain borrow position. + * Return undefined iff the market's price is undefined. + */ export function getMaxBorrowableAssets( { collateral, @@ -259,25 +277,38 @@ export namespace MarketUtils { market: { totalBorrowAssets: BigIntish; totalBorrowShares: BigIntish; - price: BigIntish; + price?: BigIntish; }, marketParams: { lltv: BigIntish }, ) { + const maxBorrowAssets = getMaxBorrowAssets( + collateral, + market, + marketParams, + ); + if (maxBorrowAssets == null) return; + return MathLib.zeroFloorSub( - getMaxBorrowAssets(collateral, market, marketParams), + maxBorrowAssets, toBorrowAssets(borrowShares, market), ); } + /** + * Returns the amount of collateral that would be seized in a liquidation given a certain amount of repaid shares. + * Return undefined iff the market's price is undefined. + */ export function getLiquidationSeizedAssets( repaidShares: BigIntish, market: { totalBorrowAssets: BigIntish; totalBorrowShares: BigIntish; - price: BigIntish; + price?: BigIntish; }, config: { lltv: BigIntish }, ) { + if (market.price == null) return; + market.price = BigInt(market.price); if (market.price === 0n) return 0n; @@ -291,15 +322,21 @@ export namespace MarketUtils { ); } + /** + * Returns the amount of borrow shares that would be repaid in a liquidation given a certain amount of seized collateral. + * Return undefined iff the market's price is undefined. + */ export function getLiquidationRepaidShares( seizedAssets: BigIntish, market: { totalBorrowAssets: BigIntish; totalBorrowShares: BigIntish; - price: BigIntish; + price?: BigIntish; }, config: { lltv: BigIntish }, ) { + if (market.price == null) return; + return toBorrowShares( MathLib.wDivUp( MathLib.mulDivUp(seizedAssets, market.price, ORACLE_PRICE_SCALE), @@ -310,24 +347,34 @@ export namespace MarketUtils { ); } + /** + * Returns the maximum amount of collateral that is worth being seized in a liquidation given a certain borrow position. + * Return undefined iff the market's price is undefined. + */ export function getSeizableCollateral( position: { collateral: BigIntish; borrowShares: BigIntish }, market: { totalBorrowAssets: BigIntish; totalBorrowShares: BigIntish; - price: BigIntish; + price?: BigIntish; }, config: { lltv: BigIntish }, ) { + if (market.price == null) return; // Must be checked before calling `isHealthy`. + market.price = BigInt(market.price); if (market.price === 0n || isHealthy(position, market, config)) return 0n; return MathLib.min( position.collateral, - getLiquidationSeizedAssets(position.borrowShares, market, config), + getLiquidationSeizedAssets(position.borrowShares, market, config)!, ); } + /** + * Returns the amount of collateral that can be withdrawn given a certain borrow position. + * Return undefined iff the market's price is undefined. + */ export function getWithdrawableCollateral( { collateral, @@ -336,10 +383,12 @@ export namespace MarketUtils { market: { totalBorrowAssets: BigIntish; totalBorrowShares: BigIntish; - price: BigIntish; + price?: BigIntish; }, { lltv }: { lltv: BigIntish }, ) { + if (market.price == null) return; + market.price = BigInt(market.price); if (market.price === 0n) return 0n; @@ -356,6 +405,11 @@ export namespace MarketUtils { ); } + /** + * Returns whether a given borrow position is healthy. + * Return undefined iff the market's price is undefined. + * @param position The borrow position to check. + */ export function isHealthy( { collateral, @@ -364,14 +418,18 @@ export namespace MarketUtils { market: { totalBorrowAssets: BigIntish; totalBorrowShares: BigIntish; - price: BigIntish; + price?: BigIntish; }, marketParams: { lltv: BigIntish }, ) { - return ( - getMaxBorrowAssets(collateral, market, marketParams) >= - toBorrowAssets(borrowShares, market) + const maxBorrowAssets = getMaxBorrowAssets( + collateral, + market, + marketParams, ); + if (maxBorrowAssets == null) return; + + return maxBorrowAssets >= toBorrowAssets(borrowShares, market); } /** @@ -405,6 +463,7 @@ export namespace MarketUtils { /** * Returns the price variation required for the given position to reach its liquidation threshold (scaled by WAD). * Negative when healthy (the price needs to drop x%), positive when unhealthy (the price needs to soar x%). + * Returns undefined iff the market's price is undefined. * Returns null if the position is not a borrow. */ export function getPriceVariationToLiquidationPrice( @@ -412,10 +471,12 @@ export namespace MarketUtils { market: { totalBorrowAssets: BigIntish; totalBorrowShares: BigIntish; - price: BigIntish; + price?: BigIntish; }, marketParams: { lltv: BigIntish }, ) { + if (market.price == null) return; + market.price = BigInt(market.price); if (market.price === 0n) return null; @@ -429,6 +490,11 @@ export namespace MarketUtils { return MathLib.wDivUp(liquidationPrice, market.price) - MathLib.WAD; } + /** + * Returns the health factor of a given borrow position (scaled by WAD). + * Returns undefined iff the market's price is undefined. + * Returns null if the position is not a borrow. + */ export function getHealthFactor( { collateral, @@ -437,7 +503,7 @@ export namespace MarketUtils { market: { totalBorrowAssets: BigIntish; totalBorrowShares: BigIntish; - price: BigIntish; + price?: BigIntish; }, marketParams: { lltv: BigIntish }, ) { @@ -453,10 +519,16 @@ export namespace MarketUtils { market, marketParams, ); + if (maxBorrowAssets == null) return; return MathLib.wDivDown(maxBorrowAssets, borrowAssets); } + /** + * Returns the loan-to-value ratio of a given borrow position (scaled by WAD). + * Returns undefined iff the market's price is undefined. + * Returns null if the position is not a borrow. + */ export function getLtv( { collateral, @@ -465,7 +537,7 @@ export namespace MarketUtils { market: { totalBorrowAssets: BigIntish; totalBorrowShares: BigIntish; - price: BigIntish; + price?: BigIntish; }, ) { borrowShares = BigInt(borrowShares); @@ -473,6 +545,7 @@ export namespace MarketUtils { if (borrowShares === 0n || market.totalBorrowShares === 0n) return null; const collateralValue = getCollateralValue(collateral, market); + if (collateralValue == null) return; if (collateralValue === 0n) return MathLib.MAX_UINT_256; return MathLib.wDivUp( @@ -481,17 +554,22 @@ export namespace MarketUtils { ); } + /** + * Returns the usage ratio of the maximum borrow capacity given a certain borrow position (scaled by WAD). + * Returns undefined iff the market's price is undefined. + */ export function getBorrowCapacityUsage( position: { collateral: BigIntish; borrowShares: BigIntish }, market: { totalBorrowAssets: BigIntish; totalBorrowShares: BigIntish; - price: BigIntish; + price?: BigIntish; }, marketParams: { lltv: BigIntish }, ) { const hf = getHealthFactor(position, market, marketParams); - if (hf === null) return null; + if (hf === undefined) return; + if (hf === null) return 0n; if (hf === 0n) return MathLib.MAX_UINT_256; return MathLib.wDivUp(MathLib.WAD, hf); From c048141a15a493257f5145eb490e558e1004e21b Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Mon, 21 Oct 2024 10:16:44 +0200 Subject: [PATCH 14/32] build(deps): bump dev dependencies --- packages/blue-sdk-ethers/package.json | 4 +- packages/blue-sdk-viem/package.json | 4 +- packages/blue-sdk-wagmi/package.json | 11 +- packages/blue-sdk/package.json | 4 +- packages/bundler-sdk-viem/package.json | 4 +- packages/liquidation-sdk-viem/package.json | 4 +- packages/morpho-test/package.json | 4 +- packages/simulation-sdk-wagmi/package.json | 10 +- packages/simulation-sdk/package.json | 4 +- packages/test-ethers/package.json | 4 +- packages/test-viem/package.json | 4 +- packages/test-wagmi/package.json | 8 +- packages/test-wagmi/src/react.ts | 3 +- packages/test-wagmi/src/vitest.ts | 4 +- packages/test/package.json | 4 +- pnpm-lock.yaml | 404 ++++++++++----------- 16 files changed, 224 insertions(+), 256 deletions(-) diff --git a/packages/blue-sdk-ethers/package.json b/packages/blue-sdk-ethers/package.json index f2191e87..ce6fcdbf 100644 --- a/packages/blue-sdk-ethers/package.json +++ b/packages/blue-sdk-ethers/package.json @@ -20,11 +20,11 @@ "@morpho-org/morpho-ts": "workspace:^", "@morpho-org/test": "workspace:^", "@morpho-org/test-ethers": "workspace:^", - "@types/node": "^22.1.0", + "@types/node": "^22.7.7", "ethers": "^6.13.3", "ethers-types": "^3.17.0", "typescript": "^5.6.3", - "viem": "^2.21.29", + "viem": "^2.21.32", "vitest": "^2.1.3" }, "peerDependencies": { diff --git a/packages/blue-sdk-viem/package.json b/packages/blue-sdk-viem/package.json index b5e3aace..5b854313 100644 --- a/packages/blue-sdk-viem/package.json +++ b/packages/blue-sdk-viem/package.json @@ -30,11 +30,11 @@ "@morpho-org/morpho-ts": "workspace:^", "@morpho-org/test": "workspace:^", "@morpho-org/test-viem": "workspace:^", - "@types/node": "^22.1.0", + "@types/node": "^22.7.7", "hardhat": "^2.22.13", "ts-node": "^10.9.2", "typescript": "^5.6.3", - "viem": "^2.21.29", + "viem": "^2.21.32", "vitest": "^2.1.3" }, "publishConfig": { diff --git a/packages/blue-sdk-wagmi/package.json b/packages/blue-sdk-wagmi/package.json index 9637a3b6..be55a77e 100644 --- a/packages/blue-sdk-wagmi/package.json +++ b/packages/blue-sdk-wagmi/package.json @@ -34,20 +34,19 @@ "@morpho-org/test": "workspace:^", "@morpho-org/test-viem": "workspace:^", "@morpho-org/test-wagmi": "workspace:^", - "@tanstack/query-core": "^5.55.4", - "@tanstack/react-query": "^5.59.0", + "@tanstack/query-core": "^5.59.13", + "@tanstack/react-query": "^5.59.15", "@testing-library/dom": "^10.4.0", "@testing-library/react": "^16.0.1", - "@types/node": "^22.1.0", "@types/react": "^18.3.1", "@types/react-dom": "^18.3.0", - "@wagmi/core": "^2.13.5", + "@wagmi/core": "^2.13.9", "react": "^18.3.1", "react-dom": "^18.3.1", "typescript": "^5.6.3", - "viem": "^2.21.29", + "viem": "^2.21.32", "vitest": "^2.1.3", - "wagmi": "^2.12.19" + "wagmi": "^2.12.20" }, "publishConfig": { "main": "lib/index.js", diff --git a/packages/blue-sdk/package.json b/packages/blue-sdk/package.json index 1c707f13..b451bb93 100644 --- a/packages/blue-sdk/package.json +++ b/packages/blue-sdk/package.json @@ -29,9 +29,9 @@ "@morpho-org/morpho-ts": "workspace:^", "@morpho-org/test": "workspace:^", "@morpho-org/test-viem": "workspace:^", - "@types/node": "^22.1.0", + "@types/node": "^22.7.7", "typescript": "^5.6.3", - "viem": "^2.21.29", + "viem": "^2.21.32", "viem-deal": "^2.0.1", "vitest": "^2.1.3" }, diff --git a/packages/bundler-sdk-viem/package.json b/packages/bundler-sdk-viem/package.json index 051f76eb..0a1f1852 100644 --- a/packages/bundler-sdk-viem/package.json +++ b/packages/bundler-sdk-viem/package.json @@ -36,10 +36,10 @@ "@morpho-org/test-wagmi": "workspace:^", "@testing-library/dom": "^10.4.0", "@types/lodash": "^4.17.7", - "@types/node": "^22.2.0", + "@types/node": "^22.7.7", "lodash": "^4.17.21", "typescript": "^5.6.3", - "viem": "^2.21.29", + "viem": "^2.21.32", "vitest": "^2.1.3" }, "publishConfig": { diff --git a/packages/liquidation-sdk-viem/package.json b/packages/liquidation-sdk-viem/package.json index 38e43ac7..59974cbd 100644 --- a/packages/liquidation-sdk-viem/package.json +++ b/packages/liquidation-sdk-viem/package.json @@ -46,7 +46,7 @@ "@morpho-org/morpho-ts": "workspace:^", "@morpho-org/test": "workspace:^", "@morpho-org/test-viem": "workspace:^", - "@types/node": "^22.7.0", + "@types/node": "^22.7.7", "evm-maths": "^7.0.0", "executooor-viem": "^1.3.3", "fetch-mock": "^11.1.5", @@ -54,7 +54,7 @@ "nock": "beta", "ts-node": "^10.9.2", "typescript": "^5.6.3", - "viem": "^2.21.29", + "viem": "^2.21.32", "vitest": "^2.1.3" }, "publishConfig": { diff --git a/packages/morpho-test/package.json b/packages/morpho-test/package.json index 483a8959..608bfacb 100644 --- a/packages/morpho-test/package.json +++ b/packages/morpho-test/package.json @@ -28,9 +28,9 @@ "@morpho-org/blue-sdk": "workspace:^", "@morpho-org/morpho-ts": "workspace:^", "@morpho-org/test": "workspace:^", - "@types/node": "^22.7.5", + "@types/node": "^22.7.7", "typescript": "^5.6.3", - "viem": "^2.21.18" + "viem": "^2.21.32" }, "publishConfig": { "main": "lib/index.js", diff --git a/packages/simulation-sdk-wagmi/package.json b/packages/simulation-sdk-wagmi/package.json index df54a355..e0d7bd19 100644 --- a/packages/simulation-sdk-wagmi/package.json +++ b/packages/simulation-sdk-wagmi/package.json @@ -41,21 +41,19 @@ "@morpho-org/test": "workspace:^", "@morpho-org/test-viem": "workspace:^", "@morpho-org/test-wagmi": "workspace:^", - "@tanstack/query-core": "^5.59.0", - "@tanstack/react-query": "^5.59.0", + "@tanstack/query-core": "^5.59.13", + "@tanstack/react-query": "^5.59.15", "@types/lodash": "^4.17.9", - "@types/node": "^22.1.0", "@types/react": "^18.3.1", "@types/react-dom": "^18.3.0", - "@wagmi/core": "^2.13.5", "lodash": "^4.17.21", "mutative": "^1.0.11", "react": "^18.3.1", "react-dom": "^18.3.1", "typescript": "^5.6.3", - "viem": "^2.21.29", + "viem": "^2.21.32", "vitest": "^2.1.3", - "wagmi": "^2.12.19" + "wagmi": "^2.12.20" }, "publishConfig": { "main": "lib/index.js", diff --git a/packages/simulation-sdk/package.json b/packages/simulation-sdk/package.json index f5ec3dce..4e5c5ce8 100644 --- a/packages/simulation-sdk/package.json +++ b/packages/simulation-sdk/package.json @@ -30,11 +30,11 @@ "@morpho-org/morpho-ts": "workspace:^", "@morpho-org/test": "workspace:^", "@types/lodash": "^4.17.9", - "@types/node": "^22.1.0", + "@types/node": "^22.7.7", "lodash": "^4.17.21", "mutative": "^1.0.11", "typescript": "^5.6.3", - "viem": "^2.21.29", + "viem": "^2.21.32", "vitest": "^2.1.3" }, "publishConfig": { diff --git a/packages/test-ethers/package.json b/packages/test-ethers/package.json index 9856cf11..f4ff2663 100644 --- a/packages/test-ethers/package.json +++ b/packages/test-ethers/package.json @@ -21,10 +21,10 @@ "devDependencies": { "@morpho-org/test": "workspace:^", "@morpho-org/test-viem": "workspace:^", - "@types/node": "^22.7.4", + "@types/node": "^22.7.7", "ethers": "^6.13.3", "typescript": "^5.6.3", - "viem": "^2.21.29", + "viem": "^2.21.32", "vitest": "^2.1.3" }, "publishConfig": { diff --git a/packages/test-viem/package.json b/packages/test-viem/package.json index d0bd54fb..8f6d5408 100644 --- a/packages/test-viem/package.json +++ b/packages/test-viem/package.json @@ -29,9 +29,9 @@ }, "devDependencies": { "@morpho-org/test": "workspace:^", - "@types/node": "^22.7.4", + "@types/node": "^22.7.7", "typescript": "^5.6.3", - "viem": "^2.21.29", + "viem": "^2.21.32", "viem-deal": "^2.0.1", "vitest": "^2.1.3" }, diff --git a/packages/test-wagmi/package.json b/packages/test-wagmi/package.json index cd83f51c..e08251c1 100644 --- a/packages/test-wagmi/package.json +++ b/packages/test-wagmi/package.json @@ -24,17 +24,17 @@ "@tanstack/react-query": "^5.59.0", "@testing-library/dom": "^10.4.0", "@testing-library/react": "^16.0.1", - "@types/node": "^22.7.4", + "@types/node": "^22.7.7", "@types/react": "^18.3.1", "@types/react-dom": "^18.3.0", - "@wagmi/core": "^2.13.8", + "@wagmi/core": "^2.13.9", "react": "^18.3.1", "react-dom": "^18.3.1", "typescript": "^5.6.3", - "viem": "^2.21.29", + "viem": "^2.21.32", "viem-deal": "^2.0.1", "vitest": "^2.1.3", - "wagmi": "^2.12.19" + "wagmi": "^2.12.20" }, "publishConfig": { "main": "lib/index.js", diff --git a/packages/test-wagmi/src/react.ts b/packages/test-wagmi/src/react.ts index 2b9ed475..0052daa7 100644 --- a/packages/test-wagmi/src/react.ts +++ b/packages/test-wagmi/src/react.ts @@ -9,7 +9,6 @@ import { waitFor as rtl_waitFor, type waitForOptions, } from "@testing-library/react"; -import type { Config } from "@wagmi/core"; import { type FunctionComponent, type ReactElement, @@ -17,7 +16,7 @@ import { createElement, } from "react"; import type { Chain, Transport } from "viem"; -import { WagmiProvider } from "wagmi"; +import { type Config, WagmiProvider } from "wagmi"; // biome-ignore lint/suspicious/noExplicitAny: test utility export function createWrapper>( diff --git a/packages/test-wagmi/src/vitest.ts b/packages/test-wagmi/src/vitest.ts index 53fdbf01..ef3d3c34 100644 --- a/packages/test-wagmi/src/vitest.ts +++ b/packages/test-wagmi/src/vitest.ts @@ -4,9 +4,9 @@ import { createViemTest, testAccount, } from "@morpho-org/test-viem"; -import { createConfig, mock } from "@wagmi/core"; +import { mock } from "@wagmi/core"; import type { Chain, HttpTransport } from "viem"; -import type { Config } from "wagmi"; +import { type Config, createConfig } from "wagmi"; export interface WagmiConfigTestContext { config: Config>; diff --git a/packages/test/package.json b/packages/test/package.json index 3b00c215..7e0fc380 100644 --- a/packages/test/package.json +++ b/packages/test/package.json @@ -20,9 +20,9 @@ }, "devDependencies": { "@types/lodash.kebabcase": "^4.1.9", - "@types/node": "^22.7.4", + "@types/node": "^22.7.7", "typescript": "^5.6.3", - "viem": "^2.21.29", + "viem": "^2.21.32", "vitest": "^2.1.3" }, "publishConfig": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f6f45ace..94d860b0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,13 +16,13 @@ importers: version: 1.9.4 '@commitlint/cli': specifier: ^19.5.0 - version: 19.5.0(@types/node@22.7.5)(typescript@5.6.3) + version: 19.5.0(@types/node@22.7.7)(typescript@5.6.3) '@commitlint/config-conventional': specifier: ^19.5.0 version: 19.5.0 '@vitest/coverage-v8': specifier: ^2.1.3 - version: 2.1.3(vitest@2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0)) + version: 2.1.3(vitest@2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0)) conventional-changelog-conventionalcommits: specifier: ^8.0.0 version: 8.0.0 @@ -52,13 +52,13 @@ importers: version: 5.6.3 vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) packages/blue-api-sdk: devDependencies: '@graphql-codegen/cli': specifier: ^5.0.0 - version: 5.0.3(@parcel/watcher@2.4.1)(@types/node@22.7.5)(bufferutil@4.0.8)(encoding@0.1.13)(enquirer@2.4.1)(graphql@16.9.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + version: 5.0.3(@parcel/watcher@2.4.1)(@types/node@22.7.7)(bufferutil@4.0.8)(encoding@0.1.13)(enquirer@2.4.1)(graphql@16.9.0)(typescript@5.6.3)(utf-8-validate@5.0.10) '@graphql-codegen/typescript': specifier: ^4.0.1 version: 4.1.0(encoding@0.1.13)(graphql@16.9.0) @@ -91,20 +91,20 @@ importers: specifier: workspace:^ version: link:../test-viem '@types/node': - specifier: ^22.1.0 - version: 22.7.5 + specifier: ^22.7.7 + version: 22.7.7 typescript: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.29 - version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.32 + version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) viem-deal: specifier: ^2.0.1 - version: 2.0.1(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + version: 2.0.1(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) packages/blue-sdk-ethers: dependencies: @@ -128,8 +128,8 @@ importers: specifier: workspace:^ version: link:../test-ethers '@types/node': - specifier: ^22.1.0 - version: 22.7.5 + specifier: ^22.7.7 + version: 22.7.7 ethers: specifier: ^6.13.3 version: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -140,11 +140,11 @@ importers: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.29 - version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.32 + version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) packages/blue-sdk-viem: devDependencies: @@ -164,23 +164,23 @@ importers: specifier: workspace:^ version: link:../test-viem '@types/node': - specifier: ^22.1.0 - version: 22.7.5 + specifier: ^22.7.7 + version: 22.7.7 hardhat: specifier: ^2.22.13 - version: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + version: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.7.7)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@22.7.5)(typescript@5.6.3) + version: 10.9.2(@types/node@22.7.7)(typescript@5.6.3) typescript: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.29 - version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.32 + version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) packages/blue-sdk-wagmi: devDependencies: @@ -203,10 +203,10 @@ importers: specifier: workspace:^ version: link:../test-wagmi '@tanstack/query-core': - specifier: ^5.55.4 + specifier: ^5.59.13 version: 5.59.13 '@tanstack/react-query': - specifier: ^5.59.0 + specifier: ^5.59.15 version: 5.59.15(react@18.3.1) '@testing-library/dom': specifier: ^10.4.0 @@ -214,9 +214,6 @@ importers: '@testing-library/react': specifier: ^16.0.1 version: 16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@types/node': - specifier: ^22.1.0 - version: 22.7.5 '@types/react': specifier: ^18.3.1 version: 18.3.11 @@ -224,8 +221,8 @@ importers: specifier: ^18.3.0 version: 18.3.1 '@wagmi/core': - specifier: ^2.13.5 - version: 2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + specifier: ^2.13.9 + version: 2.13.9(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) react: specifier: ^18.3.1 version: 18.3.1 @@ -236,14 +233,14 @@ importers: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.29 - version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.32 + version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) wagmi: - specifier: ^2.12.19 - version: 2.12.19(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + specifier: ^2.12.20 + version: 2.12.20(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) packages/bundler-sdk-viem: devDependencies: @@ -278,8 +275,8 @@ importers: specifier: ^4.17.7 version: 4.17.10 '@types/node': - specifier: ^22.2.0 - version: 22.7.5 + specifier: ^22.7.7 + version: 22.7.7 lodash: specifier: ^4.17.21 version: 4.17.21 @@ -287,11 +284,11 @@ importers: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.29 - version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.32 + version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) packages/liquidation-sdk-viem: dependencies: @@ -300,7 +297,7 @@ importers: version: 6.10.0(axios@1.7.7)(typescript@5.6.3) executooor-viem: specifier: ^1.3.3 - version: 1.3.3(evm-maths@7.0.0)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + version: 1.3.3(evm-maths@7.0.0)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) graphql: specifier: ^16.9.0 version: 16.9.0 @@ -313,7 +310,7 @@ importers: devDependencies: '@graphql-codegen/cli': specifier: ^5.0.3 - version: 5.0.3(@parcel/watcher@2.4.1)(@types/node@22.7.5)(bufferutil@4.0.8)(encoding@0.1.13)(enquirer@2.4.1)(graphql@16.9.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + version: 5.0.3(@parcel/watcher@2.4.1)(@types/node@22.7.7)(bufferutil@4.0.8)(encoding@0.1.13)(enquirer@2.4.1)(graphql@16.9.0)(typescript@5.6.3)(utf-8-validate@5.0.10) '@graphql-codegen/import-types-preset': specifier: ^3.0.0 version: 3.0.0(encoding@0.1.13)(graphql@16.9.0) @@ -351,8 +348,8 @@ importers: specifier: workspace:^ version: link:../test-viem '@types/node': - specifier: ^22.7.0 - version: 22.7.5 + specifier: ^22.7.7 + version: 22.7.7 evm-maths: specifier: ^7.0.0 version: 7.0.0 @@ -361,22 +358,22 @@ importers: version: 11.1.5 hardhat: specifier: ^2.22.13 - version: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + version: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.7.7)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) nock: specifier: beta version: 14.0.0-beta.15 ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@22.7.5)(typescript@5.6.3) + version: 10.9.2(@types/node@22.7.7)(typescript@5.6.3) typescript: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.29 - version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.32 + version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) packages/morpho-test: devDependencies: @@ -390,14 +387,14 @@ importers: specifier: workspace:^ version: link:../test '@types/node': - specifier: ^22.7.5 - version: 22.7.5 + specifier: ^22.7.7 + version: 22.7.7 typescript: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.18 - version: 2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.32 + version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) packages/morpho-ts: devDependencies: @@ -406,7 +403,7 @@ importers: version: 5.6.3 vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) packages/simulation-sdk: devDependencies: @@ -426,8 +423,8 @@ importers: specifier: ^4.17.9 version: 4.17.10 '@types/node': - specifier: ^22.1.0 - version: 22.7.5 + specifier: ^22.7.7 + version: 22.7.7 lodash: specifier: ^4.17.21 version: 4.17.21 @@ -438,11 +435,11 @@ importers: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.29 - version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.32 + version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) packages/simulation-sdk-wagmi: devDependencies: @@ -474,26 +471,20 @@ importers: specifier: workspace:^ version: link:../test-wagmi '@tanstack/query-core': - specifier: ^5.59.0 + specifier: ^5.59.13 version: 5.59.13 '@tanstack/react-query': - specifier: ^5.59.0 + specifier: ^5.59.15 version: 5.59.15(react@18.3.1) '@types/lodash': specifier: ^4.17.9 version: 4.17.10 - '@types/node': - specifier: ^22.1.0 - version: 22.7.5 '@types/react': specifier: ^18.3.1 version: 18.3.11 '@types/react-dom': specifier: ^18.3.0 version: 18.3.1 - '@wagmi/core': - specifier: ^2.13.5 - version: 2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) lodash: specifier: ^4.17.21 version: 4.17.21 @@ -510,14 +501,14 @@ importers: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.29 - version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.32 + version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) wagmi: - specifier: ^2.12.19 - version: 2.12.19(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + specifier: ^2.12.20 + version: 2.12.20(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) packages/test: dependencies: @@ -529,17 +520,17 @@ importers: specifier: ^4.1.9 version: 4.1.9 '@types/node': - specifier: ^22.7.4 - version: 22.7.5 + specifier: ^22.7.7 + version: 22.7.7 typescript: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.29 - version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.32 + version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) packages/test-ethers: devDependencies: @@ -550,8 +541,8 @@ importers: specifier: workspace:^ version: link:../test-viem '@types/node': - specifier: ^22.7.4 - version: 22.7.5 + specifier: ^22.7.7 + version: 22.7.7 ethers: specifier: ^6.13.3 version: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -559,11 +550,11 @@ importers: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.29 - version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.32 + version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) packages/test-viem: dependencies: @@ -575,20 +566,20 @@ importers: specifier: workspace:^ version: link:../test '@types/node': - specifier: ^22.7.4 - version: 22.7.5 + specifier: ^22.7.7 + version: 22.7.7 typescript: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.29 - version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.32 + version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) viem-deal: specifier: ^2.0.1 - version: 2.0.1(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + version: 2.0.1(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) packages/test-wagmi: devDependencies: @@ -608,8 +599,8 @@ importers: specifier: ^16.0.1 version: 16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/node': - specifier: ^22.7.4 - version: 22.7.5 + specifier: ^22.7.7 + version: 22.7.7 '@types/react': specifier: ^18.3.1 version: 18.3.11 @@ -617,8 +608,8 @@ importers: specifier: ^18.3.0 version: 18.3.1 '@wagmi/core': - specifier: ^2.13.8 - version: 2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + specifier: ^2.13.9 + version: 2.13.9(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) react: specifier: ^18.3.1 version: 18.3.1 @@ -629,17 +620,17 @@ importers: specifier: ^5.6.3 version: 5.6.3 viem: - specifier: ^2.21.29 - version: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.21.32 + version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) viem-deal: specifier: ^2.0.1 - version: 2.0.1(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + version: 2.0.1(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) wagmi: - specifier: ^2.12.19 - version: 2.12.19(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + specifier: ^2.12.20 + version: 2.12.20(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) packages: @@ -2055,8 +2046,8 @@ packages: resolution: {integrity: sha512-ihb3B0T/wJm1eUuArYP4lCTSEoZsClHhuWyfo/kMX3m/odpqNcPfsz5O2A3NT7dXCAgWPGDQGPqygCpgeniKMw==} engines: {node: '>=12.0.0'} - '@metamask/sdk-communication-layer@0.29.2': - resolution: {integrity: sha512-Xfa1DXOg0bfvMqXa3o/Y43bm2kHYyD4YdR0XiuhL70NJzPcUPM53I1O7aSg83ogRHsHI4LM7dEEMEo6w6uQgdg==} + '@metamask/sdk-communication-layer@0.30.0': + resolution: {integrity: sha512-q5nbdYkAf76MsZxi1l5MJEAyd8sY9jLRapC8a7x1Q1BNV4rzQeFeux/d0mJ/jTR2LAwbnLZs2rL226AM75oK4w==} peerDependencies: cross-fetch: ^4.0.0 eciesjs: ^0.3.16 @@ -2064,8 +2055,8 @@ packages: readable-stream: ^3.6.2 socket.io-client: ^4.5.1 - '@metamask/sdk-install-modal-web@0.29.2': - resolution: {integrity: sha512-AOiRpv0pIxIyWYTuBWRymdTVwdZrsVNGNFv0I7RlBU0s1hQ6lapEq2eeIv30d9E88mS/DI6F3R0ArSg0So7W2g==} + '@metamask/sdk-install-modal-web@0.30.0': + resolution: {integrity: sha512-1gT533Huja9tK3cmttvcpZirRAtWJ7vnYH+lnNRKEj2xIP335Df2cOwS+zqNC4GlRCZw7A3IsTjIzlKoxBY1uQ==} peerDependencies: i18next: 23.11.5 react: ^18.2.0 @@ -2079,8 +2070,8 @@ packages: react-native: optional: true - '@metamask/sdk@0.29.3': - resolution: {integrity: sha512-raOqMlsEjzsz3bOAK1x7/1QyGfnCyGvFZOT4OYoyepKu3QG3ex3o8iHdVYlcMkqZVcOsXWLsrUorn0SYploXyw==} + '@metamask/sdk@0.30.0': + resolution: {integrity: sha512-w+M5/Gfk9RRqvnCI5foKppH1dO79fu06defXxU6GfwKDZRhPbx0wgtFhQoTSWDlYOguC3MOM/PI1YCFREeAfsA==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 @@ -2783,6 +2774,9 @@ packages: '@types/node@22.7.5': resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} + '@types/node@22.7.7': + resolution: {integrity: sha512-SRxCrrg9CL/y54aiMCG3edPKdprgMVGDXjA3gB8UmmBW5TcXzRUYAh8EWzTnSJFAd1rgImPELza+A3bJ+qxz8Q==} + '@types/pbkdf2@3.1.2': resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} @@ -2861,18 +2855,18 @@ packages: '@vitest/utils@2.1.3': resolution: {integrity: sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==} - '@wagmi/connectors@5.2.1': - resolution: {integrity: sha512-+QxjRJnSlhBhq6wiMU4zxdfKgszk2Ul7rHxOHdKyq4bTNXikc0iBu+XxLJKBpEsL065rUtBitaBS70xkSWw5ow==} + '@wagmi/connectors@5.2.2': + resolution: {integrity: sha512-G9+0tLWLiG+CyZzI6cqV5mgUnLkYFtdN+kTD7RHesquwRXY6hzTAjCJL19gBuAKzrTXUhaNcxuIYszsRV+/qFA==} peerDependencies: - '@wagmi/core': 2.13.8 + '@wagmi/core': 2.13.9 typescript: '>=5.0.4' viem: 2.x peerDependenciesMeta: typescript: optional: true - '@wagmi/core@2.13.8': - resolution: {integrity: sha512-bX84cpLq3WWQgGthJlSgcWPAOdLzrP/W0jnbz5XowkCUn6j/T77WyxN5pBb+HmLoJf3ei9tkX9zWhMpczTc3cA==} + '@wagmi/core@2.13.9': + resolution: {integrity: sha512-l5pGU97ANyCj48D/pffNkw5AB1R7K2X0vEgCGyHMo21u/Pj/SHvoA35VPta/kqOSZzELXpLxBbOZD4yw7FyCxQ==} peerDependencies: '@tanstack/query-core': '>=5.0.0' typescript: '>=5.0.4' @@ -6457,16 +6451,8 @@ packages: peerDependencies: viem: ^2.21.18 - viem@2.21.27: - resolution: {integrity: sha512-lBpldSmwmKZ8jIiVLqoplPnuMs2Cza8tK0/G9m+ZjqfbgEp4+BPviFBJWCDNFxSp8H3gPzAuqj8o1WKQyq3wlg==} - peerDependencies: - typescript: '>=5.0.4' - peerDependenciesMeta: - typescript: - optional: true - - viem@2.21.29: - resolution: {integrity: sha512-n9LoCJjmI1XsE33nl+M4p3Wy5hczv7YC682RpX4Qk9cw8s9HJU+hUi5eDcNDPBcAwIHGCPKsf8yFBEYnE2XYVg==} + viem@2.21.32: + resolution: {integrity: sha512-2oXt5JNIb683oy7C8wuIJ/SeL3XtHVMEQpy1U2TA6WMnJQ4ScssRvyPwYLcaP6mKlrGXE/cR/V7ncWpvLUVPYQ==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: @@ -6537,8 +6523,8 @@ packages: vlq@1.0.1: resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} - wagmi@2.12.19: - resolution: {integrity: sha512-ksXR7r8xniaSVYBwmjJFMeqkBf1TNB2L+3yGFD4Elu7+GQdxjrZp6+SR8HYIOGFtR7BGp1VUPGTxbndg7ghxVw==} + wagmi@2.12.20: + resolution: {integrity: sha512-U7UCQQL38ed2AaAMFwfSYjSFW94CwAbf/+ntaG43z1U5i8jdrxh85tP7rcpMWgnd7510/S3Gje0m7uTIS3iYFw==} peerDependencies: '@tanstack/react-query': '>=5.0.0' react: '>=18' @@ -7697,11 +7683,11 @@ snapshots: preact: 10.24.3 sha.js: 2.4.11 - '@commitlint/cli@19.5.0(@types/node@22.7.5)(typescript@5.6.3)': + '@commitlint/cli@19.5.0(@types/node@22.7.7)(typescript@5.6.3)': dependencies: '@commitlint/format': 19.5.0 '@commitlint/lint': 19.5.0 - '@commitlint/load': 19.5.0(@types/node@22.7.5)(typescript@5.6.3) + '@commitlint/load': 19.5.0(@types/node@22.7.7)(typescript@5.6.3) '@commitlint/read': 19.5.0 '@commitlint/types': 19.5.0 tinyexec: 0.3.1 @@ -7748,7 +7734,7 @@ snapshots: '@commitlint/rules': 19.5.0 '@commitlint/types': 19.5.0 - '@commitlint/load@19.5.0(@types/node@22.7.5)(typescript@5.6.3)': + '@commitlint/load@19.5.0(@types/node@22.7.7)(typescript@5.6.3)': dependencies: '@commitlint/config-validator': 19.5.0 '@commitlint/execute-rule': 19.5.0 @@ -7756,7 +7742,7 @@ snapshots: '@commitlint/types': 19.5.0 chalk: 5.3.0 cosmiconfig: 9.0.0(typescript@5.6.3) - cosmiconfig-typescript-loader: 5.0.0(@types/node@22.7.5)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3) + cosmiconfig-typescript-loader: 5.0.0(@types/node@22.7.7)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -8045,7 +8031,7 @@ snapshots: graphql: 16.9.0 tslib: 2.6.3 - '@graphql-codegen/cli@5.0.3(@parcel/watcher@2.4.1)(@types/node@22.7.5)(bufferutil@4.0.8)(encoding@0.1.13)(enquirer@2.4.1)(graphql@16.9.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': + '@graphql-codegen/cli@5.0.3(@parcel/watcher@2.4.1)(@types/node@22.7.7)(bufferutil@4.0.8)(encoding@0.1.13)(enquirer@2.4.1)(graphql@16.9.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': dependencies: '@babel/generator': 7.25.7 '@babel/template': 7.25.7 @@ -8056,12 +8042,12 @@ snapshots: '@graphql-tools/apollo-engine-loader': 8.0.2(encoding@0.1.13)(graphql@16.9.0) '@graphql-tools/code-file-loader': 8.1.4(graphql@16.9.0) '@graphql-tools/git-loader': 8.0.8(graphql@16.9.0) - '@graphql-tools/github-loader': 8.0.2(@types/node@22.7.5)(encoding@0.1.13)(graphql@16.9.0) + '@graphql-tools/github-loader': 8.0.2(@types/node@22.7.7)(encoding@0.1.13)(graphql@16.9.0) '@graphql-tools/graphql-file-loader': 8.0.2(graphql@16.9.0) '@graphql-tools/json-file-loader': 8.0.2(graphql@16.9.0) '@graphql-tools/load': 8.0.3(graphql@16.9.0) - '@graphql-tools/prisma-loader': 8.0.6(@types/node@22.7.5)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) - '@graphql-tools/url-loader': 8.0.4(@types/node@22.7.5)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) + '@graphql-tools/prisma-loader': 8.0.6(@types/node@22.7.7)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) + '@graphql-tools/url-loader': 8.0.4(@types/node@22.7.7)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.5.5(graphql@16.9.0) '@whatwg-node/fetch': 0.9.21 chalk: 4.1.2 @@ -8069,7 +8055,7 @@ snapshots: debounce: 1.2.1 detect-indent: 6.1.0 graphql: 16.9.0 - graphql-config: 5.1.3(@types/node@22.7.5)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + graphql-config: 5.1.3(@types/node@22.7.7)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(typescript@5.6.3)(utf-8-validate@5.0.10) inquirer: 8.2.6 is-glob: 4.0.3 jiti: 1.21.6 @@ -8325,14 +8311,14 @@ snapshots: - bufferutil - utf-8-validate - '@graphql-tools/executor-http@1.1.7(@types/node@22.7.5)(graphql@16.9.0)': + '@graphql-tools/executor-http@1.1.7(@types/node@22.7.7)(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.5.5(graphql@16.9.0) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/fetch': 0.9.21 extract-files: 11.0.0 graphql: 16.9.0 - meros: 1.3.0(@types/node@22.7.5) + meros: 1.3.0(@types/node@22.7.7) tslib: 2.8.0 value-or-promise: 1.0.12 transitivePeerDependencies: @@ -8371,10 +8357,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/github-loader@8.0.2(@types/node@22.7.5)(encoding@0.1.13)(graphql@16.9.0)': + '@graphql-tools/github-loader@8.0.2(@types/node@22.7.7)(encoding@0.1.13)(graphql@16.9.0)': dependencies: '@ardatan/sync-fetch': 0.0.1(encoding@0.1.13) - '@graphql-tools/executor-http': 1.1.7(@types/node@22.7.5)(graphql@16.9.0) + '@graphql-tools/executor-http': 1.1.7(@types/node@22.7.7)(graphql@16.9.0) '@graphql-tools/graphql-tag-pluck': 8.3.3(graphql@16.9.0) '@graphql-tools/utils': 10.5.5(graphql@16.9.0) '@whatwg-node/fetch': 0.9.21 @@ -8447,9 +8433,9 @@ snapshots: graphql: 16.9.0 tslib: 2.6.3 - '@graphql-tools/prisma-loader@8.0.6(@types/node@22.7.5)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10)': + '@graphql-tools/prisma-loader@8.0.6(@types/node@22.7.7)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10)': dependencies: - '@graphql-tools/url-loader': 8.0.4(@types/node@22.7.5)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) + '@graphql-tools/url-loader': 8.0.4(@types/node@22.7.7)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.5.5(graphql@16.9.0) '@types/js-yaml': 4.0.9 '@whatwg-node/fetch': 0.9.21 @@ -8501,12 +8487,12 @@ snapshots: tslib: 2.8.0 value-or-promise: 1.0.12 - '@graphql-tools/url-loader@8.0.4(@types/node@22.7.5)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10)': + '@graphql-tools/url-loader@8.0.4(@types/node@22.7.7)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10)': dependencies: '@ardatan/sync-fetch': 0.0.1(encoding@0.1.13) '@graphql-tools/delegate': 10.0.23(graphql@16.9.0) '@graphql-tools/executor-graphql-ws': 1.3.1(bufferutil@4.0.8)(graphql@16.9.0)(utf-8-validate@5.0.10) - '@graphql-tools/executor-http': 1.1.7(@types/node@22.7.5)(graphql@16.9.0) + '@graphql-tools/executor-http': 1.1.7(@types/node@22.7.7)(graphql@16.9.0) '@graphql-tools/executor-legacy-ws': 1.1.1(bufferutil@4.0.8)(graphql@16.9.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.5.5(graphql@16.9.0) '@graphql-tools/wrap': 10.0.7(graphql@16.9.0) @@ -8582,14 +8568,14 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.5 + '@types/node': 22.7.7 jest-mock: 29.7.0 '@jest/fake-timers@29.7.0': dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.7.5 + '@types/node': 22.7.7 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -8602,7 +8588,7 @@ snapshots: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.7.5 + '@types/node': 22.7.7 '@types/yargs': 15.0.19 chalk: 4.1.2 @@ -8611,7 +8597,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.7.5 + '@types/node': 22.7.7 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -8728,7 +8714,7 @@ snapshots: '@metamask/safe-event-emitter@3.1.1': {} - '@metamask/sdk-communication-layer@0.29.2(cross-fetch@4.0.0(encoding@0.1.13))(eciesjs@0.3.20)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))': + '@metamask/sdk-communication-layer@0.30.0(cross-fetch@4.0.0(encoding@0.1.13))(eciesjs@0.3.20)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))': dependencies: bufferutil: 4.0.8 cross-fetch: 4.0.0(encoding@0.1.13) @@ -8743,7 +8729,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@metamask/sdk-install-modal-web@0.29.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)': + '@metamask/sdk-install-modal-web@0.30.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: i18next: 23.11.5 qr-code-styling: 1.7.2 @@ -8752,12 +8738,12 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-native: 0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@metamask/sdk@0.29.3(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(utf-8-validate@5.0.10)': + '@metamask/sdk@0.30.0(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(utf-8-validate@5.0.10)': dependencies: '@metamask/onboarding': 1.0.1 '@metamask/providers': 16.1.0 - '@metamask/sdk-communication-layer': 0.29.2(cross-fetch@4.0.0(encoding@0.1.13))(eciesjs@0.3.20)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@metamask/sdk-install-modal-web': 0.29.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1) + '@metamask/sdk-communication-layer': 0.30.0(cross-fetch@4.0.0(encoding@0.1.13))(eciesjs@0.3.20)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + '@metamask/sdk-install-modal-web': 0.30.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1) '@types/dom-screen-wake-lock': 1.0.3 '@types/uuid': 10.0.0 bowser: 2.11.0 @@ -9405,7 +9391,7 @@ snapshots: '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)': dependencies: '@safe-global/safe-gateway-typescript-sdk': 3.22.2 - viem: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + viem: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - typescript @@ -9638,15 +9624,15 @@ snapshots: '@types/bn.js@4.11.6': dependencies: - '@types/node': 22.7.5 + '@types/node': 22.7.7 '@types/bn.js@5.1.6': dependencies: - '@types/node': 22.7.5 + '@types/node': 22.7.7 '@types/conventional-commits-parser@5.0.0': dependencies: - '@types/node': 22.7.5 + '@types/node': 22.7.7 '@types/debug@4.1.12': dependencies: @@ -9682,15 +9668,19 @@ snapshots: '@types/node-forge@1.3.11': dependencies: - '@types/node': 22.7.5 + '@types/node': 22.7.7 '@types/node@22.7.5': dependencies: undici-types: 6.19.8 + '@types/node@22.7.7': + dependencies: + undici-types: 6.19.8 + '@types/pbkdf2@3.1.2': dependencies: - '@types/node': 22.7.5 + '@types/node': 22.7.7 '@types/prop-types@15.7.13': {} @@ -9705,7 +9695,7 @@ snapshots: '@types/secp256k1@4.0.6': dependencies: - '@types/node': 22.7.5 + '@types/node': 22.7.7 '@types/semver@7.5.8': {} @@ -9717,7 +9707,7 @@ snapshots: '@types/ws@8.5.12': dependencies: - '@types/node': 22.7.5 + '@types/node': 22.7.7 '@types/yargs-parser@21.0.3': {} @@ -9729,7 +9719,7 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@vitest/coverage-v8@2.1.3(vitest@2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0))': + '@vitest/coverage-v8@2.1.3(vitest@2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -9743,7 +9733,7 @@ snapshots: std-env: 3.7.0 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0) + vitest: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) transitivePeerDependencies: - supports-color @@ -9754,13 +9744,13 @@ snapshots: chai: 5.1.1 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.7.5)(terser@5.35.0))': + '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.7.7)(terser@5.35.0))': dependencies: '@vitest/spy': 2.1.3 estree-walker: 3.0.3 magic-string: 0.30.12 optionalDependencies: - vite: 5.4.9(@types/node@22.7.5)(terser@5.35.0) + vite: 5.4.9(@types/node@22.7.7)(terser@5.35.0) '@vitest/pretty-format@2.1.3': dependencies: @@ -9787,17 +9777,17 @@ snapshots: loupe: 3.1.2 tinyrainbow: 1.2.0 - '@wagmi/connectors@5.2.1(@types/react@18.3.11)(@wagmi/core@2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10))': + '@wagmi/connectors@5.2.2(@types/react@18.3.11)(@wagmi/core@2.13.9(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10))': dependencies: '@coinbase/wallet-sdk': 4.0.4 - '@metamask/sdk': 0.29.3(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(utf-8-validate@5.0.10) + '@metamask/sdk': 0.30.0(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(utf-8-validate@5.0.10) '@safe-global/safe-apps-provider': 0.18.3(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@wagmi/core': 2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + '@wagmi/core': 2.13.9(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) '@walletconnect/ethereum-provider': 2.17.0(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10) '@walletconnect/modal': 2.7.0(@types/react@18.3.11)(react@18.3.1) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' - viem: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + viem: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -9825,11 +9815,11 @@ snapshots: - utf-8-validate - zod - '@wagmi/core@2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10))': + '@wagmi/core@2.13.9(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10))': dependencies: eventemitter3: 5.0.1 mipd: 0.0.7(typescript@5.6.3) - viem: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + viem: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) zustand: 4.4.1(@types/react@18.3.11)(react@18.3.1) optionalDependencies: '@tanstack/query-core': 5.59.13 @@ -10616,7 +10606,7 @@ snapshots: chrome-launcher@0.15.2: dependencies: - '@types/node': 22.7.5 + '@types/node': 22.7.7 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -10625,7 +10615,7 @@ snapshots: chromium-edge-launcher@0.2.0: dependencies: - '@types/node': 22.7.5 + '@types/node': 22.7.7 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -10841,9 +10831,9 @@ snapshots: core-util-is@1.0.3: {} - cosmiconfig-typescript-loader@5.0.0(@types/node@22.7.5)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3): + cosmiconfig-typescript-loader@5.0.0(@types/node@22.7.7)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3): dependencies: - '@types/node': 22.7.5 + '@types/node': 22.7.7 cosmiconfig: 9.0.0(typescript@5.6.3) jiti: 1.21.6 typescript: 5.6.3 @@ -11310,10 +11300,10 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 - executooor-viem@1.3.3(evm-maths@7.0.0)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)): + executooor-viem@1.3.3(evm-maths@7.0.0)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)): dependencies: evm-maths: 7.0.0 - viem: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + viem: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) exponential-backoff@3.1.1: {} @@ -11577,13 +11567,13 @@ snapshots: graceful-fs@4.2.11: {} - graphql-config@5.1.3(@types/node@22.7.5)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(typescript@5.6.3)(utf-8-validate@5.0.10): + graphql-config@5.1.3(@types/node@22.7.7)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(typescript@5.6.3)(utf-8-validate@5.0.10): dependencies: '@graphql-tools/graphql-file-loader': 8.0.2(graphql@16.9.0) '@graphql-tools/json-file-loader': 8.0.2(graphql@16.9.0) '@graphql-tools/load': 8.0.3(graphql@16.9.0) '@graphql-tools/merge': 9.0.8(graphql@16.9.0) - '@graphql-tools/url-loader': 8.0.4(@types/node@22.7.5)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) + '@graphql-tools/url-loader': 8.0.4(@types/node@22.7.7)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.5.5(graphql@16.9.0) cosmiconfig: 8.3.6(typescript@5.6.3) graphql: 16.9.0 @@ -11644,7 +11634,7 @@ snapshots: webidl-conversions: 7.0.0 whatwg-mimetype: 3.0.0 - hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10): + hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.7.7)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10): dependencies: '@ethersproject/abi': 5.7.0 '@metamask/eth-sig-util': 4.0.1 @@ -11691,7 +11681,7 @@ snapshots: uuid: 8.3.2 ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) optionalDependencies: - ts-node: 10.9.2(@types/node@22.7.5)(typescript@5.6.3) + ts-node: 10.9.2(@types/node@22.7.7)(typescript@5.6.3) typescript: 5.6.3 transitivePeerDependencies: - bufferutil @@ -12044,7 +12034,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.5 + '@types/node': 22.7.7 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -12065,13 +12055,13 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.7.5 + '@types/node': 22.7.7 jest-util: 29.7.0 jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.7.5 + '@types/node': 22.7.7 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -12088,7 +12078,7 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 22.7.5 + '@types/node': 22.7.7 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -12433,9 +12423,9 @@ snapshots: merge2@1.4.1: {} - meros@1.3.0(@types/node@22.7.5): + meros@1.3.0(@types/node@22.7.7): optionalDependencies: - '@types/node': 22.7.5 + '@types/node': 22.7.7 metro-babel-transformer@0.80.12: dependencies: @@ -13793,14 +13783,14 @@ snapshots: ts-log@2.2.7: {} - ts-node@10.9.2(@types/node@22.7.5)(typescript@5.6.3): + ts-node@10.9.2(@types/node@22.7.7)(typescript@5.6.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.7.5 + '@types/node': 22.7.7 acorn: 8.13.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -13966,11 +13956,11 @@ snapshots: vary@1.1.2: {} - viem-deal@2.0.1(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)): + viem-deal@2.0.1(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)): dependencies: - viem: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + viem: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) - viem@2.21.27(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10): + viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10): dependencies: '@adraffy/ens-normalize': 1.11.0 '@noble/curves': 1.6.0 @@ -13988,30 +13978,12 @@ snapshots: - utf-8-validate - zod - viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10): - dependencies: - '@adraffy/ens-normalize': 1.11.0 - '@noble/curves': 1.6.0 - '@noble/hashes': 1.5.0 - '@scure/bip32': 1.5.0 - '@scure/bip39': 1.4.0 - abitype: 1.0.6(typescript@5.6.3) - isows: 1.0.6(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - webauthn-p256: 0.0.10 - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - zod - - vite-node@2.1.3(@types/node@22.7.5)(terser@5.35.0): + vite-node@2.1.3(@types/node@22.7.7)(terser@5.35.0): dependencies: cac: 6.7.14 debug: 4.3.7(supports-color@8.1.1) pathe: 1.1.2 - vite: 5.4.9(@types/node@22.7.5)(terser@5.35.0) + vite: 5.4.9(@types/node@22.7.7)(terser@5.35.0) transitivePeerDependencies: - '@types/node' - less @@ -14023,20 +13995,20 @@ snapshots: - supports-color - terser - vite@5.4.9(@types/node@22.7.5)(terser@5.35.0): + vite@5.4.9(@types/node@22.7.7)(terser@5.35.0): dependencies: esbuild: 0.21.5 postcss: 8.4.47 rollup: 4.24.0 optionalDependencies: - '@types/node': 22.7.5 + '@types/node': 22.7.7 fsevents: 2.3.3 terser: 5.35.0 - vitest@2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.35.0): + vitest@2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0): dependencies: '@vitest/expect': 2.1.3 - '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.7.5)(terser@5.35.0)) + '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.7.7)(terser@5.35.0)) '@vitest/pretty-format': 2.1.3 '@vitest/runner': 2.1.3 '@vitest/snapshot': 2.1.3 @@ -14051,11 +14023,11 @@ snapshots: tinyexec: 0.3.1 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.4.9(@types/node@22.7.5)(terser@5.35.0) - vite-node: 2.1.3(@types/node@22.7.5)(terser@5.35.0) + vite: 5.4.9(@types/node@22.7.7)(terser@5.35.0) + vite-node: 2.1.3(@types/node@22.7.7)(terser@5.35.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.7.5 + '@types/node': 22.7.7 happy-dom: 15.7.4 transitivePeerDependencies: - less @@ -14070,14 +14042,14 @@ snapshots: vlq@1.0.1: {} - wagmi@2.12.19(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)): + wagmi@2.12.20(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)): dependencies: '@tanstack/react-query': 5.59.15(react@18.3.1) - '@wagmi/connectors': 5.2.1(@types/react@18.3.11)(@wagmi/core@2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) - '@wagmi/core': 2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + '@wagmi/connectors': 5.2.2(@types/react@18.3.11)(@wagmi/core@2.13.9(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + '@wagmi/core': 2.13.9(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) react: 18.3.1 use-sync-external-store: 1.2.0(react@18.3.1) - viem: 2.21.29(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + viem: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: From 16aa56d9d153fc022f54c216f1a03cb6085aada3 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Mon, 21 Oct 2024 10:54:40 +0200 Subject: [PATCH 15/32] refactor(simulation): adapt errors --- .../blue-sdk-ethers/test/e2e/Market.test.ts | 2 - packages/blue-sdk/src/errors.ts | 6 ++ packages/blue-sdk/src/position/Position.ts | 82 +++++++++++-------- packages/blue-sdk/test/e2e/Market.test.ts | 4 +- packages/simulation-sdk/src/errors.ts | 20 ----- .../src/handlers/blue/borrow.ts | 3 +- .../simulation-sdk/src/handlers/blue/repay.ts | 4 +- .../src/handlers/blue/withdraw.ts | 2 +- .../src/handlers/blue/withdrawCollateral.ts | 8 +- .../test/handlers/blue/borrow.test.ts | 10 +-- .../test/handlers/blue/repay.test.ts | 6 +- .../test/handlers/blue/supply.test.ts | 7 +- .../test/handlers/blue/withdraw.test.ts | 10 +-- .../handlers/blue/withdrawCollateral.test.ts | 15 +--- 14 files changed, 75 insertions(+), 104 deletions(-) diff --git a/packages/blue-sdk-ethers/test/e2e/Market.test.ts b/packages/blue-sdk-ethers/test/e2e/Market.test.ts index b9bbfc14..66f2e57b 100644 --- a/packages/blue-sdk-ethers/test/e2e/Market.test.ts +++ b/packages/blue-sdk-ethers/test/e2e/Market.test.ts @@ -38,8 +38,6 @@ describe("augment/Market", () => { totalBorrowShares: 0n, lastUpdate: 1711558175n, fee: 0n, - price: 0n, - rateAtTarget: undefined, }); const value = await Market.fetch(usdc_idle.id, wallet); diff --git a/packages/blue-sdk/src/errors.ts b/packages/blue-sdk/src/errors.ts index 6ae3289f..d5e3c2ea 100644 --- a/packages/blue-sdk/src/errors.ts +++ b/packages/blue-sdk/src/errors.ts @@ -57,6 +57,12 @@ export namespace BlueErrors { } } + export class UnknownOraclePrice extends Error { + constructor(public readonly marketId: MarketId) { + super(`unknown oracle price of market "${marketId}"`); + } + } + export class InsufficientPosition extends Error { constructor( public readonly user: Address, diff --git a/packages/blue-sdk/src/position/Position.ts b/packages/blue-sdk/src/position/Position.ts index 4f1064d0..57791f67 100644 --- a/packages/blue-sdk/src/position/Position.ts +++ b/packages/blue-sdk/src/position/Position.ts @@ -181,29 +181,28 @@ export class AccrualPosition extends Position implements InputAccrualPosition { let { market } = this; ({ market, assets, shares } = market.supply(assets, shares, timestamp)); - this.supplyShares += shares; + const position = new AccrualPosition(this, market); - return { - position: new AccrualPosition(this, market), - assets, - shares, - }; + position.supplyShares += shares; + + return { position, assets, shares }; } public withdraw(assets: bigint, shares: bigint, timestamp?: BigIntish) { let { market } = this; ({ market, assets, shares } = market.withdraw(assets, shares, timestamp)); - this.supplyShares -= shares; + const position = new AccrualPosition(this, market); + + position.supplyShares -= shares; - if (this.supplyShares < 0n) - throw new BlueErrors.InsufficientPosition(this.user, this.marketId); + if (position.supplyShares < 0n) + throw new BlueErrors.InsufficientPosition( + position.user, + position.marketId, + ); - return { - position: new AccrualPosition(this, market), - assets, - shares, - }; + return { position, assets, shares }; } public supplyCollateral(assets: bigint) { @@ -213,49 +212,60 @@ export class AccrualPosition extends Position implements InputAccrualPosition { } public withdrawCollateral(assets: bigint, timestamp?: BigIntish) { - const market = this.market.accrueInterest(timestamp); + if (this.market.price == null) + throw new BlueErrors.UnknownOraclePrice(this.marketId); - this.collateral -= assets; + const position = this.accrueInterest(timestamp); - if (this.collateral < 0n) - throw new BlueErrors.InsufficientPosition(this.user, this.marketId); + position.collateral -= assets; - if (!market.isHealthy(this)) - throw new BlueErrors.InsufficientCollateral(this.user, this.marketId); + if (position.collateral < 0n) + throw new BlueErrors.InsufficientPosition( + position.user, + position.marketId, + ); + + if (!position.isHealthy!) + throw new BlueErrors.InsufficientCollateral( + position.user, + position.marketId, + ); - return new AccrualPosition(this, market); + return position; } public borrow(assets: bigint, shares: bigint, timestamp?: BigIntish) { let { market } = this; + if (market.price == null) + throw new BlueErrors.UnknownOraclePrice(market.id); + ({ market, assets, shares } = market.borrow(assets, shares, timestamp)); - this.borrowShares += shares; + const position = new AccrualPosition(this, market); + + position.borrowShares += shares; - if (!market.isHealthy(this)) + if (!position.isHealthy!) throw new BlueErrors.InsufficientCollateral(this.user, this.marketId); - return { - position: new AccrualPosition(this, market), - assets, - shares, - }; + return { position, assets, shares }; } public repay(assets: bigint, shares: bigint, timestamp?: BigIntish) { let { market } = this; ({ market, assets, shares } = market.repay(assets, shares, timestamp)); - this.borrowShares -= shares; + const position = new AccrualPosition(this, market); + + position.borrowShares -= shares; - if (this.borrowShares < 0n) - throw new BlueErrors.InsufficientPosition(this.user, this.marketId); + if (position.borrowShares < 0n) + throw new BlueErrors.InsufficientPosition( + position.user, + position.marketId, + ); - return { - position: new AccrualPosition(this, market), - assets, - shares, - }; + return { position, assets, shares }; } public getRepayCapacityLimit(loanTokenBalance: bigint) { diff --git a/packages/blue-sdk/test/e2e/Market.test.ts b/packages/blue-sdk/test/e2e/Market.test.ts index 0d934959..cefab6b9 100644 --- a/packages/blue-sdk/test/e2e/Market.test.ts +++ b/packages/blue-sdk/test/e2e/Market.test.ts @@ -96,7 +96,7 @@ describe("Market", () => { const maxBorrowable = market.getMaxBorrowableAssets({ borrowShares, collateral, - }); + })!; await expect( client.estimateContractGas({ @@ -209,7 +209,7 @@ describe("Market", () => { const maxBorrowable = market.getMaxBorrowableAssets({ borrowShares, collateral, - }); + })!; await client.deal({ erc20: params.loanToken, diff --git a/packages/simulation-sdk/src/errors.ts b/packages/simulation-sdk/src/errors.ts index 6071b4fd..12b6049f 100644 --- a/packages/simulation-sdk/src/errors.ts +++ b/packages/simulation-sdk/src/errors.ts @@ -212,26 +212,6 @@ export namespace BlueSimulationErrors { super(`unauthorized bundler for user "${user}"`); } } - - export class InsufficientPosition extends Error { - constructor( - public readonly user: Address, - public readonly marketId: MarketId, - ) { - super(`insufficient position for user "${user}" on market "${marketId}"`); - } - } - - export class InsufficientCollateral extends Error { - constructor( - public readonly user: Address, - public readonly marketId: MarketId, - ) { - super( - `insufficient collateral for user "${user}" on market "${marketId}"`, - ); - } - } } export namespace MetaMorphoErrors { diff --git a/packages/simulation-sdk/src/handlers/blue/borrow.ts b/packages/simulation-sdk/src/handlers/blue/borrow.ts index b16c86bc..c300ac17 100644 --- a/packages/simulation-sdk/src/handlers/blue/borrow.ts +++ b/packages/simulation-sdk/src/handlers/blue/borrow.ts @@ -35,6 +35,7 @@ export const handleBlueBorrowOperation: OperationHandler< ); const market = data.getMarket(id); + if (market.price == null) throw new BlueErrors.UnknownOraclePrice(id); if (shares === 0n) shares = MathLib.wMulUp( @@ -58,7 +59,7 @@ export const handleBlueBorrowOperation: OperationHandler< position.borrowShares += shares; if (!market.isHealthy(position)) - throw new BlueSimulationErrors.InsufficientCollateral(onBehalf, id); + throw new BlueErrors.InsufficientCollateral(onBehalf, id); handleErc20Operation( { diff --git a/packages/simulation-sdk/src/handlers/blue/repay.ts b/packages/simulation-sdk/src/handlers/blue/repay.ts index d392774f..a676d4e7 100644 --- a/packages/simulation-sdk/src/handlers/blue/repay.ts +++ b/packages/simulation-sdk/src/handlers/blue/repay.ts @@ -1,6 +1,4 @@ import { BlueErrors, MathLib, getChainAddresses } from "@morpho-org/blue-sdk"; - -import { BlueSimulationErrors } from "../../errors.js"; import type { BlueOperations } from "../../operations.js"; import { handleOperations } from "../dispatchers.js"; import { handleErc20Operation } from "../erc20/index.js"; @@ -57,7 +55,7 @@ export const handleBlueRepayOperation: OperationHandler< position.borrowShares -= shares; if (position.borrowShares < 0n) - throw new BlueSimulationErrors.InsufficientPosition(onBehalf, market.id); + throw new BlueErrors.InsufficientPosition(onBehalf, market.id); if (callback) handleOperations(callback(data), data); diff --git a/packages/simulation-sdk/src/handlers/blue/withdraw.ts b/packages/simulation-sdk/src/handlers/blue/withdraw.ts index 4cf20c77..44aa1273 100644 --- a/packages/simulation-sdk/src/handlers/blue/withdraw.ts +++ b/packages/simulation-sdk/src/handlers/blue/withdraw.ts @@ -57,7 +57,7 @@ export const handleBlueWithdrawOperation: OperationHandler< position.supplyShares -= shares; if (position.supplyShares < 0n) - throw new BlueSimulationErrors.InsufficientPosition(onBehalf, id); + throw new BlueErrors.InsufficientPosition(onBehalf, id); // Transfer loan. handleErc20Operation( diff --git a/packages/simulation-sdk/src/handlers/blue/withdrawCollateral.ts b/packages/simulation-sdk/src/handlers/blue/withdrawCollateral.ts index 619d5c88..50242879 100644 --- a/packages/simulation-sdk/src/handlers/blue/withdrawCollateral.ts +++ b/packages/simulation-sdk/src/handlers/blue/withdrawCollateral.ts @@ -1,4 +1,4 @@ -import { getChainAddresses } from "@morpho-org/blue-sdk"; +import { BlueErrors, getChainAddresses } from "@morpho-org/blue-sdk"; import { BlueSimulationErrors } from "../../errors.js"; import type { BlueOperations } from "../../operations.js"; @@ -31,15 +31,17 @@ export const handleBlueWithdrawCollateralOperation: OperationHandler< ); const market = data.getMarket(id); + if (market.price == null) throw new BlueErrors.UnknownOraclePrice(id); + const position = data.getPosition(onBehalf, id); position.collateral -= assets; if (position.collateral < 0n) - throw new BlueSimulationErrors.InsufficientPosition(onBehalf, id); + throw new BlueErrors.InsufficientPosition(onBehalf, id); if (!market.isHealthy(position)) - throw new BlueSimulationErrors.InsufficientCollateral(onBehalf, id); + throw new BlueErrors.InsufficientCollateral(onBehalf, id); // Transfer collateral. handleErc20Operation( diff --git a/packages/simulation-sdk/test/handlers/blue/borrow.test.ts b/packages/simulation-sdk/test/handlers/blue/borrow.test.ts index 9d3fb450..4031c7b0 100644 --- a/packages/simulation-sdk/test/handlers/blue/borrow.test.ts +++ b/packages/simulation-sdk/test/handlers/blue/borrow.test.ts @@ -4,11 +4,7 @@ import { parseUnits } from "viem"; import { BlueErrors } from "@morpho-org/blue-sdk"; import { describe, expect, test } from "vitest"; -import { - BlueSimulationErrors, - SimulationErrors, - simulateOperation, -} from "../../../src/index.js"; +import { SimulationErrors, simulateOperation } from "../../../src/index.js"; import { dataFixture, marketA1, tokenA, userA, userB } from "../../fixtures.js"; const type = "Blue_Borrow"; @@ -136,8 +132,6 @@ describe(type, () => { }, dataFixture, ), - ).toThrow( - new BlueSimulationErrors.InsufficientCollateral(userA, marketA1.id), - ); + ).toThrow(new BlueErrors.InsufficientCollateral(userA, marketA1.id)); }); }); diff --git a/packages/simulation-sdk/test/handlers/blue/repay.test.ts b/packages/simulation-sdk/test/handlers/blue/repay.test.ts index e5b3796a..ee690ce3 100644 --- a/packages/simulation-sdk/test/handlers/blue/repay.test.ts +++ b/packages/simulation-sdk/test/handlers/blue/repay.test.ts @@ -1,7 +1,7 @@ import _ from "lodash"; import { parseUnits } from "viem"; -import { ChainId, addresses } from "@morpho-org/blue-sdk"; +import { BlueErrors, ChainId, addresses } from "@morpho-org/blue-sdk"; import { describe, expect, test } from "vitest"; import { @@ -125,9 +125,7 @@ describe(type, () => { }, dataFixture, ), - ).toThrow( - new BlueSimulationErrors.InsufficientPosition(userB, marketA1.id), - ); + ).toThrow(new BlueErrors.InsufficientPosition(userB, marketA1.id)); }); test("should throw if insufficient wallet balance", () => { diff --git a/packages/simulation-sdk/test/handlers/blue/supply.test.ts b/packages/simulation-sdk/test/handlers/blue/supply.test.ts index c497b49b..20111224 100644 --- a/packages/simulation-sdk/test/handlers/blue/supply.test.ts +++ b/packages/simulation-sdk/test/handlers/blue/supply.test.ts @@ -1,11 +1,10 @@ import _ from "lodash"; import { parseUnits } from "viem"; -import { ChainId, addresses } from "@morpho-org/blue-sdk"; +import { BlueErrors, ChainId, addresses } from "@morpho-org/blue-sdk"; import { describe, expect, test } from "vitest"; import { - BlueSimulationErrors, Erc20Errors, SimulationErrors, simulateOperation, @@ -194,8 +193,6 @@ describe(type, () => { }, dataFixture, ), - ).toThrow( - new BlueSimulationErrors.InsufficientPosition(userB, marketA1.id), - ); + ).toThrow(new BlueErrors.InsufficientPosition(userB, marketA1.id)); }); }); diff --git a/packages/simulation-sdk/test/handlers/blue/withdraw.test.ts b/packages/simulation-sdk/test/handlers/blue/withdraw.test.ts index 9fef7be6..55112833 100644 --- a/packages/simulation-sdk/test/handlers/blue/withdraw.test.ts +++ b/packages/simulation-sdk/test/handlers/blue/withdraw.test.ts @@ -4,11 +4,7 @@ import { parseUnits } from "viem"; import { BlueErrors } from "@morpho-org/blue-sdk"; import { describe, expect, test } from "vitest"; -import { - BlueSimulationErrors, - SimulationErrors, - simulateOperation, -} from "../../../src/index.js"; +import { SimulationErrors, simulateOperation } from "../../../src/index.js"; import { dataFixture, marketA1, tokenA, userA, userB } from "../../fixtures.js"; const type = "Blue_Withdraw"; @@ -137,8 +133,6 @@ describe(type, () => { }, dataFixture, ), - ).toThrow( - new BlueSimulationErrors.InsufficientPosition(userA, marketA1.id), - ); + ).toThrow(new BlueErrors.InsufficientPosition(userA, marketA1.id)); }); }); diff --git a/packages/simulation-sdk/test/handlers/blue/withdrawCollateral.test.ts b/packages/simulation-sdk/test/handlers/blue/withdrawCollateral.test.ts index 5c839a5a..111bd56d 100644 --- a/packages/simulation-sdk/test/handlers/blue/withdrawCollateral.test.ts +++ b/packages/simulation-sdk/test/handlers/blue/withdrawCollateral.test.ts @@ -1,12 +1,9 @@ import _ from "lodash"; import { parseUnits } from "viem"; +import { BlueErrors } from "@morpho-org/blue-sdk"; import { describe, expect, test } from "vitest"; -import { - BlueSimulationErrors, - SimulationErrors, - simulateOperation, -} from "../../../src/index.js"; +import { SimulationErrors, simulateOperation } from "../../../src/index.js"; import { dataFixture, marketA1, userA, userB } from "../../fixtures.js"; const type = "Blue_WithdrawCollateral"; @@ -72,9 +69,7 @@ describe(type, () => { }, dataFixture, ), - ).toThrow( - new BlueSimulationErrors.InsufficientPosition(userB, marketA1.id), - ); + ).toThrow(new BlueErrors.InsufficientPosition(userB, marketA1.id)); }); test("should throw if not healthy", () => { @@ -92,8 +87,6 @@ describe(type, () => { }, dataFixture, ), - ).toThrow( - new BlueSimulationErrors.InsufficientCollateral(userB, marketA1.id), - ); + ).toThrow(new BlueErrors.InsufficientCollateral(userB, marketA1.id)); }); }); From 8ccfa22585bbb41ce34d363c3f31ccedd1478fc7 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Mon, 21 Oct 2024 11:13:06 +0200 Subject: [PATCH 16/32] test(blue-sdk): fix market params types --- packages/blue-sdk/src/market/MarketParams.ts | 6 ++-- packages/blue-sdk/test/e2e/Market.test.ts | 30 +++++++++++++++---- packages/bundler-sdk-viem/test/helpers.ts | 2 +- .../test/populateBundle.test.ts | 18 +++++------ packages/morpho-test/src/fixtures/markets.ts | 19 ++++++++++++ 5 files changed, 55 insertions(+), 20 deletions(-) diff --git a/packages/blue-sdk/src/market/MarketParams.ts b/packages/blue-sdk/src/market/MarketParams.ts index 43d8940e..43332aa3 100644 --- a/packages/blue-sdk/src/market/MarketParams.ts +++ b/packages/blue-sdk/src/market/MarketParams.ts @@ -71,14 +71,12 @@ export class MarketParams implements InputMarketParams { /** * The market's hex-encoded id, defined as the hash of the market params. */ - // Cached because params are readonly. - public readonly id: MarketId; + public readonly id: MarketId; // Cached because params are readonly. /** * The market's liquidation incentive factor. */ - // Cached because lltv is readonly. - public readonly liquidationIncentiveFactor: bigint; + public readonly liquidationIncentiveFactor: bigint; // Cached because lltv is readonly. constructor(params: InputMarketParams) { const { collateralToken, loanToken, oracle, irm, lltv } = params; diff --git a/packages/blue-sdk/test/e2e/Market.test.ts b/packages/blue-sdk/test/e2e/Market.test.ts index 0d934959..35a64bf7 100644 --- a/packages/blue-sdk/test/e2e/Market.test.ts +++ b/packages/blue-sdk/test/e2e/Market.test.ts @@ -1,5 +1,5 @@ import { Time } from "@morpho-org/morpho-ts"; -import { parseUnits } from "viem"; +import { type Address, parseUnits } from "viem"; import { describe, expect } from "vitest"; import { ChainId, Market, MarketParams, addresses } from "../../src/index.js"; import { adaptiveCurveIrmAbi, blueAbi, blueOracleAbi } from "./abis.js"; @@ -17,6 +17,24 @@ const params = new MarketParams({ lltv: parseUnits("86", 16), }); +declare module "../../src/index.js" { + interface MarketParams { + asArg: { + collateralToken: Address; + loanToken: Address; + oracle: Address; + irm: Address; + lltv: bigint; + }; + } +} + +Object.defineProperty(MarketParams.prototype, "asArg", { + get() { + return this; + }, +}); + describe("Market", () => { test("should borrow borrowable assets", async ({ client }) => { const collateral = parseUnits("1", 18); @@ -39,7 +57,7 @@ describe("Market", () => { address: morpho, functionName: "borrow", args: [ - params, + params.asArg, parseUnits("1", 6), 0n, client.account.address, @@ -104,7 +122,7 @@ describe("Market", () => { address: morpho, functionName: "borrow", args: [ - params, + params.asArg, maxBorrowable + 10n, 0n, client.account.address, @@ -118,7 +136,7 @@ describe("Market", () => { address: morpho, functionName: "borrow", args: [ - params, + params.asArg, maxBorrowable, 0n, client.account.address, @@ -154,7 +172,7 @@ describe("Market", () => { address: morpho, functionName: "borrow", args: [ - params, + params.asArg, parseUnits("1", 6), 0n, client.account.address, @@ -233,7 +251,7 @@ describe("Market", () => { address: morpho, functionName: "borrow", args: [ - params, + params.asArg, maxBorrowable, 0n, client.account.address, diff --git a/packages/bundler-sdk-viem/test/helpers.ts b/packages/bundler-sdk-viem/test/helpers.ts index 0be032a7..990860ce 100644 --- a/packages/bundler-sdk-viem/test/helpers.ts +++ b/packages/bundler-sdk-viem/test/helpers.ts @@ -57,7 +57,7 @@ export const donate = abi: blueAbi, functionName: "supply", args: [ - data.getMarket(data.getVault(vault).withdrawQueue[0]!).params, + data.getMarket(data.getVault(vault).withdrawQueue[0]!).params.asArg, donation, 0n, vault, diff --git a/packages/bundler-sdk-viem/test/populateBundle.test.ts b/packages/bundler-sdk-viem/test/populateBundle.test.ts index 7148f504..25c76a8d 100644 --- a/packages/bundler-sdk-viem/test/populateBundle.test.ts +++ b/packages/bundler-sdk-viem/test/populateBundle.test.ts @@ -638,7 +638,7 @@ describe("populateBundle", () => { address: morpho, abi: blueAbi, functionName: "createMarket", - args: [marketParams], + args: [marketParams.asArg], }); const block = await client.getBlock(); @@ -798,7 +798,7 @@ describe("populateBundle", () => { address: morpho, abi: blueAbi, functionName: "createMarket", - args: [marketParams], + args: [marketParams.asArg], }); const block = await client.getBlock(); @@ -1601,7 +1601,7 @@ describe("populateBundle", () => { abi: blueAbi, functionName: "borrow", args: [ - eth_wstEth, + eth_wstEth.asArg, loanAssets, 0n, client.account.address, @@ -2213,7 +2213,7 @@ describe("populateBundle", () => { abi: blueAbi, functionName: "borrow", args: [ - eth_wstEth, + eth_wstEth.asArg, borrowAmount, 0n, client.account.address, @@ -3083,7 +3083,7 @@ describe("populateBundle", () => { address: morpho, abi: blueAbi, functionName: "createMarket", - args: [marketParams], + args: [marketParams.asArg], }); const block = await client.getBlock(); @@ -3251,7 +3251,7 @@ describe("populateBundle", () => { address: morpho, abi: blueAbi, functionName: "createMarket", - args: [marketParams], + args: [marketParams.asArg], }); const block = await client.getBlock(); @@ -4090,7 +4090,7 @@ describe("populateBundle", () => { abi: blueAbi, functionName: "borrow", args: [ - eth_wstEth, + eth_wstEth.asArg, loanAssets, 0n, client.account.address, @@ -4725,7 +4725,7 @@ describe("populateBundle", () => { abi: blueAbi, functionName: "borrow", args: [ - eth_wstEth, + eth_wstEth.asArg, borrowAmount, 0n, client.account.address, @@ -4963,7 +4963,7 @@ describe("populateBundle", () => { address: morpho, abi: blueAbi, functionName: "createMarket", - args: [marketParams], + args: [marketParams.asArg], }); const whitelisted = "0x53753098E2660AbD4834A3eD713D11AC1123421A"; diff --git a/packages/morpho-test/src/fixtures/markets.ts b/packages/morpho-test/src/fixtures/markets.ts index 5931ad1a..37b9f8ff 100644 --- a/packages/morpho-test/src/fixtures/markets.ts +++ b/packages/morpho-test/src/fixtures/markets.ts @@ -1,4 +1,5 @@ import { + type Address, ChainId, type InputMarketParams, MarketParams, @@ -209,3 +210,21 @@ export const randomMarket = (params: Partial = {}) => lltv: parseEther("0.80"), ...params, }); + +declare module "@morpho-org/blue-sdk" { + interface MarketParams { + asArg: { + collateralToken: Address; + loanToken: Address; + oracle: Address; + irm: Address; + lltv: bigint; + }; + } +} + +Object.defineProperty(MarketParams.prototype, "asArg", { + get() { + return this; + }, +}); From b468055dc0a5d7c5cba4f38ea4e333273f038731 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Mon, 21 Oct 2024 11:25:14 +0200 Subject: [PATCH 17/32] fix(liquidation): update example typings --- packages/blue-sdk/src/position/Position.ts | 11 +++++++- .../examples/whitelisted-erc4626-1inch.ts | 9 ++++-- packages/liquidation-sdk-viem/package.json | 2 +- .../whitelisted-erc4626-1inch.test.ts | 28 +++++++++---------- 4 files changed, 31 insertions(+), 19 deletions(-) diff --git a/packages/blue-sdk/src/position/Position.ts b/packages/blue-sdk/src/position/Position.ts index 57791f67..48ee006b 100644 --- a/packages/blue-sdk/src/position/Position.ts +++ b/packages/blue-sdk/src/position/Position.ts @@ -77,6 +77,7 @@ export class AccrualPosition extends Position implements InputAccrualPosition { /** * The value of this position's collateral quoted in loan assets. + * Undefined iff the market's oracle is undefined or reverts. */ get collateralValue() { return this.market.getCollateralValue(this.collateral); @@ -84,6 +85,7 @@ export class AccrualPosition extends Position implements InputAccrualPosition { /** * The maximum amount of loan assets that can be borrowed against this position's collateral. + * Undefined iff the market's oracle is undefined or reverts. */ get maxBorrowAssets() { return this.market.getMaxBorrowAssets(this.collateral); @@ -91,6 +93,7 @@ export class AccrualPosition extends Position implements InputAccrualPosition { /** * The maximum additional amount of assets that can be borrowed against this position's collateral. + * Undefined iff the market's oracle is undefined or reverts. */ get maxBorrowableAssets() { return this.market.getMaxBorrowableAssets(this); @@ -98,6 +101,7 @@ export class AccrualPosition extends Position implements InputAccrualPosition { /** * The maximum amount of collateral that can be seized in exchange for the outstanding debt. + * Undefined iff the market's oracle is undefined or reverts. */ get seizableCollateral() { return this.market.getSeizableCollateral(this); @@ -105,6 +109,7 @@ export class AccrualPosition extends Position implements InputAccrualPosition { /** * The maximum amount of collateral that can be withdrawn. + * Undefined iff the market's oracle is undefined or reverts. */ get withdrawableCollateral() { return this.market.getWithdrawableCollateral(this); @@ -112,6 +117,7 @@ export class AccrualPosition extends Position implements InputAccrualPosition { /** * Whether this position is healthy. + * Undefined iff the market's oracle is undefined or reverts. */ get isHealthy() { return this.market.isHealthy(this); @@ -127,7 +133,8 @@ export class AccrualPosition extends Position implements InputAccrualPosition { /** * The price variation required for the position to reach its liquidation threshold (scaled by WAD). * Negative when healthy (the price needs to drop x%), positive when unhealthy (the price needs to soar x%). - * Returns null if the position is not a borrow. + * Undefined iff the market's oracle is undefined or reverts. + * Null if the position is not a borrow. */ get priceVariationToLiquidationPrice() { return this.market.getPriceVariationToLiquidationPrice(this); @@ -136,6 +143,7 @@ export class AccrualPosition extends Position implements InputAccrualPosition { /** * This position's Loan-To-Value (debt over collateral power, scaled by WAD). * If the collateral price is 0, LTV is `MaxUint256`. + * Undefined iff the market's oracle is undefined or reverts. */ get ltv() { return this.market.getLtv(this); @@ -144,6 +152,7 @@ export class AccrualPosition extends Position implements InputAccrualPosition { /** * This position's health factor (collateral power over debt, scaled by WAD). * If the debt is 0, health factor is `MaxUint256`. + * Undefined iff the market's oracle is undefined or reverts. */ get healthFactor() { return this.market.getHealthFactor(this); diff --git a/packages/liquidation-sdk-viem/examples/whitelisted-erc4626-1inch.ts b/packages/liquidation-sdk-viem/examples/whitelisted-erc4626-1inch.ts index 612261de..8979dcb1 100644 --- a/packages/liquidation-sdk-viem/examples/whitelisted-erc4626-1inch.ts +++ b/packages/liquidation-sdk-viem/examples/whitelisted-erc4626-1inch.ts @@ -98,6 +98,9 @@ export const check = async < const { user, market, seizableCollateral } = accrualPosition.accrueInterest(Time.timestamp()); + if (seizableCollateral == null) + return console.warn(`Unknown oracle price for market "${market.id}"`); + try { const collateralToken = converter.getTokenWithPrice( position.market.collateralAsset, @@ -139,7 +142,7 @@ export const check = async < ) .map(async (seizedAssets) => { const repaidShares = - market.getLiquidationRepaidShares(seizedAssets); + market.getLiquidationRepaidShares(seizedAssets)!; return { seizedAssets, @@ -215,7 +218,7 @@ export const check = async < accrualPosition.market.toBorrowAssets( accrualPosition.market.getLiquidationRepaidShares( seizedAssets, - ), + )!, ), executorAddress, ); @@ -229,7 +232,7 @@ export const check = async < accrualPosition.market.toBorrowAssets( accrualPosition.market.getLiquidationRepaidShares( seizedAssets, - ), + )!, ), executorAddress, ); diff --git a/packages/liquidation-sdk-viem/package.json b/packages/liquidation-sdk-viem/package.json index 59974cbd..5b2e98e7 100644 --- a/packages/liquidation-sdk-viem/package.json +++ b/packages/liquidation-sdk-viem/package.json @@ -16,7 +16,7 @@ "scripts": { "prepublish": "$npm_execpath build", "compile": "hardhat compile", - "build": "tsc --build tsconfig.build.json", + "build": "tsc --noEmit && tsc --build tsconfig.build.json", "codegen": "graphql-codegen --config codegen.ts" }, "dependencies": { diff --git a/packages/liquidation-sdk-viem/test/examples/whitelisted-erc4626-1inch.test.ts b/packages/liquidation-sdk-viem/test/examples/whitelisted-erc4626-1inch.test.ts index dabbbc53..d1eed467 100644 --- a/packages/liquidation-sdk-viem/test/examples/whitelisted-erc4626-1inch.test.ts +++ b/packages/liquidation-sdk-viem/test/examples/whitelisted-erc4626-1inch.test.ts @@ -482,7 +482,7 @@ describe("erc4626-1inch", () => { typeof market.params, "collateralToken" | "loanToken" | "oracle" | "irm" | "lltv" >, - market.getMaxBorrowAssets(collateral) - 10n, + market.getMaxBorrowAssets(collateral)! - 10n, 0n, borrower.address, borrower.address, @@ -534,7 +534,7 @@ describe("erc4626-1inch", () => { client, ); const accruedPosition = accrualPosition.accrueInterest(timestamp); - const seizedCollateral = accruedPosition.seizableCollateral / 2n; + const seizedCollateral = accruedPosition.seizableCollateral! / 2n; mockOneInch(encoder, seizedCollateral, "60475733900"); mockParaSwap(encoder, seizedCollateral, "60475733901"); @@ -592,7 +592,7 @@ describe("erc4626-1inch", () => { args: [market.params, collateral, borrower.address, "0x"], }); - const borrowed = market.getMaxBorrowAssets(collateral) - 1n; + const borrowed = market.getMaxBorrowAssets(collateral)! - 1n; await client.deal({ erc20: loanToken.address, account: borrower.address, @@ -678,7 +678,7 @@ describe("erc4626-1inch", () => { client, ); const accruedPosition = accrualPosition.accrueInterest(timestamp); - const seizedCollateral = accruedPosition.seizableCollateral / 2n; + const seizedCollateral = accruedPosition.seizableCollateral! / 2n; mockOneInch(encoder, seizedCollateral, "11669266773005108147659"); mockParaSwap(encoder, seizedCollateral, "11669266773005108147658"); @@ -746,7 +746,7 @@ describe("erc4626-1inch", () => { typeof market.params, "collateralToken" | "loanToken" | "oracle" | "irm" | "lltv" >, - market.getMaxBorrowAssets(collateral) - 1n, + market.getMaxBorrowAssets(collateral)! - 1n, 0n, borrower.address, borrower.address, @@ -800,7 +800,7 @@ describe("erc4626-1inch", () => { client, ); const accruedPosition = accrualPosition.accrueInterest(timestamp); - const seizedCollateral = accruedPosition.seizableCollateral / 2n; + const seizedCollateral = accruedPosition.seizableCollateral! / 2n; mockPendleOperations( encoder, @@ -874,7 +874,7 @@ describe("erc4626-1inch", () => { typeof market.params, "collateralToken" | "loanToken" | "oracle" | "irm" | "lltv" >, - market.getMaxBorrowAssets(collateral) - 1n, + market.getMaxBorrowAssets(collateral)! - 1n, 0n, borrower.address, borrower.address, @@ -933,7 +933,7 @@ describe("erc4626-1inch", () => { client, ); const accruedPosition = accrualPosition.accrueInterest(postMaturity); - const seizedCollateral = accruedPosition.seizableCollateral / 2n; + const seizedCollateral = accruedPosition.seizableCollateral! / 2n; mockPendleOperations( encoder, @@ -1035,7 +1035,7 @@ describe("erc4626-1inch", () => { typeof market.params, "collateralToken" | "loanToken" | "oracle" | "irm" | "lltv" >, - market.getMaxBorrowAssets(newCollatValue) - 1n, + market.getMaxBorrowAssets(newCollatValue)! - 1n, 0n, borrower.address, borrower.address, @@ -1091,7 +1091,7 @@ describe("erc4626-1inch", () => { client, ); const accruedPosition = accrualPosition.accrueInterest(timestamp); - const seizedCollateral = accruedPosition.seizableCollateral / 2n; + const seizedCollateral = accruedPosition.seizableCollateral! / 2n; const { morphoBlueLiquidate } = LiquidationEncoder.prototype; vi.spyOn( @@ -1175,7 +1175,7 @@ describe("erc4626-1inch", () => { typeof market.params, "collateralToken" | "loanToken" | "oracle" | "irm" | "lltv" >, - market.getMaxBorrowAssets(collateral) - 1n, + market.getMaxBorrowAssets(collateral)! - 1n, 0n, borrower.address, borrower.address, @@ -1231,7 +1231,7 @@ describe("erc4626-1inch", () => { client, ); const accruedPosition = accrualPosition.accrueInterest(timestamp); - const seizedCollateral = accruedPosition.seizableCollateral / 2n; + const seizedCollateral = accruedPosition.seizableCollateral! / 2n; const { morphoBlueLiquidate } = LiquidationEncoder.prototype; vi.spyOn( @@ -1299,7 +1299,7 @@ describe("erc4626-1inch", () => { args: [market.params, collateral, borrower.address, "0x"], }); - const borrowed = market.getMaxBorrowAssets(collateral) - 1n; + const borrowed = market.getMaxBorrowAssets(collateral)! - 1n; await client.deal({ erc20: loanToken.address, account: borrower.address, @@ -1386,7 +1386,7 @@ describe("erc4626-1inch", () => { const accruedPosition = accrualPosition.accrueInterest(timestamp); const usdsWithdrawalAmount = await encoder.previewUSDSWithdrawalAmount( - accruedPosition.seizableCollateral / 2n, + accruedPosition.seizableCollateral! / 2n, ); mockOneInch(encoder, usdsWithdrawalAmount, "11669266773005108147656"); mockParaSwap(encoder, usdsWithdrawalAmount, "11669266773005108147657"); From 0f285ed4816598894e97c6b440d75d0c381f77c4 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Mon, 21 Oct 2024 11:36:15 +0200 Subject: [PATCH 18/32] refactor(token): merge price into Token BREAKING CHANGE: TokenWithPrice has been merged into Token. The price field has been moved to Token. The name and symbol properties are now possibly undefined. The name no longer defaults to the symbol. The decimals property defaults to 0. --- packages/blue-api-sdk/src/converter.ts | 16 ++++---- packages/blue-sdk-ethers/src/fetch/Token.ts | 10 ++--- .../src/token/ConstantWrappedToken.ts | 2 +- packages/blue-sdk/src/token/Token.ts | 40 +++++++++---------- packages/blue-sdk/src/vault/Vault.ts | 10 +++++ 5 files changed, 41 insertions(+), 37 deletions(-) diff --git a/packages/blue-api-sdk/src/converter.ts b/packages/blue-api-sdk/src/converter.ts index 89cdb9df..62cba186 100644 --- a/packages/blue-api-sdk/src/converter.ts +++ b/packages/blue-api-sdk/src/converter.ts @@ -6,7 +6,7 @@ import { MarketParams, MathLib, Position, - TokenWithPrice, + Token, VaultConfig, VaultMarketAllocation, VaultMarketConfig, @@ -160,17 +160,15 @@ export class BlueSdkConverter { return price; } - public getTokenWithPrice( + public getToken( dto: PartialBlueApiToken, ethPriceUsd?: BlueApiToken["priceUsd"], ) { - return new TokenWithPrice( - { - ...dto, - address: this.options.parseAddress(dto.address), - }, - this.getPriceUsd(dto, ethPriceUsd), - ); + return new Token({ + ...dto, + address: this.options.parseAddress(dto.address), + price: this.getPriceUsd(dto, ethPriceUsd), + }); } public getMarketParams(dto: PartialBlueApiMarketParams) { diff --git a/packages/blue-sdk-ethers/src/fetch/Token.ts b/packages/blue-sdk-ethers/src/fetch/Token.ts index 87fc30cf..329a69a4 100644 --- a/packages/blue-sdk-ethers/src/fetch/Token.ts +++ b/packages/blue-sdk-ethers/src/fetch/Token.ts @@ -158,16 +158,16 @@ export async function fetchToken( const erc20 = ERC20Metadata__factory.connect(address, chainId, runner); const [decimals, symbol, name] = await Promise.all([ - erc20.decimals(overrides), - erc20.symbol(overrides), - erc20.name(overrides), + erc20.decimals(overrides).catch(() => undefined), + erc20.symbol(overrides).catch(() => undefined), + erc20.name(overrides).catch(() => undefined), ]); const token = { address, - decimals: Number.parseInt(decimals.toString()), - symbol, name, + symbol, + decimals, }; const { wstEth, stEth } = getChainAddresses(chainId); diff --git a/packages/blue-sdk/src/token/ConstantWrappedToken.ts b/packages/blue-sdk/src/token/ConstantWrappedToken.ts index dd3c31cb..52d75ea4 100644 --- a/packages/blue-sdk/src/token/ConstantWrappedToken.ts +++ b/packages/blue-sdk/src/token/ConstantWrappedToken.ts @@ -10,7 +10,7 @@ export class ConstantWrappedToken extends WrappedToken { constructor( token: InputToken, underlying: Address, - underlyingDecimals: BigIntish = 18n, + underlyingDecimals: BigIntish = 0, ) { super(token, underlying); diff --git a/packages/blue-sdk/src/token/Token.ts b/packages/blue-sdk/src/token/Token.ts index c719083e..7d6694bc 100644 --- a/packages/blue-sdk/src/token/Token.ts +++ b/packages/blue-sdk/src/token/Token.ts @@ -5,9 +5,10 @@ import type { Address, BigIntish } from "../types.js"; export interface InputToken { address: Address; - decimals: BigIntish; - symbol: string; name?: string; + symbol?: string; + decimals?: BigIntish; + price?: BigIntish; } export class Token implements InputToken { @@ -23,46 +24,40 @@ export class Token implements InputToken { public readonly address: Address; /** - * The token's number of decimals. + * The token's name. */ - public readonly decimals: number; + public readonly name?: string; /** * The token's symbol. */ - public readonly symbol: string; + public readonly symbol?: string; /** - * The name of the token (defaults to the symbol). + * The token's number of decimals. Defaults to 0. */ - public readonly name: string; - - constructor({ address, decimals, symbol, name }: InputToken) { - this.address = address; - this.decimals = Number(decimals); - this.symbol = symbol; - this.name = name ?? symbol; - } -} + public readonly decimals: number; -export class TokenWithPrice extends Token { /** * Price of the token in USD (scaled by WAD). */ public price?: bigint; - constructor(token: InputToken, price?: bigint) { - super(token); - - this.price = price; + constructor({ address, decimals = 0, symbol, name, price }: InputToken) { + this.address = address; + this.name = name; + this.symbol = symbol; + this.decimals = Number(decimals); + if (price != null) this.price = BigInt(price); } /** * Quotes an amount in USD (scaled by WAD) in this token. + * Returns undefined iff the token's price is undefined. * @param amount The amount of USD to quote. */ fromUsd(amount: bigint, rounding: RoundingDirection = "Down") { - if (this.price == null) return null; + if (this.price == null) return; return MathLib.mulDiv( amount, @@ -74,10 +69,11 @@ export class TokenWithPrice extends Token { /** * Quotes an amount of tokens in USD (scaled by WAD). + * Returns undefined iff the token's price is undefined. * @param amount The amount of tokens to quote. */ toUsd(amount: bigint, rounding: RoundingDirection = "Down") { - if (this.price == null) return null; + if (this.price == null) return; return MathLib.mulDiv( amount, diff --git a/packages/blue-sdk/src/vault/Vault.ts b/packages/blue-sdk/src/vault/Vault.ts index c19077c1..9dbf6657 100644 --- a/packages/blue-sdk/src/vault/Vault.ts +++ b/packages/blue-sdk/src/vault/Vault.ts @@ -49,6 +49,16 @@ export interface InputVault extends InputVaultConfig { } export class Vault extends VaultToken implements InputVault { + /** + * The vault's share token's name. + */ + public declare readonly name: string; + + /** + * The vault's share token's symbol. + */ + public declare readonly symbol: string; + /** * The MetaMorpho vault's owner address. */ From fa72cfa47695cdf964af5609bfd965453116ae7f Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Mon, 21 Oct 2024 11:51:39 +0200 Subject: [PATCH 19/32] test(blue-sdk): no need for asArg --- packages/bundler-sdk-viem/test/helpers.ts | 2 +- .../test/populateBundle.test.ts | 18 +++++++++--------- packages/morpho-test/src/fixtures/markets.ts | 19 ------------------- 3 files changed, 10 insertions(+), 29 deletions(-) diff --git a/packages/bundler-sdk-viem/test/helpers.ts b/packages/bundler-sdk-viem/test/helpers.ts index 990860ce..372b5919 100644 --- a/packages/bundler-sdk-viem/test/helpers.ts +++ b/packages/bundler-sdk-viem/test/helpers.ts @@ -57,7 +57,7 @@ export const donate = abi: blueAbi, functionName: "supply", args: [ - data.getMarket(data.getVault(vault).withdrawQueue[0]!).params.asArg, + { ...data.getMarket(data.getVault(vault).withdrawQueue[0]!).params }, donation, 0n, vault, diff --git a/packages/bundler-sdk-viem/test/populateBundle.test.ts b/packages/bundler-sdk-viem/test/populateBundle.test.ts index 25c76a8d..c90573bb 100644 --- a/packages/bundler-sdk-viem/test/populateBundle.test.ts +++ b/packages/bundler-sdk-viem/test/populateBundle.test.ts @@ -638,7 +638,7 @@ describe("populateBundle", () => { address: morpho, abi: blueAbi, functionName: "createMarket", - args: [marketParams.asArg], + args: [{ ...marketParams }], }); const block = await client.getBlock(); @@ -798,7 +798,7 @@ describe("populateBundle", () => { address: morpho, abi: blueAbi, functionName: "createMarket", - args: [marketParams.asArg], + args: [{ ...marketParams }], }); const block = await client.getBlock(); @@ -1601,7 +1601,7 @@ describe("populateBundle", () => { abi: blueAbi, functionName: "borrow", args: [ - eth_wstEth.asArg, + { ...eth_wstEth }, loanAssets, 0n, client.account.address, @@ -2213,7 +2213,7 @@ describe("populateBundle", () => { abi: blueAbi, functionName: "borrow", args: [ - eth_wstEth.asArg, + { ...eth_wstEth }, borrowAmount, 0n, client.account.address, @@ -3083,7 +3083,7 @@ describe("populateBundle", () => { address: morpho, abi: blueAbi, functionName: "createMarket", - args: [marketParams.asArg], + args: [{ ...marketParams }], }); const block = await client.getBlock(); @@ -3251,7 +3251,7 @@ describe("populateBundle", () => { address: morpho, abi: blueAbi, functionName: "createMarket", - args: [marketParams.asArg], + args: [{ ...marketParams }], }); const block = await client.getBlock(); @@ -4090,7 +4090,7 @@ describe("populateBundle", () => { abi: blueAbi, functionName: "borrow", args: [ - eth_wstEth.asArg, + { ...eth_wstEth }, loanAssets, 0n, client.account.address, @@ -4725,7 +4725,7 @@ describe("populateBundle", () => { abi: blueAbi, functionName: "borrow", args: [ - eth_wstEth.asArg, + { ...eth_wstEth }, borrowAmount, 0n, client.account.address, @@ -4963,7 +4963,7 @@ describe("populateBundle", () => { address: morpho, abi: blueAbi, functionName: "createMarket", - args: [marketParams.asArg], + args: [{ ...marketParams }], }); const whitelisted = "0x53753098E2660AbD4834A3eD713D11AC1123421A"; diff --git a/packages/morpho-test/src/fixtures/markets.ts b/packages/morpho-test/src/fixtures/markets.ts index 37b9f8ff..5931ad1a 100644 --- a/packages/morpho-test/src/fixtures/markets.ts +++ b/packages/morpho-test/src/fixtures/markets.ts @@ -1,5 +1,4 @@ import { - type Address, ChainId, type InputMarketParams, MarketParams, @@ -210,21 +209,3 @@ export const randomMarket = (params: Partial = {}) => lltv: parseEther("0.80"), ...params, }); - -declare module "@morpho-org/blue-sdk" { - interface MarketParams { - asArg: { - collateralToken: Address; - loanToken: Address; - oracle: Address; - irm: Address; - lltv: bigint; - }; - } -} - -Object.defineProperty(MarketParams.prototype, "asArg", { - get() { - return this; - }, -}); From a3713dc9ec3a4fd598f8bbce5cb0ceb798387695 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Mon, 21 Oct 2024 11:54:42 +0200 Subject: [PATCH 20/32] fix(blue-sdk): do not default price to zero via deployless --- .../blue-sdk-viem/contracts/GetMarket.sol | 6 ++- packages/blue-sdk-viem/src/fetch/Market.ts | 4 +- .../blue-sdk-viem/src/queries/GetMarket.ts | 3 +- packages/blue-sdk-viem/test/Market.test.ts | 37 +++++++++++++++++-- packages/blue-sdk/test/e2e/Market.test.ts | 30 +++------------ 5 files changed, 50 insertions(+), 30 deletions(-) diff --git a/packages/blue-sdk-viem/contracts/GetMarket.sol b/packages/blue-sdk-viem/contracts/GetMarket.sol index f82a38c7..c4acfc61 100644 --- a/packages/blue-sdk-viem/contracts/GetMarket.sol +++ b/packages/blue-sdk-viem/contracts/GetMarket.sol @@ -8,6 +8,7 @@ import {IAdaptiveCurveIrm} from "./interfaces/IAdaptiveCurveIrm.sol"; struct MarketResponse { MarketParams marketParams; Market market; + bool hasPrice; uint256 price; uint256 rateAtTarget; } @@ -22,7 +23,10 @@ contract GetMarket { res.market = morpho.market(id); if (res.marketParams.oracle != address(0)) { - res.price = IOracle(res.marketParams.oracle).price(); + try IOracle(res.marketParams.oracle).price() returns (uint256 price) { + res.hasPrice = true; + res.price = price; + } catch {} } if (res.marketParams.irm == address(adaptiveCurveIrm)) { diff --git a/packages/blue-sdk-viem/src/fetch/Market.ts b/packages/blue-sdk-viem/src/fetch/Market.ts index 7bd0bd2d..a5daccce 100644 --- a/packages/blue-sdk-viem/src/fetch/Market.ts +++ b/packages/blue-sdk-viem/src/fetch/Market.ts @@ -37,6 +37,7 @@ export async function fetchMarket( lastUpdate, fee, }, + hasPrice, price, rateAtTarget, } = await readContract(client, { @@ -55,7 +56,7 @@ export async function fetchMarket( totalBorrowShares, lastUpdate, fee, - price, + price: hasPrice ? price : undefined, rateAtTarget: marketParams.irm === adaptiveCurveIrm ? rateAtTarget : undefined, }); @@ -120,6 +121,7 @@ export async function fetchMarket( }) : undefined, ]); + return new Market({ params, totalSupplyAssets, diff --git a/packages/blue-sdk-viem/src/queries/GetMarket.ts b/packages/blue-sdk-viem/src/queries/GetMarket.ts index e7e9cd1b..c3e408e6 100644 --- a/packages/blue-sdk-viem/src/queries/GetMarket.ts +++ b/packages/blue-sdk-viem/src/queries/GetMarket.ts @@ -78,6 +78,7 @@ export const abi = [ name: "market", type: "tuple", }, + { internalType: "bool", name: "hasPrice", type: "bool" }, { internalType: "uint256", name: "price", type: "uint256" }, { internalType: "uint256", @@ -96,4 +97,4 @@ export const abi = [ ] as const; export const code = - "0x608080604052346015576104f3908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c63d8f172c414610025575f80fd5b34610285576060366003190112610285576004356001600160a01b0381169190829003610285576044356001600160a01b038116929060243590849003610285576080830183811067ffffffffffffffff8211176104275760405260405161008c8161043b565b5f81525f60208201525f60408201525f60608201525f60808201528352602083016040516100b981610457565b5f81525f60208201525f60408201525f60608201525f60808201525f60a0820152815260408401915f835260608501935f8552604051632c3c915760e01b815282600482015260a081602481855afa908115610291575f9161039a575b5060249160c091885260405192838092632e3071cd60e11b82528660048301525afa908115610291575f916102fd575b5082528451604001516001600160a01b03168061029c575b508451606001516001600160a01b0316861461021e575b5060408051945180516001600160a01b039081168752602080830151821681890152828401518216888501526060808401519092168289015260809283015188840152935180516001600160801b0390811660a08a81019190915295820151811660c08a015293810151841660e0890152908101518316610100880152908101518216610120870152909101511661014084015251610160830152516101808201526101a09150f35b6020906024604051809881936301977b5760e01b835260048301525afa948515610291575f95610258575b509382526101a09360a0610175565b94506020853d602011610289575b8161027360209383610473565b810103126102855793519360a0610249565b5f80fd5b3d9150610266565b6040513d5f823e3d90fd5b60206004916040519283809263501ad8ff60e11b82525afa908115610291575f916102cb575b5083525f61015e565b90506020813d6020116102f5575b816102e660209383610473565b8101031261028557515f6102c2565b3d91506102d9565b905060c0813d60c011610392575b8161031860c09383610473565b810103126102855761038760a06040519261033284610457565b61033b816104a9565b8452610349602082016104a9565b602085015261035a604082016104a9565b604085015261036b606082016104a9565b606085015261037c608082016104a9565b6080850152016104a9565b60a08201525f610146565b3d915061030b565b905060a0813d60a01161041f575b816103b560a09383610473565b810103126102855760249160c0916080604051916103d28361043b565b6103db81610495565b83526103e960208201610495565b60208401526103fa60408201610495565b604084015261040b60608201610495565b606084015201516080820152915091610116565b3d91506103a8565b634e487b7160e01b5f52604160045260245ffd5b60a0810190811067ffffffffffffffff82111761042757604052565b60c0810190811067ffffffffffffffff82111761042757604052565b90601f8019910116810190811067ffffffffffffffff82111761042757604052565b51906001600160a01b038216820361028557565b51906001600160801b03821682036102855756fea2646970667358221220efd9cf742cd33c184d8626f47b0484ddcb653e36af9a97223b2dc7be37846d8164736f6c634300081b0033"; + "0x608080604052346015576104f8908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c63d8f172c414610025575f80fd5b34610285576060366003190112610285576004356001600160a01b0381169190829003610285576044356001600160a01b0381169290602435908490036102855761006f8361042c565b60405161007b8161042c565b5f81525f60208201525f60408201525f60608201525f60808201528352602083016040516100a88161045c565b5f81525f60208201525f60408201525f60608201525f60808201525f60a0820152815260408401905f825260608501925f845260808601945f8652604051632c3c915760e01b815282600482015260a081602481855afa908115610291575f9161039f575b5060249160c091895260405192838092632e3071cd60e11b82528660048301525afa908115610291575f91610302575b5082528551604001516001600160a01b03168061029c575b508551606001516001600160a01b0316871461021e575b5060408051955180516001600160a01b0390811688526020808301518216818a015282840151821689850152606080840151909216828a015260809283015189840152935180516001600160801b0390811660a08b81019190915295820151811660c08b015293810151841660e08a0152908101518316610100890152908101518216610120880152909101511661014085015251151561016084015251610180830152516101a08201526101c09150f35b6020906024604051809981936301977b5760e01b835260048301525afa958615610291575f96610258575b509483526101c09460a061016c565b95506020863d602011610289575b8161027360209383610478565b810103126102855794519460a0610249565b5f80fd5b3d9150610266565b6040513d5f823e3d90fd5b60206004916040519283809263501ad8ff60e11b82525afa5f91816102ce575b5015610155576001845284525f610155565b9091506020813d6020116102fa575b816102ea60209383610478565b810103126102855751905f6102bc565b3d91506102dd565b905060c0813d60c011610397575b8161031d60c09383610478565b810103126102855761038c60a0604051926103378461045c565b610340816104ae565b845261034e602082016104ae565b602085015261035f604082016104ae565b6040850152610370606082016104ae565b6060850152610381608082016104ae565b6080850152016104ae565b60a08201525f61013d565b3d9150610310565b905060a0813d60a011610424575b816103ba60a09383610478565b810103126102855760249160c0916080604051916103d78361042c565b6103e08161049a565b83526103ee6020820161049a565b60208401526103ff6040820161049a565b60408401526104106060820161049a565b60608401520151608082015291509161010d565b3d91506103ad565b60a0810190811067ffffffffffffffff82111761044857604052565b634e487b7160e01b5f52604160045260245ffd5b60c0810190811067ffffffffffffffff82111761044857604052565b90601f8019910116810190811067ffffffffffffffff82111761044857604052565b51906001600160a01b038216820361028557565b51906001600160801b03821682036102855756fea2646970667358221220acbd98f027aaca3ed2f90675c4eece5d7bd1a9fbbbb62956dae5a7491ebc745564736f6c634300081b0033"; diff --git a/packages/blue-sdk-viem/test/Market.test.ts b/packages/blue-sdk-viem/test/Market.test.ts index 2a436f6d..498d96ea 100644 --- a/packages/blue-sdk-viem/test/Market.test.ts +++ b/packages/blue-sdk-viem/test/Market.test.ts @@ -8,7 +8,8 @@ import { blueAbi } from "../src/index.js"; import { test } from "./setup.js"; const { morpho, adaptiveCurveIrm } = addresses[ChainId.EthMainnet]; -const { usdc_wstEth, usdc_idle, eth_wstEth } = markets[ChainId.EthMainnet]; +const { usdc_wstEth, usdc_idle, eth_wstEth, crvUsd_stkcvx2BTC } = + markets[ChainId.EthMainnet]; describe("augment/Market", () => { test("should fetch market data", async ({ client }) => { @@ -38,8 +39,6 @@ describe("augment/Market", () => { totalBorrowShares: 0n, lastUpdate: 1711558175n, fee: 0n, - price: 0n, - rateAtTarget: undefined, }); const value = await Market.fetch(usdc_idle.id, client); @@ -104,4 +103,36 @@ describe("augment/Market", () => { expect(value).toStrictEqual(expectedData); }); + + test("should fetch market with incorrect oracle", async ({ client }) => { + const params = new MarketParams({ + ...crvUsd_stkcvx2BTC, + oracle: randomAddress(), + }); + + const timestamp = (await client.timestamp()) + 3n; + + await client.setNextBlockTimestamp({ timestamp }); + await client.writeContract({ + address: morpho, + abi: blueAbi, + functionName: "createMarket", + args: [{ ...params }], + }); + + const expectedData = new Market({ + params, + totalSupplyAssets: 0n, + totalSupplyShares: 0n, + totalBorrowAssets: 0n, + totalBorrowShares: 0n, + lastUpdate: 1711597274n, + fee: 0n, + rateAtTarget: 1268391679n, + }); + + const value = await Market.fetch(params.id, client); + + expect(value).toStrictEqual(expectedData); + }); }); diff --git a/packages/blue-sdk/test/e2e/Market.test.ts b/packages/blue-sdk/test/e2e/Market.test.ts index 893f7638..fb83b789 100644 --- a/packages/blue-sdk/test/e2e/Market.test.ts +++ b/packages/blue-sdk/test/e2e/Market.test.ts @@ -1,5 +1,5 @@ import { Time } from "@morpho-org/morpho-ts"; -import { type Address, parseUnits } from "viem"; +import { parseUnits } from "viem"; import { describe, expect } from "vitest"; import { ChainId, Market, MarketParams, addresses } from "../../src/index.js"; import { adaptiveCurveIrmAbi, blueAbi, blueOracleAbi } from "./abis.js"; @@ -17,24 +17,6 @@ const params = new MarketParams({ lltv: parseUnits("86", 16), }); -declare module "../../src/index.js" { - interface MarketParams { - asArg: { - collateralToken: Address; - loanToken: Address; - oracle: Address; - irm: Address; - lltv: bigint; - }; - } -} - -Object.defineProperty(MarketParams.prototype, "asArg", { - get() { - return this; - }, -}); - describe("Market", () => { test("should borrow borrowable assets", async ({ client }) => { const collateral = parseUnits("1", 18); @@ -57,7 +39,7 @@ describe("Market", () => { address: morpho, functionName: "borrow", args: [ - params.asArg, + { ...params }, parseUnits("1", 6), 0n, client.account.address, @@ -122,7 +104,7 @@ describe("Market", () => { address: morpho, functionName: "borrow", args: [ - params.asArg, + { ...params }, maxBorrowable + 10n, 0n, client.account.address, @@ -136,7 +118,7 @@ describe("Market", () => { address: morpho, functionName: "borrow", args: [ - params.asArg, + { ...params }, maxBorrowable, 0n, client.account.address, @@ -172,7 +154,7 @@ describe("Market", () => { address: morpho, functionName: "borrow", args: [ - params.asArg, + { ...params }, parseUnits("1", 6), 0n, client.account.address, @@ -251,7 +233,7 @@ describe("Market", () => { address: morpho, functionName: "borrow", args: [ - params.asArg, + { ...params }, maxBorrowable, 0n, client.account.address, From d5fcc1616555e73bea1fc16ab33773325c08a239 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Mon, 21 Oct 2024 11:51:39 +0200 Subject: [PATCH 21/32] test(blue-sdk): no need for asArg --- packages/bundler-sdk-viem/test/helpers.ts | 2 +- .../test/populateBundle.test.ts | 18 +++++++++--------- packages/morpho-test/src/fixtures/markets.ts | 19 ------------------- 3 files changed, 10 insertions(+), 29 deletions(-) diff --git a/packages/bundler-sdk-viem/test/helpers.ts b/packages/bundler-sdk-viem/test/helpers.ts index 990860ce..372b5919 100644 --- a/packages/bundler-sdk-viem/test/helpers.ts +++ b/packages/bundler-sdk-viem/test/helpers.ts @@ -57,7 +57,7 @@ export const donate = abi: blueAbi, functionName: "supply", args: [ - data.getMarket(data.getVault(vault).withdrawQueue[0]!).params.asArg, + { ...data.getMarket(data.getVault(vault).withdrawQueue[0]!).params }, donation, 0n, vault, diff --git a/packages/bundler-sdk-viem/test/populateBundle.test.ts b/packages/bundler-sdk-viem/test/populateBundle.test.ts index 25c76a8d..c90573bb 100644 --- a/packages/bundler-sdk-viem/test/populateBundle.test.ts +++ b/packages/bundler-sdk-viem/test/populateBundle.test.ts @@ -638,7 +638,7 @@ describe("populateBundle", () => { address: morpho, abi: blueAbi, functionName: "createMarket", - args: [marketParams.asArg], + args: [{ ...marketParams }], }); const block = await client.getBlock(); @@ -798,7 +798,7 @@ describe("populateBundle", () => { address: morpho, abi: blueAbi, functionName: "createMarket", - args: [marketParams.asArg], + args: [{ ...marketParams }], }); const block = await client.getBlock(); @@ -1601,7 +1601,7 @@ describe("populateBundle", () => { abi: blueAbi, functionName: "borrow", args: [ - eth_wstEth.asArg, + { ...eth_wstEth }, loanAssets, 0n, client.account.address, @@ -2213,7 +2213,7 @@ describe("populateBundle", () => { abi: blueAbi, functionName: "borrow", args: [ - eth_wstEth.asArg, + { ...eth_wstEth }, borrowAmount, 0n, client.account.address, @@ -3083,7 +3083,7 @@ describe("populateBundle", () => { address: morpho, abi: blueAbi, functionName: "createMarket", - args: [marketParams.asArg], + args: [{ ...marketParams }], }); const block = await client.getBlock(); @@ -3251,7 +3251,7 @@ describe("populateBundle", () => { address: morpho, abi: blueAbi, functionName: "createMarket", - args: [marketParams.asArg], + args: [{ ...marketParams }], }); const block = await client.getBlock(); @@ -4090,7 +4090,7 @@ describe("populateBundle", () => { abi: blueAbi, functionName: "borrow", args: [ - eth_wstEth.asArg, + { ...eth_wstEth }, loanAssets, 0n, client.account.address, @@ -4725,7 +4725,7 @@ describe("populateBundle", () => { abi: blueAbi, functionName: "borrow", args: [ - eth_wstEth.asArg, + { ...eth_wstEth }, borrowAmount, 0n, client.account.address, @@ -4963,7 +4963,7 @@ describe("populateBundle", () => { address: morpho, abi: blueAbi, functionName: "createMarket", - args: [marketParams.asArg], + args: [{ ...marketParams }], }); const whitelisted = "0x53753098E2660AbD4834A3eD713D11AC1123421A"; diff --git a/packages/morpho-test/src/fixtures/markets.ts b/packages/morpho-test/src/fixtures/markets.ts index 37b9f8ff..5931ad1a 100644 --- a/packages/morpho-test/src/fixtures/markets.ts +++ b/packages/morpho-test/src/fixtures/markets.ts @@ -1,5 +1,4 @@ import { - type Address, ChainId, type InputMarketParams, MarketParams, @@ -210,21 +209,3 @@ export const randomMarket = (params: Partial = {}) => lltv: parseEther("0.80"), ...params, }); - -declare module "@morpho-org/blue-sdk" { - interface MarketParams { - asArg: { - collateralToken: Address; - loanToken: Address; - oracle: Address; - irm: Address; - lltv: bigint; - }; - } -} - -Object.defineProperty(MarketParams.prototype, "asArg", { - get() { - return this; - }, -}); From 8502e8c87d7a83f35b140c0fab022595da59f77a Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Mon, 21 Oct 2024 11:55:38 +0200 Subject: [PATCH 22/32] test(blue-sdk): remove asArg --- packages/blue-sdk/test/e2e/Market.test.ts | 30 +++++------------------ 1 file changed, 6 insertions(+), 24 deletions(-) diff --git a/packages/blue-sdk/test/e2e/Market.test.ts b/packages/blue-sdk/test/e2e/Market.test.ts index 35a64bf7..7e2e2649 100644 --- a/packages/blue-sdk/test/e2e/Market.test.ts +++ b/packages/blue-sdk/test/e2e/Market.test.ts @@ -1,5 +1,5 @@ import { Time } from "@morpho-org/morpho-ts"; -import { type Address, parseUnits } from "viem"; +import { parseUnits } from "viem"; import { describe, expect } from "vitest"; import { ChainId, Market, MarketParams, addresses } from "../../src/index.js"; import { adaptiveCurveIrmAbi, blueAbi, blueOracleAbi } from "./abis.js"; @@ -17,24 +17,6 @@ const params = new MarketParams({ lltv: parseUnits("86", 16), }); -declare module "../../src/index.js" { - interface MarketParams { - asArg: { - collateralToken: Address; - loanToken: Address; - oracle: Address; - irm: Address; - lltv: bigint; - }; - } -} - -Object.defineProperty(MarketParams.prototype, "asArg", { - get() { - return this; - }, -}); - describe("Market", () => { test("should borrow borrowable assets", async ({ client }) => { const collateral = parseUnits("1", 18); @@ -57,7 +39,7 @@ describe("Market", () => { address: morpho, functionName: "borrow", args: [ - params.asArg, + { ...params }, parseUnits("1", 6), 0n, client.account.address, @@ -122,7 +104,7 @@ describe("Market", () => { address: morpho, functionName: "borrow", args: [ - params.asArg, + { ...params }, maxBorrowable + 10n, 0n, client.account.address, @@ -136,7 +118,7 @@ describe("Market", () => { address: morpho, functionName: "borrow", args: [ - params.asArg, + { ...params }, maxBorrowable, 0n, client.account.address, @@ -172,7 +154,7 @@ describe("Market", () => { address: morpho, functionName: "borrow", args: [ - params.asArg, + { ...params }, parseUnits("1", 6), 0n, client.account.address, @@ -251,7 +233,7 @@ describe("Market", () => { address: morpho, functionName: "borrow", args: [ - params.asArg, + { ...params }, maxBorrowable, 0n, client.account.address, From 3a2a98079e7c0080e85de809c30c40307f5427d9 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Mon, 21 Oct 2024 12:01:11 +0200 Subject: [PATCH 23/32] test(blue-sdk): add invalid Token test --- .../blue-sdk-ethers/test/e2e/Token.test.ts | 11 ++++++++++- packages/blue-sdk-viem/contracts/GetToken.sol | 18 +++++++++++++++--- packages/blue-sdk-viem/src/fetch/Token.ts | 16 ++++++++++------ packages/blue-sdk-viem/src/queries/GetToken.ts | 4 +++- packages/blue-sdk-viem/test/Token.test.ts | 11 ++++++++++- 5 files changed, 48 insertions(+), 12 deletions(-) diff --git a/packages/blue-sdk-ethers/test/e2e/Token.test.ts b/packages/blue-sdk-ethers/test/e2e/Token.test.ts index fc858b91..0255d9e2 100644 --- a/packages/blue-sdk-ethers/test/e2e/Token.test.ts +++ b/packages/blue-sdk-ethers/test/e2e/Token.test.ts @@ -6,6 +6,7 @@ import { ExchangeRateWrappedToken, addresses, } from "@morpho-org/blue-sdk"; +import { randomAddress } from "@morpho-org/test"; import { Token } from "../../src/augment/Token.js"; const { mkr, usdc, stEth, wstEth } = addresses[ChainId.EthMainnet]; @@ -41,7 +42,7 @@ describe("augment/Token", () => { expect(value).toStrictEqual(expectedData); }); - test("Should fetch MKR token data", async ({ wallet }) => { + test("should fetch MKR token data", async ({ wallet }) => { const expectedData = new Token({ address: mkr, decimals: 18, @@ -53,4 +54,12 @@ describe("augment/Token", () => { expect(value).toStrictEqual(expectedData); }); + + test("should fetch invalid ERC20", async ({ wallet }) => { + const expectedData = new Token({ address: randomAddress() }); + + const value = await Token.fetch(expectedData.address, wallet); + + expect(value).toStrictEqual(expectedData); + }); }); diff --git a/packages/blue-sdk-viem/contracts/GetToken.sol b/packages/blue-sdk-viem/contracts/GetToken.sol index ffb34e8d..cf6504e8 100644 --- a/packages/blue-sdk-viem/contracts/GetToken.sol +++ b/packages/blue-sdk-viem/contracts/GetToken.sol @@ -6,16 +6,28 @@ import {IWstEth} from "./interfaces/IWstEth.sol"; struct TokenResponse { uint256 decimals; + bool hasSymbol; string symbol; + bool hasName; string name; uint256 stEthPerWstEth; } contract GetToken { function query(IERC20 token, bool isWstEth) external view returns (TokenResponse memory res) { - res.decimals = token.decimals(); - res.symbol = token.symbol(); - res.name = token.name(); + try token.name() returns (string memory name) { + res.hasName = true; + res.name = name; + } catch {} + + try token.symbol() returns (string memory symbol) { + res.hasSymbol = true; + res.symbol = symbol; + } catch {} + + try token.decimals() returns (uint8 decimals) { + res.decimals = decimals; + } catch {} if (isWstEth) res.stEthPerWstEth = IWstEth(address(token)).stEthPerToken(); } diff --git a/packages/blue-sdk-viem/src/fetch/Token.ts b/packages/blue-sdk-viem/src/fetch/Token.ts index 2954c47b..d48dc339 100644 --- a/packages/blue-sdk-viem/src/fetch/Token.ts +++ b/packages/blue-sdk-viem/src/fetch/Token.ts @@ -64,7 +64,7 @@ export async function fetchToken( return new ConstantWrappedToken( { ...token, address }, unwrapToken, - Number(token.decimals), + token.decimals, ); return new Token({ ...token, address }); @@ -79,7 +79,7 @@ export async function fetchToken( address, abi: erc20Abi, functionName: "decimals", - }), + }).catch(() => undefined), readContract(client, { ...parameters, address, @@ -91,7 +91,9 @@ export async function fetchToken( address, abi: erc20Abi_bytes32, functionName: "symbol", - }).then(decodeBytes32String), + }) + .then(decodeBytes32String) + .catch(() => undefined), ), readContract(client, { ...parameters, @@ -104,15 +106,17 @@ export async function fetchToken( address, abi: erc20Abi_bytes32, functionName: "name", - }).then(decodeBytes32String), + }) + .then(decodeBytes32String) + .catch(() => undefined), ), ]); const token = { address, - decimals: Number.parseInt(decimals.toString()), - symbol, name, + symbol, + decimals, }; switch (address) { diff --git a/packages/blue-sdk-viem/src/queries/GetToken.ts b/packages/blue-sdk-viem/src/queries/GetToken.ts index 0af1467c..a8837d29 100644 --- a/packages/blue-sdk-viem/src/queries/GetToken.ts +++ b/packages/blue-sdk-viem/src/queries/GetToken.ts @@ -17,7 +17,9 @@ export const abi = [ name: "decimals", type: "uint256", }, + { internalType: "bool", name: "hasSymbol", type: "bool" }, { internalType: "string", name: "symbol", type: "string" }, + { internalType: "bool", name: "hasName", type: "bool" }, { internalType: "string", name: "name", type: "string" }, { internalType: "uint256", @@ -36,4 +38,4 @@ export const abi = [ ] as const; export const code = - "0x60808060405234601557610340908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c63287861f914610025575f80fd5b346101ad5760403660031901126101ad576004356001600160a01b03811691908290036101ad5760243580151581036101ad576080820182811067ffffffffffffffff82111761023d576040525f8252602082019260608452604083016060815260608401925f845260405163313ce56760e01b8152602081600481875afa80156101b9575f90610200575b60ff168652506040516395d89b4160e01b81525f81600481875afa9081156101b9575f916101e6575b5086526040516306fdde0360e01b81525f81600481875afa9081156101b9575f916101c4575b508252610150575b610145915061013260405195869560208752516020870152516080604087015260a0860190610251565b9051848203601f19016060860152610251565b905160808301520390f35b6020600492604051938480926301afd7c160e11b82525afa80156101b9575f90610181575b61014592508352610108565b506020823d6020116101b1575b8161019b60209383610275565b810103126101ad576101459151610175565b5f80fd5b3d915061018e565b6040513d5f823e3d90fd5b6101e091503d805f833e6101d88183610275565b810190610297565b5f610100565b6101fa91503d805f833e6101d88183610275565b5f6100da565b506020813d602011610235575b8161021a60209383610275565b810103126101ad575160ff811681036101ad5760ff906100b1565b3d915061020d565b634e487b7160e01b5f52604160045260245ffd5b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b90601f8019910116810190811067ffffffffffffffff82111761023d57604052565b6020818303126101ad5780519067ffffffffffffffff82116101ad570181601f820112156101ad5780519067ffffffffffffffff821161023d57604051926102e9601f8401601f191660200185610275565b828452602083830101116101ad57815f9260208093018386015e830101529056fea26469706673582212204029d875a2a9b244354fa7f1fc88d7b3d1ed680b6f90febd3e2794ee5f5e0dc064736f6c634300081b0033"; + "0x60808060405234601557610381908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c63287861f914610025575f80fd5b346101c65760403660031901126101c6576004356001600160a01b03811691908290036101c65760243580151581036101c65760c0820182811067ffffffffffffffff82111761027e576040525f825260208201925f845260408301906060825260608401905f825260808501906060825260a08601945f86526040516306fdde0360e01b81525f81600481865afa5f9181610262575b50610256575b506040516395d89b4160e01b81525f81600481865afa5f9181610232575b50610226575b5060405163313ce56760e01b8152602081600481865afa5f91816101e8575b506101dd575b50610169575b5061014361015e936040519788976020895251602089015251151560408801525160c0606088015260e0870190610292565b91511515608086015251848203601f190160a0860152610292565b905160c08301520390f35b6020600491604051928380926301afd7c160e11b82525afa9081156101d2575f9161019a575b508452610143610111565b90506020813d6020116101ca575b816101b5602093836102b6565b810103126101c6575161015e61018f565b5f80fd5b3d91506101a8565b6040513d5f823e3d90fd5b60ff1687525f61010b565b9091506020813d60201161021e575b81610204602093836102b6565b810103126101c6575160ff811681036101c657905f610105565b3d91506101f7565b6001895285525f6100e6565b61024f9192503d805f833e61024781836102b6565b8101906102d8565b905f6100e0565b6001855283525f6100c2565b6102779192503d805f833e61024781836102b6565b905f6100bc565b634e487b7160e01b5f52604160045260245ffd5b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b90601f8019910116810190811067ffffffffffffffff82111761027e57604052565b6020818303126101c65780519067ffffffffffffffff82116101c6570181601f820112156101c65780519067ffffffffffffffff821161027e576040519261032a601f8401601f1916602001856102b6565b828452602083830101116101c657815f9260208093018386015e830101529056fea2646970667358221220dff7800207ff93ada53a101a16f58240d78a80116545865cc793f9dbeb97fd7764736f6c634300081b0033"; diff --git a/packages/blue-sdk-viem/test/Token.test.ts b/packages/blue-sdk-viem/test/Token.test.ts index 3edcd19e..f369b8f3 100644 --- a/packages/blue-sdk-viem/test/Token.test.ts +++ b/packages/blue-sdk-viem/test/Token.test.ts @@ -6,6 +6,7 @@ import { ExchangeRateWrappedToken, addresses, } from "@morpho-org/blue-sdk"; +import { randomAddress } from "@morpho-org/test"; import { Token } from "../src/augment/Token.js"; const { mkr, usdc, stEth, wstEth } = addresses[ChainId.EthMainnet]; @@ -41,7 +42,7 @@ describe("augment/Token", () => { expect(value).toStrictEqual(expectedData); }); - test("Should fetch MKR token data", async ({ client }) => { + test("should fetch MKR token data", async ({ client }) => { const expectedData = new Token({ address: mkr, decimals: 18, @@ -53,4 +54,12 @@ describe("augment/Token", () => { expect(value).toStrictEqual(expectedData); }); + + test("should fetch invalid ERC20", async ({ client }) => { + const expectedData = new Token({ address: randomAddress() }); + + const value = await Token.fetch(expectedData.address, client); + + expect(value).toStrictEqual(expectedData); + }); }); From 4a21aad41ade6c9263aaa81cd73508b5cc60711b Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Mon, 21 Oct 2024 12:02:11 +0200 Subject: [PATCH 24/32] test(blue-sdk-ethers): add invalid oracle Market test --- .../blue-sdk-ethers/test/e2e/Market.test.ts | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/packages/blue-sdk-ethers/test/e2e/Market.test.ts b/packages/blue-sdk-ethers/test/e2e/Market.test.ts index 66f2e57b..68ed1ec2 100644 --- a/packages/blue-sdk-ethers/test/e2e/Market.test.ts +++ b/packages/blue-sdk-ethers/test/e2e/Market.test.ts @@ -8,7 +8,8 @@ import { blueAbi } from "./abis.js"; import { test } from "./setup.js"; const { morpho, adaptiveCurveIrm } = addresses[ChainId.EthMainnet]; -const { usdc_wstEth, usdc_idle, eth_wstEth } = markets[ChainId.EthMainnet]; +const { usdc_wstEth, usdc_idle, eth_wstEth, crvUsd_stkcvx2BTC } = + markets[ChainId.EthMainnet]; describe("augment/Market", () => { test("should fetch market data", async ({ wallet }) => { @@ -103,4 +104,39 @@ describe("augment/Market", () => { expect(value).toStrictEqual(expectedData); }); + + test("should fetch market with incorrect oracle", async ({ + client, + wallet, + }) => { + const params = new MarketParams({ + ...crvUsd_stkcvx2BTC, + oracle: randomAddress(), + }); + + const timestamp = (await client.timestamp()) + 3n; + + await client.setNextBlockTimestamp({ timestamp }); + await client.writeContract({ + address: morpho, + abi: blueAbi, + functionName: "createMarket", + args: [{ ...params }], + }); + + const expectedData = new Market({ + params, + totalSupplyAssets: 0n, + totalSupplyShares: 0n, + totalBorrowAssets: 0n, + totalBorrowShares: 0n, + lastUpdate: 1711597274n, + fee: 0n, + rateAtTarget: 1268391679n, + }); + + const value = await Market.fetch(params.id, wallet); + + expect(value).toStrictEqual(expectedData); + }); }); From 93cee0db327e4f9e8ae2f94105d08249774120ce Mon Sep 17 00:00:00 2001 From: Romain Milon Date: Mon, 21 Oct 2024 12:05:55 +0200 Subject: [PATCH 25/32] docs(README): add img Signed-off-by: Romain Milon --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9745042c..bf413375 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,9 @@ # Morpho SDKs -A collection of Software Development Kits to ease interactions with the Morpho protocol and Morpho Vaults. +![image](https://github.com/user-attachments/assets/c77d5054-5342-4c1b-81ae-b8c002c2fd8d) + +

A collection of Software Development Kits to ease interactions with the Morpho protocol and Morpho Vaults.

+
## Getting Started From e0cc8ee2bf2ff51daf32f4f068c1b2b90e3dee3c Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Mon, 21 Oct 2024 12:26:29 +0200 Subject: [PATCH 26/32] fix(blue-sdk): make domain name possibly undefined --- packages/blue-sdk-viem/src/signatures/permit.ts | 4 ++-- packages/blue-sdk/src/token/Token.ts | 7 ++++--- .../examples/whitelisted-erc4626-1inch.ts | 4 ++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/blue-sdk-viem/src/signatures/permit.ts b/packages/blue-sdk-viem/src/signatures/permit.ts index e76ec546..6db53664 100644 --- a/packages/blue-sdk-viem/src/signatures/permit.ts +++ b/packages/blue-sdk-viem/src/signatures/permit.ts @@ -6,7 +6,7 @@ import { import type { TypedDataDefinition } from "viem"; export interface PermitArgs { - name: string; + name?: string; address: Address; owner: Address; spender: Address; @@ -36,7 +36,7 @@ export const getPermitTypedData = ( const { usdc } = getChainAddresses(chainId); const domain = { - name: name, + name, version: address === usdc ? "2" : "1", chainId, verifyingContract: address, diff --git a/packages/blue-sdk/src/token/Token.ts b/packages/blue-sdk/src/token/Token.ts index 7d6694bc..c90bcc37 100644 --- a/packages/blue-sdk/src/token/Token.ts +++ b/packages/blue-sdk/src/token/Token.ts @@ -43,17 +43,18 @@ export class Token implements InputToken { */ public price?: bigint; - constructor({ address, decimals = 0, symbol, name, price }: InputToken) { + constructor({ address, name, symbol, decimals = 0, price }: InputToken) { this.address = address; this.name = name; this.symbol = symbol; this.decimals = Number(decimals); + if (price != null) this.price = BigInt(price); } /** * Quotes an amount in USD (scaled by WAD) in this token. - * Returns undefined iff the token's price is undefined. + * Returns `undefined` iff the token's price is undefined. * @param amount The amount of USD to quote. */ fromUsd(amount: bigint, rounding: RoundingDirection = "Down") { @@ -69,7 +70,7 @@ export class Token implements InputToken { /** * Quotes an amount of tokens in USD (scaled by WAD). - * Returns undefined iff the token's price is undefined. + * Returns `undefined` iff the token's price is undefined. * @param amount The amount of tokens to quote. */ toUsd(amount: bigint, rounding: RoundingDirection = "Down") { diff --git a/packages/liquidation-sdk-viem/examples/whitelisted-erc4626-1inch.ts b/packages/liquidation-sdk-viem/examples/whitelisted-erc4626-1inch.ts index 8979dcb1..49ed1792 100644 --- a/packages/liquidation-sdk-viem/examples/whitelisted-erc4626-1inch.ts +++ b/packages/liquidation-sdk-viem/examples/whitelisted-erc4626-1inch.ts @@ -102,14 +102,14 @@ export const check = async < return console.warn(`Unknown oracle price for market "${market.id}"`); try { - const collateralToken = converter.getTokenWithPrice( + const collateralToken = converter.getToken( position.market.collateralAsset, wethPriceUsd, ); if (collateralToken.price == null) throw new UnknownTokenPriceError(collateralToken.address); - const loanToken = converter.getTokenWithPrice( + const loanToken = converter.getToken( position.market.loanAsset, wethPriceUsd, ); From 2f75bd74ca8ad5c5ad9395c8fe02164bdabf567d Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Mon, 21 Oct 2024 12:27:33 +0200 Subject: [PATCH 27/32] docs(blue-sdk): quote undefined --- packages/blue-sdk/src/market/Market.ts | 24 ++++++++++----------- packages/blue-sdk/src/market/MarketUtils.ts | 24 ++++++++++----------- packages/blue-sdk/src/position/Position.ts | 18 ++++++++-------- 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/packages/blue-sdk/src/market/Market.ts b/packages/blue-sdk/src/market/Market.ts index 7046ee39..391d3b5d 100644 --- a/packages/blue-sdk/src/market/Market.ts +++ b/packages/blue-sdk/src/market/Market.ts @@ -88,7 +88,7 @@ export class Market implements InputMarket { /** * The price as returned by the market's oracle. - * Undefined if the oracle is undefined or reverts. + * `undefined` if the oracle is undefined or reverts. */ public price?: bigint; @@ -378,7 +378,7 @@ export class Market implements InputMarket { /** * Returns the value of a given amount of collateral quoted in loan assets. - * Undefined iff the market's oracle is undefined or reverts. + * `undefined` iff the market's oracle is undefined or reverts. * @param collateral The amount of collateral to quote. */ public getCollateralValue(collateral: bigint) { @@ -387,7 +387,7 @@ export class Market implements InputMarket { /** * Returns the maximum debt allowed given a certain amount of collateral. - * Undefined iff the market's oracle is undefined or reverts. + * `undefined` iff the market's oracle is undefined or reverts. * To calculate the amount of loan assets that can be borrowed, use `getMaxBorrowableAssets`. * @param collateral The amount of collateral to consider. */ @@ -402,7 +402,7 @@ export class Market implements InputMarket { /** * Returns the maximum amount of loan assets that can be borrowed given a certain borrow position. - * Undefined iff the market's oracle is undefined or reverts. + * `undefined` iff the market's oracle is undefined or reverts. * @param position The borrow position to consider. */ public getMaxBorrowableAssets(position: { @@ -414,7 +414,7 @@ export class Market implements InputMarket { /** * Returns the amount of collateral that would be seized in a liquidation given a certain amount of repaid shares. - * Undefined iff the market's oracle is undefined or reverts. + * `undefined` iff the market's oracle is undefined or reverts. * @param repaidShares The amount of shares hypothetically repaid. */ public getLiquidationSeizedAssets(repaidShares: bigint) { @@ -427,7 +427,7 @@ export class Market implements InputMarket { /** * Returns the amount of borrow shares that would be repaid in a liquidation given a certain amount of seized collateral. - * Undefined iff the market's oracle is undefined or reverts. + * `undefined` iff the market's oracle is undefined or reverts. * @param seizedAssets The amount of collateral hypothetically seized. */ public getLiquidationRepaidShares(seizedAssets: bigint) { @@ -440,7 +440,7 @@ export class Market implements InputMarket { /** * Returns the maximum amount of collateral that is worth being seized in a liquidation given a certain borrow position. - * Undefined iff the market's oracle is undefined or reverts. + * `undefined` iff the market's oracle is undefined or reverts. * @param position The borrow position to consider. */ public getSeizableCollateral(position: { @@ -452,7 +452,7 @@ export class Market implements InputMarket { /** * Returns the amount of collateral that can be withdrawn given a certain borrow position. - * Undefined iff the market's oracle is undefined or reverts. + * `undefined` iff the market's oracle is undefined or reverts. * @param position The borrow position to consider. */ public getWithdrawableCollateral( @@ -469,7 +469,7 @@ export class Market implements InputMarket { /** * Returns whether a given borrow position is healthy. - * Undefined iff the market's oracle is undefined or reverts. + * `undefined` iff the market's oracle is undefined or reverts. * @param position The borrow position to check. */ public isHealthy(position: { collateral: bigint; borrowShares: bigint }) { @@ -490,7 +490,7 @@ export class Market implements InputMarket { /** * Returns the price variation required for the given position to reach its liquidation threshold (scaled by WAD). * Negative when healthy (the price needs to drop x%), positive when unhealthy (the price needs to soar x%). - * Returns undefined iff the market's price is undefined. + * Returns `undefined` iff the market's price is undefined. * Returns null if the position is not a borrow. * @param position The borrow position to consider. */ @@ -538,7 +538,7 @@ export class Market implements InputMarket { /** * Returns the maximum amount of loan assets that can be borrowed given a certain borrow position * and the reason for the limit. - * Returns undefined iff the market's price is undefined. + * Returns `undefined` iff the market's price is undefined. * @param position The borrow position to consider. */ public getBorrowCapacityLimit( @@ -625,7 +625,7 @@ export class Market implements InputMarket { /** * Returns the maximum amount of collateral assets that can be withdrawn given a certain borrow position * and the reason for the limit. - * Returns undefined iff the market's price is undefined. + * Returns `undefined` iff the market's price is undefined. * @param position The borrow position to consider. */ public getWithdrawCollateralCapacityLimit( diff --git a/packages/blue-sdk/src/market/MarketUtils.ts b/packages/blue-sdk/src/market/MarketUtils.ts index e766e917..fd81c6a6 100644 --- a/packages/blue-sdk/src/market/MarketUtils.ts +++ b/packages/blue-sdk/src/market/MarketUtils.ts @@ -238,7 +238,7 @@ export namespace MarketUtils { /** * Returns the value of a given amount of collateral quoted in loan assets. - * Return undefined iff the market's price is undefined. + * Return `undefined` iff the market's price is undefined. */ export function getCollateralValue( collateral: BigIntish, @@ -251,7 +251,7 @@ export namespace MarketUtils { /** * Returns the maximum debt allowed given a certain amount of collateral. - * Return undefined iff the market's price is undefined. + * Return `undefined` iff the market's price is undefined. * To calculate the amount of loan assets that can be borrowed, use `getMaxBorrowableAssets`. */ export function getMaxBorrowAssets( @@ -267,7 +267,7 @@ export namespace MarketUtils { /** * Returns the maximum amount of loan assets that can be borrowed given a certain borrow position. - * Return undefined iff the market's price is undefined. + * Return `undefined` iff the market's price is undefined. */ export function getMaxBorrowableAssets( { @@ -296,7 +296,7 @@ export namespace MarketUtils { /** * Returns the amount of collateral that would be seized in a liquidation given a certain amount of repaid shares. - * Return undefined iff the market's price is undefined. + * Return `undefined` iff the market's price is undefined. */ export function getLiquidationSeizedAssets( repaidShares: BigIntish, @@ -324,7 +324,7 @@ export namespace MarketUtils { /** * Returns the amount of borrow shares that would be repaid in a liquidation given a certain amount of seized collateral. - * Return undefined iff the market's price is undefined. + * Return `undefined` iff the market's price is undefined. */ export function getLiquidationRepaidShares( seizedAssets: BigIntish, @@ -349,7 +349,7 @@ export namespace MarketUtils { /** * Returns the maximum amount of collateral that is worth being seized in a liquidation given a certain borrow position. - * Return undefined iff the market's price is undefined. + * Return `undefined` iff the market's price is undefined. */ export function getSeizableCollateral( position: { collateral: BigIntish; borrowShares: BigIntish }, @@ -373,7 +373,7 @@ export namespace MarketUtils { /** * Returns the amount of collateral that can be withdrawn given a certain borrow position. - * Return undefined iff the market's price is undefined. + * Return `undefined` iff the market's price is undefined. */ export function getWithdrawableCollateral( { @@ -407,7 +407,7 @@ export namespace MarketUtils { /** * Returns whether a given borrow position is healthy. - * Return undefined iff the market's price is undefined. + * Return `undefined` iff the market's price is undefined. * @param position The borrow position to check. */ export function isHealthy( @@ -463,7 +463,7 @@ export namespace MarketUtils { /** * Returns the price variation required for the given position to reach its liquidation threshold (scaled by WAD). * Negative when healthy (the price needs to drop x%), positive when unhealthy (the price needs to soar x%). - * Returns undefined iff the market's price is undefined. + * Returns `undefined` iff the market's price is undefined. * Returns null if the position is not a borrow. */ export function getPriceVariationToLiquidationPrice( @@ -492,7 +492,7 @@ export namespace MarketUtils { /** * Returns the health factor of a given borrow position (scaled by WAD). - * Returns undefined iff the market's price is undefined. + * Returns `undefined` iff the market's price is undefined. * Returns null if the position is not a borrow. */ export function getHealthFactor( @@ -526,7 +526,7 @@ export namespace MarketUtils { /** * Returns the loan-to-value ratio of a given borrow position (scaled by WAD). - * Returns undefined iff the market's price is undefined. + * Returns `undefined` iff the market's price is undefined. * Returns null if the position is not a borrow. */ export function getLtv( @@ -556,7 +556,7 @@ export namespace MarketUtils { /** * Returns the usage ratio of the maximum borrow capacity given a certain borrow position (scaled by WAD). - * Returns undefined iff the market's price is undefined. + * Returns `undefined` iff the market's price is undefined. */ export function getBorrowCapacityUsage( position: { collateral: BigIntish; borrowShares: BigIntish }, diff --git a/packages/blue-sdk/src/position/Position.ts b/packages/blue-sdk/src/position/Position.ts index 48ee006b..140d2d77 100644 --- a/packages/blue-sdk/src/position/Position.ts +++ b/packages/blue-sdk/src/position/Position.ts @@ -77,7 +77,7 @@ export class AccrualPosition extends Position implements InputAccrualPosition { /** * The value of this position's collateral quoted in loan assets. - * Undefined iff the market's oracle is undefined or reverts. + * `undefined` iff the market's oracle is undefined or reverts. */ get collateralValue() { return this.market.getCollateralValue(this.collateral); @@ -85,7 +85,7 @@ export class AccrualPosition extends Position implements InputAccrualPosition { /** * The maximum amount of loan assets that can be borrowed against this position's collateral. - * Undefined iff the market's oracle is undefined or reverts. + * `undefined` iff the market's oracle is undefined or reverts. */ get maxBorrowAssets() { return this.market.getMaxBorrowAssets(this.collateral); @@ -93,7 +93,7 @@ export class AccrualPosition extends Position implements InputAccrualPosition { /** * The maximum additional amount of assets that can be borrowed against this position's collateral. - * Undefined iff the market's oracle is undefined or reverts. + * `undefined` iff the market's oracle is undefined or reverts. */ get maxBorrowableAssets() { return this.market.getMaxBorrowableAssets(this); @@ -101,7 +101,7 @@ export class AccrualPosition extends Position implements InputAccrualPosition { /** * The maximum amount of collateral that can be seized in exchange for the outstanding debt. - * Undefined iff the market's oracle is undefined or reverts. + * `undefined` iff the market's oracle is undefined or reverts. */ get seizableCollateral() { return this.market.getSeizableCollateral(this); @@ -109,7 +109,7 @@ export class AccrualPosition extends Position implements InputAccrualPosition { /** * The maximum amount of collateral that can be withdrawn. - * Undefined iff the market's oracle is undefined or reverts. + * `undefined` iff the market's oracle is undefined or reverts. */ get withdrawableCollateral() { return this.market.getWithdrawableCollateral(this); @@ -117,7 +117,7 @@ export class AccrualPosition extends Position implements InputAccrualPosition { /** * Whether this position is healthy. - * Undefined iff the market's oracle is undefined or reverts. + * `undefined` iff the market's oracle is undefined or reverts. */ get isHealthy() { return this.market.isHealthy(this); @@ -133,7 +133,7 @@ export class AccrualPosition extends Position implements InputAccrualPosition { /** * The price variation required for the position to reach its liquidation threshold (scaled by WAD). * Negative when healthy (the price needs to drop x%), positive when unhealthy (the price needs to soar x%). - * Undefined iff the market's oracle is undefined or reverts. + * `undefined` iff the market's oracle is undefined or reverts. * Null if the position is not a borrow. */ get priceVariationToLiquidationPrice() { @@ -143,7 +143,7 @@ export class AccrualPosition extends Position implements InputAccrualPosition { /** * This position's Loan-To-Value (debt over collateral power, scaled by WAD). * If the collateral price is 0, LTV is `MaxUint256`. - * Undefined iff the market's oracle is undefined or reverts. + * `undefined` iff the market's oracle is undefined or reverts. */ get ltv() { return this.market.getLtv(this); @@ -152,7 +152,7 @@ export class AccrualPosition extends Position implements InputAccrualPosition { /** * This position's health factor (collateral power over debt, scaled by WAD). * If the debt is 0, health factor is `MaxUint256`. - * Undefined iff the market's oracle is undefined or reverts. + * `undefined` iff the market's oracle is undefined or reverts. */ get healthFactor() { return this.market.getHealthFactor(this); From f36182fba0c47a5ec8387951c207bf5ee95aa357 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Tue, 22 Oct 2024 09:51:00 +0200 Subject: [PATCH 28/32] build(deps): bump dev dependencies --- packages/blue-api-sdk/package.json | 4 +- packages/blue-sdk-ethers/package.json | 4 +- packages/blue-sdk-viem/package.json | 2 +- packages/blue-sdk/package.json | 2 +- packages/bundler-sdk-viem/package.json | 2 +- packages/liquidation-sdk-viem/package.json | 2 +- packages/morpho-test/package.json | 2 +- packages/simulation-sdk/package.json | 2 +- packages/test-ethers/package.json | 6 +- packages/test-viem/package.json | 2 +- packages/test-wagmi/package.json | 2 +- packages/test/package.json | 2 +- pnpm-lock.yaml | 228 ++++++++++----------- 13 files changed, 130 insertions(+), 130 deletions(-) diff --git a/packages/blue-api-sdk/package.json b/packages/blue-api-sdk/package.json index 23b1fe35..9ae95ef1 100644 --- a/packages/blue-api-sdk/package.json +++ b/packages/blue-api-sdk/package.json @@ -23,8 +23,8 @@ "@morpho-org/morpho-ts": "workspace:^" }, "devDependencies": { - "@graphql-codegen/cli": "^5.0.0", - "@graphql-codegen/typescript": "^4.0.1", + "@graphql-codegen/cli": "^5.0.3", + "@graphql-codegen/typescript": "^4.1.0", "@morpho-org/blue-sdk": "workspace:^", "@morpho-org/morpho-ts": "workspace:^", "graphql": "^16.9.0", diff --git a/packages/blue-sdk-ethers/package.json b/packages/blue-sdk-ethers/package.json index ce6fcdbf..2c238d2b 100644 --- a/packages/blue-sdk-ethers/package.json +++ b/packages/blue-sdk-ethers/package.json @@ -20,8 +20,8 @@ "@morpho-org/morpho-ts": "workspace:^", "@morpho-org/test": "workspace:^", "@morpho-org/test-ethers": "workspace:^", - "@types/node": "^22.7.7", - "ethers": "^6.13.3", + "@types/node": "^22.7.8", + "ethers": "^6.13.4", "ethers-types": "^3.17.0", "typescript": "^5.6.3", "viem": "^2.21.32", diff --git a/packages/blue-sdk-viem/package.json b/packages/blue-sdk-viem/package.json index 5b854313..555d6e6e 100644 --- a/packages/blue-sdk-viem/package.json +++ b/packages/blue-sdk-viem/package.json @@ -30,7 +30,7 @@ "@morpho-org/morpho-ts": "workspace:^", "@morpho-org/test": "workspace:^", "@morpho-org/test-viem": "workspace:^", - "@types/node": "^22.7.7", + "@types/node": "^22.7.8", "hardhat": "^2.22.13", "ts-node": "^10.9.2", "typescript": "^5.6.3", diff --git a/packages/blue-sdk/package.json b/packages/blue-sdk/package.json index b451bb93..f2692ee4 100644 --- a/packages/blue-sdk/package.json +++ b/packages/blue-sdk/package.json @@ -29,7 +29,7 @@ "@morpho-org/morpho-ts": "workspace:^", "@morpho-org/test": "workspace:^", "@morpho-org/test-viem": "workspace:^", - "@types/node": "^22.7.7", + "@types/node": "^22.7.8", "typescript": "^5.6.3", "viem": "^2.21.32", "viem-deal": "^2.0.1", diff --git a/packages/bundler-sdk-viem/package.json b/packages/bundler-sdk-viem/package.json index 0a1f1852..2700a8ed 100644 --- a/packages/bundler-sdk-viem/package.json +++ b/packages/bundler-sdk-viem/package.json @@ -36,7 +36,7 @@ "@morpho-org/test-wagmi": "workspace:^", "@testing-library/dom": "^10.4.0", "@types/lodash": "^4.17.7", - "@types/node": "^22.7.7", + "@types/node": "^22.7.8", "lodash": "^4.17.21", "typescript": "^5.6.3", "viem": "^2.21.32", diff --git a/packages/liquidation-sdk-viem/package.json b/packages/liquidation-sdk-viem/package.json index 5b2e98e7..e9487cb0 100644 --- a/packages/liquidation-sdk-viem/package.json +++ b/packages/liquidation-sdk-viem/package.json @@ -46,7 +46,7 @@ "@morpho-org/morpho-ts": "workspace:^", "@morpho-org/test": "workspace:^", "@morpho-org/test-viem": "workspace:^", - "@types/node": "^22.7.7", + "@types/node": "^22.7.8", "evm-maths": "^7.0.0", "executooor-viem": "^1.3.3", "fetch-mock": "^11.1.5", diff --git a/packages/morpho-test/package.json b/packages/morpho-test/package.json index 608bfacb..541be5f8 100644 --- a/packages/morpho-test/package.json +++ b/packages/morpho-test/package.json @@ -28,7 +28,7 @@ "@morpho-org/blue-sdk": "workspace:^", "@morpho-org/morpho-ts": "workspace:^", "@morpho-org/test": "workspace:^", - "@types/node": "^22.7.7", + "@types/node": "^22.7.8", "typescript": "^5.6.3", "viem": "^2.21.32" }, diff --git a/packages/simulation-sdk/package.json b/packages/simulation-sdk/package.json index 4e5c5ce8..1c0d252b 100644 --- a/packages/simulation-sdk/package.json +++ b/packages/simulation-sdk/package.json @@ -30,7 +30,7 @@ "@morpho-org/morpho-ts": "workspace:^", "@morpho-org/test": "workspace:^", "@types/lodash": "^4.17.9", - "@types/node": "^22.7.7", + "@types/node": "^22.7.8", "lodash": "^4.17.21", "mutative": "^1.0.11", "typescript": "^5.6.3", diff --git a/packages/test-ethers/package.json b/packages/test-ethers/package.json index f4ff2663..2b683aee 100644 --- a/packages/test-ethers/package.json +++ b/packages/test-ethers/package.json @@ -14,15 +14,15 @@ "peerDependencies": { "@morpho-org/test": "workspace:^", "@morpho-org/test-viem": "workspace:^", - "ethers": "^6.13.3", + "ethers": "^6.13.0", "viem": "^2.21.10", "vitest": "^2.1.0" }, "devDependencies": { "@morpho-org/test": "workspace:^", "@morpho-org/test-viem": "workspace:^", - "@types/node": "^22.7.7", - "ethers": "^6.13.3", + "@types/node": "^22.7.8", + "ethers": "^6.13.4", "typescript": "^5.6.3", "viem": "^2.21.32", "vitest": "^2.1.3" diff --git a/packages/test-viem/package.json b/packages/test-viem/package.json index 8f6d5408..55296ec5 100644 --- a/packages/test-viem/package.json +++ b/packages/test-viem/package.json @@ -29,7 +29,7 @@ }, "devDependencies": { "@morpho-org/test": "workspace:^", - "@types/node": "^22.7.7", + "@types/node": "^22.7.8", "typescript": "^5.6.3", "viem": "^2.21.32", "viem-deal": "^2.0.1", diff --git a/packages/test-wagmi/package.json b/packages/test-wagmi/package.json index e08251c1..1f0de8f3 100644 --- a/packages/test-wagmi/package.json +++ b/packages/test-wagmi/package.json @@ -24,7 +24,7 @@ "@tanstack/react-query": "^5.59.0", "@testing-library/dom": "^10.4.0", "@testing-library/react": "^16.0.1", - "@types/node": "^22.7.7", + "@types/node": "^22.7.8", "@types/react": "^18.3.1", "@types/react-dom": "^18.3.0", "@wagmi/core": "^2.13.9", diff --git a/packages/test/package.json b/packages/test/package.json index 7e0fc380..dcb9f054 100644 --- a/packages/test/package.json +++ b/packages/test/package.json @@ -20,7 +20,7 @@ }, "devDependencies": { "@types/lodash.kebabcase": "^4.1.9", - "@types/node": "^22.7.7", + "@types/node": "^22.7.8", "typescript": "^5.6.3", "viem": "^2.21.32", "vitest": "^2.1.3" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 94d860b0..7a2a7fcd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,13 +16,13 @@ importers: version: 1.9.4 '@commitlint/cli': specifier: ^19.5.0 - version: 19.5.0(@types/node@22.7.7)(typescript@5.6.3) + version: 19.5.0(@types/node@22.7.8)(typescript@5.6.3) '@commitlint/config-conventional': specifier: ^19.5.0 version: 19.5.0 '@vitest/coverage-v8': specifier: ^2.1.3 - version: 2.1.3(vitest@2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0)) + version: 2.1.3(vitest@2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0)) conventional-changelog-conventionalcommits: specifier: ^8.0.0 version: 8.0.0 @@ -52,15 +52,15 @@ importers: version: 5.6.3 vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) packages/blue-api-sdk: devDependencies: '@graphql-codegen/cli': - specifier: ^5.0.0 - version: 5.0.3(@parcel/watcher@2.4.1)(@types/node@22.7.7)(bufferutil@4.0.8)(encoding@0.1.13)(enquirer@2.4.1)(graphql@16.9.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^5.0.3 + version: 5.0.3(@parcel/watcher@2.4.1)(@types/node@22.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(enquirer@2.4.1)(graphql@16.9.0)(typescript@5.6.3)(utf-8-validate@5.0.10) '@graphql-codegen/typescript': - specifier: ^4.0.1 + specifier: ^4.1.0 version: 4.1.0(encoding@0.1.13)(graphql@16.9.0) '@morpho-org/blue-sdk': specifier: workspace:^ @@ -91,8 +91,8 @@ importers: specifier: workspace:^ version: link:../test-viem '@types/node': - specifier: ^22.7.7 - version: 22.7.7 + specifier: ^22.7.8 + version: 22.7.8 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -104,7 +104,7 @@ importers: version: 2.0.1(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) packages/blue-sdk-ethers: dependencies: @@ -128,10 +128,10 @@ importers: specifier: workspace:^ version: link:../test-ethers '@types/node': - specifier: ^22.7.7 - version: 22.7.7 + specifier: ^22.7.8 + version: 22.7.8 ethers: - specifier: ^6.13.3 + specifier: ^6.13.4 version: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) ethers-types: specifier: ^3.17.0 @@ -144,7 +144,7 @@ importers: version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) packages/blue-sdk-viem: devDependencies: @@ -164,14 +164,14 @@ importers: specifier: workspace:^ version: link:../test-viem '@types/node': - specifier: ^22.7.7 - version: 22.7.7 + specifier: ^22.7.8 + version: 22.7.8 hardhat: specifier: ^2.22.13 - version: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.7.7)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + version: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.7.8)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@22.7.7)(typescript@5.6.3) + version: 10.9.2(@types/node@22.7.8)(typescript@5.6.3) typescript: specifier: ^5.6.3 version: 5.6.3 @@ -180,7 +180,7 @@ importers: version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) packages/blue-sdk-wagmi: devDependencies: @@ -237,7 +237,7 @@ importers: version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) wagmi: specifier: ^2.12.20 version: 2.12.20(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) @@ -275,8 +275,8 @@ importers: specifier: ^4.17.7 version: 4.17.10 '@types/node': - specifier: ^22.7.7 - version: 22.7.7 + specifier: ^22.7.8 + version: 22.7.8 lodash: specifier: ^4.17.21 version: 4.17.21 @@ -288,7 +288,7 @@ importers: version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) packages/liquidation-sdk-viem: dependencies: @@ -310,7 +310,7 @@ importers: devDependencies: '@graphql-codegen/cli': specifier: ^5.0.3 - version: 5.0.3(@parcel/watcher@2.4.1)(@types/node@22.7.7)(bufferutil@4.0.8)(encoding@0.1.13)(enquirer@2.4.1)(graphql@16.9.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + version: 5.0.3(@parcel/watcher@2.4.1)(@types/node@22.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(enquirer@2.4.1)(graphql@16.9.0)(typescript@5.6.3)(utf-8-validate@5.0.10) '@graphql-codegen/import-types-preset': specifier: ^3.0.0 version: 3.0.0(encoding@0.1.13)(graphql@16.9.0) @@ -348,8 +348,8 @@ importers: specifier: workspace:^ version: link:../test-viem '@types/node': - specifier: ^22.7.7 - version: 22.7.7 + specifier: ^22.7.8 + version: 22.7.8 evm-maths: specifier: ^7.0.0 version: 7.0.0 @@ -358,13 +358,13 @@ importers: version: 11.1.5 hardhat: specifier: ^2.22.13 - version: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.7.7)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + version: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.7.8)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) nock: specifier: beta version: 14.0.0-beta.15 ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@22.7.7)(typescript@5.6.3) + version: 10.9.2(@types/node@22.7.8)(typescript@5.6.3) typescript: specifier: ^5.6.3 version: 5.6.3 @@ -373,7 +373,7 @@ importers: version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) packages/morpho-test: devDependencies: @@ -387,8 +387,8 @@ importers: specifier: workspace:^ version: link:../test '@types/node': - specifier: ^22.7.7 - version: 22.7.7 + specifier: ^22.7.8 + version: 22.7.8 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -403,7 +403,7 @@ importers: version: 5.6.3 vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) packages/simulation-sdk: devDependencies: @@ -423,8 +423,8 @@ importers: specifier: ^4.17.9 version: 4.17.10 '@types/node': - specifier: ^22.7.7 - version: 22.7.7 + specifier: ^22.7.8 + version: 22.7.8 lodash: specifier: ^4.17.21 version: 4.17.21 @@ -439,7 +439,7 @@ importers: version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) packages/simulation-sdk-wagmi: devDependencies: @@ -505,7 +505,7 @@ importers: version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) wagmi: specifier: ^2.12.20 version: 2.12.20(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) @@ -520,8 +520,8 @@ importers: specifier: ^4.1.9 version: 4.1.9 '@types/node': - specifier: ^22.7.7 - version: 22.7.7 + specifier: ^22.7.8 + version: 22.7.8 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -530,7 +530,7 @@ importers: version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) packages/test-ethers: devDependencies: @@ -541,10 +541,10 @@ importers: specifier: workspace:^ version: link:../test-viem '@types/node': - specifier: ^22.7.7 - version: 22.7.7 + specifier: ^22.7.8 + version: 22.7.8 ethers: - specifier: ^6.13.3 + specifier: ^6.13.4 version: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) typescript: specifier: ^5.6.3 @@ -554,7 +554,7 @@ importers: version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) packages/test-viem: dependencies: @@ -566,8 +566,8 @@ importers: specifier: workspace:^ version: link:../test '@types/node': - specifier: ^22.7.7 - version: 22.7.7 + specifier: ^22.7.8 + version: 22.7.8 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -579,7 +579,7 @@ importers: version: 2.0.1(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) packages/test-wagmi: devDependencies: @@ -599,8 +599,8 @@ importers: specifier: ^16.0.1 version: 16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/node': - specifier: ^22.7.7 - version: 22.7.7 + specifier: ^22.7.8 + version: 22.7.8 '@types/react': specifier: ^18.3.1 version: 18.3.11 @@ -627,7 +627,7 @@ importers: version: 2.0.1(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) wagmi: specifier: ^2.12.20 version: 2.12.20(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) @@ -2774,8 +2774,8 @@ packages: '@types/node@22.7.5': resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} - '@types/node@22.7.7': - resolution: {integrity: sha512-SRxCrrg9CL/y54aiMCG3edPKdprgMVGDXjA3gB8UmmBW5TcXzRUYAh8EWzTnSJFAd1rgImPELza+A3bJ+qxz8Q==} + '@types/node@22.7.8': + resolution: {integrity: sha512-a922jJy31vqR5sk+kAdIENJjHblqcZ4RmERviFsER4WJcEONqxKcjNOlk0q7OUfrF5sddT+vng070cdfMlrPLg==} '@types/pbkdf2@3.1.2': resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} @@ -7683,11 +7683,11 @@ snapshots: preact: 10.24.3 sha.js: 2.4.11 - '@commitlint/cli@19.5.0(@types/node@22.7.7)(typescript@5.6.3)': + '@commitlint/cli@19.5.0(@types/node@22.7.8)(typescript@5.6.3)': dependencies: '@commitlint/format': 19.5.0 '@commitlint/lint': 19.5.0 - '@commitlint/load': 19.5.0(@types/node@22.7.7)(typescript@5.6.3) + '@commitlint/load': 19.5.0(@types/node@22.7.8)(typescript@5.6.3) '@commitlint/read': 19.5.0 '@commitlint/types': 19.5.0 tinyexec: 0.3.1 @@ -7734,7 +7734,7 @@ snapshots: '@commitlint/rules': 19.5.0 '@commitlint/types': 19.5.0 - '@commitlint/load@19.5.0(@types/node@22.7.7)(typescript@5.6.3)': + '@commitlint/load@19.5.0(@types/node@22.7.8)(typescript@5.6.3)': dependencies: '@commitlint/config-validator': 19.5.0 '@commitlint/execute-rule': 19.5.0 @@ -7742,7 +7742,7 @@ snapshots: '@commitlint/types': 19.5.0 chalk: 5.3.0 cosmiconfig: 9.0.0(typescript@5.6.3) - cosmiconfig-typescript-loader: 5.0.0(@types/node@22.7.7)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3) + cosmiconfig-typescript-loader: 5.0.0(@types/node@22.7.8)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -8031,7 +8031,7 @@ snapshots: graphql: 16.9.0 tslib: 2.6.3 - '@graphql-codegen/cli@5.0.3(@parcel/watcher@2.4.1)(@types/node@22.7.7)(bufferutil@4.0.8)(encoding@0.1.13)(enquirer@2.4.1)(graphql@16.9.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': + '@graphql-codegen/cli@5.0.3(@parcel/watcher@2.4.1)(@types/node@22.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(enquirer@2.4.1)(graphql@16.9.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': dependencies: '@babel/generator': 7.25.7 '@babel/template': 7.25.7 @@ -8042,12 +8042,12 @@ snapshots: '@graphql-tools/apollo-engine-loader': 8.0.2(encoding@0.1.13)(graphql@16.9.0) '@graphql-tools/code-file-loader': 8.1.4(graphql@16.9.0) '@graphql-tools/git-loader': 8.0.8(graphql@16.9.0) - '@graphql-tools/github-loader': 8.0.2(@types/node@22.7.7)(encoding@0.1.13)(graphql@16.9.0) + '@graphql-tools/github-loader': 8.0.2(@types/node@22.7.8)(encoding@0.1.13)(graphql@16.9.0) '@graphql-tools/graphql-file-loader': 8.0.2(graphql@16.9.0) '@graphql-tools/json-file-loader': 8.0.2(graphql@16.9.0) '@graphql-tools/load': 8.0.3(graphql@16.9.0) - '@graphql-tools/prisma-loader': 8.0.6(@types/node@22.7.7)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) - '@graphql-tools/url-loader': 8.0.4(@types/node@22.7.7)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) + '@graphql-tools/prisma-loader': 8.0.6(@types/node@22.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) + '@graphql-tools/url-loader': 8.0.4(@types/node@22.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.5.5(graphql@16.9.0) '@whatwg-node/fetch': 0.9.21 chalk: 4.1.2 @@ -8055,7 +8055,7 @@ snapshots: debounce: 1.2.1 detect-indent: 6.1.0 graphql: 16.9.0 - graphql-config: 5.1.3(@types/node@22.7.7)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + graphql-config: 5.1.3(@types/node@22.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(typescript@5.6.3)(utf-8-validate@5.0.10) inquirer: 8.2.6 is-glob: 4.0.3 jiti: 1.21.6 @@ -8311,14 +8311,14 @@ snapshots: - bufferutil - utf-8-validate - '@graphql-tools/executor-http@1.1.7(@types/node@22.7.7)(graphql@16.9.0)': + '@graphql-tools/executor-http@1.1.7(@types/node@22.7.8)(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.5.5(graphql@16.9.0) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/fetch': 0.9.21 extract-files: 11.0.0 graphql: 16.9.0 - meros: 1.3.0(@types/node@22.7.7) + meros: 1.3.0(@types/node@22.7.8) tslib: 2.8.0 value-or-promise: 1.0.12 transitivePeerDependencies: @@ -8357,10 +8357,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/github-loader@8.0.2(@types/node@22.7.7)(encoding@0.1.13)(graphql@16.9.0)': + '@graphql-tools/github-loader@8.0.2(@types/node@22.7.8)(encoding@0.1.13)(graphql@16.9.0)': dependencies: '@ardatan/sync-fetch': 0.0.1(encoding@0.1.13) - '@graphql-tools/executor-http': 1.1.7(@types/node@22.7.7)(graphql@16.9.0) + '@graphql-tools/executor-http': 1.1.7(@types/node@22.7.8)(graphql@16.9.0) '@graphql-tools/graphql-tag-pluck': 8.3.3(graphql@16.9.0) '@graphql-tools/utils': 10.5.5(graphql@16.9.0) '@whatwg-node/fetch': 0.9.21 @@ -8426,16 +8426,16 @@ snapshots: '@graphql-tools/optimize@1.4.0(graphql@16.9.0)': dependencies: graphql: 16.9.0 - tslib: 2.6.3 + tslib: 2.8.0 '@graphql-tools/optimize@2.0.0(graphql@16.9.0)': dependencies: graphql: 16.9.0 - tslib: 2.6.3 + tslib: 2.8.0 - '@graphql-tools/prisma-loader@8.0.6(@types/node@22.7.7)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10)': + '@graphql-tools/prisma-loader@8.0.6(@types/node@22.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10)': dependencies: - '@graphql-tools/url-loader': 8.0.4(@types/node@22.7.7)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) + '@graphql-tools/url-loader': 8.0.4(@types/node@22.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.5.5(graphql@16.9.0) '@types/js-yaml': 4.0.9 '@whatwg-node/fetch': 0.9.21 @@ -8464,7 +8464,7 @@ snapshots: '@ardatan/relay-compiler': 12.0.0(encoding@0.1.13)(graphql@16.9.0) '@graphql-tools/utils': 9.2.1(graphql@16.9.0) graphql: 16.9.0 - tslib: 2.6.3 + tslib: 2.8.0 transitivePeerDependencies: - encoding - supports-color @@ -8474,7 +8474,7 @@ snapshots: '@ardatan/relay-compiler': 12.0.0(encoding@0.1.13)(graphql@16.9.0) '@graphql-tools/utils': 10.5.5(graphql@16.9.0) graphql: 16.9.0 - tslib: 2.6.3 + tslib: 2.8.0 transitivePeerDependencies: - encoding - supports-color @@ -8487,12 +8487,12 @@ snapshots: tslib: 2.8.0 value-or-promise: 1.0.12 - '@graphql-tools/url-loader@8.0.4(@types/node@22.7.7)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10)': + '@graphql-tools/url-loader@8.0.4(@types/node@22.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10)': dependencies: '@ardatan/sync-fetch': 0.0.1(encoding@0.1.13) '@graphql-tools/delegate': 10.0.23(graphql@16.9.0) '@graphql-tools/executor-graphql-ws': 1.3.1(bufferutil@4.0.8)(graphql@16.9.0)(utf-8-validate@5.0.10) - '@graphql-tools/executor-http': 1.1.7(@types/node@22.7.7)(graphql@16.9.0) + '@graphql-tools/executor-http': 1.1.7(@types/node@22.7.8)(graphql@16.9.0) '@graphql-tools/executor-legacy-ws': 1.1.1(bufferutil@4.0.8)(graphql@16.9.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.5.5(graphql@16.9.0) '@graphql-tools/wrap': 10.0.7(graphql@16.9.0) @@ -8520,13 +8520,13 @@ snapshots: '@graphql-tools/utils@8.13.1(graphql@16.9.0)': dependencies: graphql: 16.9.0 - tslib: 2.6.3 + tslib: 2.8.0 '@graphql-tools/utils@9.2.1(graphql@16.9.0)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) graphql: 16.9.0 - tslib: 2.6.3 + tslib: 2.8.0 '@graphql-tools/wrap@10.0.7(graphql@16.9.0)': dependencies: @@ -8568,14 +8568,14 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.7 + '@types/node': 22.7.8 jest-mock: 29.7.0 '@jest/fake-timers@29.7.0': dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.7.7 + '@types/node': 22.7.8 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -8588,7 +8588,7 @@ snapshots: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@types/yargs': 15.0.19 chalk: 4.1.2 @@ -8597,7 +8597,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -9624,15 +9624,15 @@ snapshots: '@types/bn.js@4.11.6': dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@types/bn.js@5.1.6': dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@types/conventional-commits-parser@5.0.0': dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@types/debug@4.1.12': dependencies: @@ -9668,19 +9668,19 @@ snapshots: '@types/node-forge@1.3.11': dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@types/node@22.7.5': dependencies: undici-types: 6.19.8 - '@types/node@22.7.7': + '@types/node@22.7.8': dependencies: undici-types: 6.19.8 '@types/pbkdf2@3.1.2': dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@types/prop-types@15.7.13': {} @@ -9695,7 +9695,7 @@ snapshots: '@types/secp256k1@4.0.6': dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@types/semver@7.5.8': {} @@ -9707,7 +9707,7 @@ snapshots: '@types/ws@8.5.12': dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@types/yargs-parser@21.0.3': {} @@ -9719,7 +9719,7 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@vitest/coverage-v8@2.1.3(vitest@2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0))': + '@vitest/coverage-v8@2.1.3(vitest@2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -9733,7 +9733,7 @@ snapshots: std-env: 3.7.0 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0) + vitest: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) transitivePeerDependencies: - supports-color @@ -9744,13 +9744,13 @@ snapshots: chai: 5.1.1 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.7.7)(terser@5.35.0))': + '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.7.8)(terser@5.35.0))': dependencies: '@vitest/spy': 2.1.3 estree-walker: 3.0.3 magic-string: 0.30.12 optionalDependencies: - vite: 5.4.9(@types/node@22.7.7)(terser@5.35.0) + vite: 5.4.9(@types/node@22.7.8)(terser@5.35.0) '@vitest/pretty-format@2.1.3': dependencies: @@ -10606,7 +10606,7 @@ snapshots: chrome-launcher@0.15.2: dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -10615,7 +10615,7 @@ snapshots: chromium-edge-launcher@0.2.0: dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -10831,9 +10831,9 @@ snapshots: core-util-is@1.0.3: {} - cosmiconfig-typescript-loader@5.0.0(@types/node@22.7.7)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3): + cosmiconfig-typescript-loader@5.0.0(@types/node@22.7.8)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3): dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 cosmiconfig: 9.0.0(typescript@5.6.3) jiti: 1.21.6 typescript: 5.6.3 @@ -11567,13 +11567,13 @@ snapshots: graceful-fs@4.2.11: {} - graphql-config@5.1.3(@types/node@22.7.7)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(typescript@5.6.3)(utf-8-validate@5.0.10): + graphql-config@5.1.3(@types/node@22.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(typescript@5.6.3)(utf-8-validate@5.0.10): dependencies: '@graphql-tools/graphql-file-loader': 8.0.2(graphql@16.9.0) '@graphql-tools/json-file-loader': 8.0.2(graphql@16.9.0) '@graphql-tools/load': 8.0.3(graphql@16.9.0) '@graphql-tools/merge': 9.0.8(graphql@16.9.0) - '@graphql-tools/url-loader': 8.0.4(@types/node@22.7.7)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) + '@graphql-tools/url-loader': 8.0.4(@types/node@22.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.5.5(graphql@16.9.0) cosmiconfig: 8.3.6(typescript@5.6.3) graphql: 16.9.0 @@ -11634,7 +11634,7 @@ snapshots: webidl-conversions: 7.0.0 whatwg-mimetype: 3.0.0 - hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.7.7)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10): + hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.7.8)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10): dependencies: '@ethersproject/abi': 5.7.0 '@metamask/eth-sig-util': 4.0.1 @@ -11681,7 +11681,7 @@ snapshots: uuid: 8.3.2 ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) optionalDependencies: - ts-node: 10.9.2(@types/node@22.7.7)(typescript@5.6.3) + ts-node: 10.9.2(@types/node@22.7.8)(typescript@5.6.3) typescript: 5.6.3 transitivePeerDependencies: - bufferutil @@ -12034,7 +12034,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.7 + '@types/node': 22.7.8 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -12055,13 +12055,13 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.7.7 + '@types/node': 22.7.8 jest-util: 29.7.0 jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.7.7 + '@types/node': 22.7.8 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -12078,7 +12078,7 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -12423,9 +12423,9 @@ snapshots: merge2@1.4.1: {} - meros@1.3.0(@types/node@22.7.7): + meros@1.3.0(@types/node@22.7.8): optionalDependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 metro-babel-transformer@0.80.12: dependencies: @@ -13783,14 +13783,14 @@ snapshots: ts-log@2.2.7: {} - ts-node@10.9.2(@types/node@22.7.7)(typescript@5.6.3): + ts-node@10.9.2(@types/node@22.7.8)(typescript@5.6.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.7.7 + '@types/node': 22.7.8 acorn: 8.13.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -13978,12 +13978,12 @@ snapshots: - utf-8-validate - zod - vite-node@2.1.3(@types/node@22.7.7)(terser@5.35.0): + vite-node@2.1.3(@types/node@22.7.8)(terser@5.35.0): dependencies: cac: 6.7.14 debug: 4.3.7(supports-color@8.1.1) pathe: 1.1.2 - vite: 5.4.9(@types/node@22.7.7)(terser@5.35.0) + vite: 5.4.9(@types/node@22.7.8)(terser@5.35.0) transitivePeerDependencies: - '@types/node' - less @@ -13995,20 +13995,20 @@ snapshots: - supports-color - terser - vite@5.4.9(@types/node@22.7.7)(terser@5.35.0): + vite@5.4.9(@types/node@22.7.8)(terser@5.35.0): dependencies: esbuild: 0.21.5 postcss: 8.4.47 rollup: 4.24.0 optionalDependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 fsevents: 2.3.3 terser: 5.35.0 - vitest@2.1.3(@types/node@22.7.7)(happy-dom@15.7.4)(terser@5.35.0): + vitest@2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0): dependencies: '@vitest/expect': 2.1.3 - '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.7.7)(terser@5.35.0)) + '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.7.8)(terser@5.35.0)) '@vitest/pretty-format': 2.1.3 '@vitest/runner': 2.1.3 '@vitest/snapshot': 2.1.3 @@ -14023,11 +14023,11 @@ snapshots: tinyexec: 0.3.1 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.4.9(@types/node@22.7.7)(terser@5.35.0) - vite-node: 2.1.3(@types/node@22.7.7)(terser@5.35.0) + vite: 5.4.9(@types/node@22.7.8)(terser@5.35.0) + vite-node: 2.1.3(@types/node@22.7.8)(terser@5.35.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 happy-dom: 15.7.4 transitivePeerDependencies: - less From 04f5acfe541622fb67323ae1a4cc2e1a59f332d2 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Tue, 22 Oct 2024 10:04:23 +0200 Subject: [PATCH 29/32] build(blue-sdk): replace keccak256 with noble hashes --- packages/blue-sdk/package.json | 2 +- packages/blue-sdk/src/market/MarketUtils.ts | 30 ++++++++++++--------- pnpm-lock.yaml | 15 +++-------- 3 files changed, 22 insertions(+), 25 deletions(-) diff --git a/packages/blue-sdk/package.json b/packages/blue-sdk/package.json index f2692ee4..7fc807cb 100644 --- a/packages/blue-sdk/package.json +++ b/packages/blue-sdk/package.json @@ -20,7 +20,7 @@ "test": "vitest" }, "dependencies": { - "keccak256": "^1.0.6" + "@noble/hashes": "^1.5.0" }, "peerDependencies": { "@morpho-org/morpho-ts": "workspace:^" diff --git a/packages/blue-sdk/src/market/MarketUtils.ts b/packages/blue-sdk/src/market/MarketUtils.ts index fd81c6a6..15a03896 100644 --- a/packages/blue-sdk/src/market/MarketUtils.ts +++ b/packages/blue-sdk/src/market/MarketUtils.ts @@ -1,5 +1,5 @@ -import keccak256 from "keccak256"; - +import { keccak_256 } from "@noble/hashes/sha3"; +import { bytesToHex, hexToBytes } from "@noble/hashes/utils"; import { LIQUIDATION_CURSOR, MAX_LIQUIDATION_INCENTIVE_FACTOR, @@ -8,7 +8,6 @@ import { } from "../constants.js"; import { MathLib, type RoundingDirection, SharesMath } from "../math/index.js"; import type { BigIntish, MarketId } from "../types.js"; - import type { InputMarketParams } from "./MarketParams.js"; /** @@ -20,15 +19,22 @@ export namespace MarketUtils { * @param market The market params. */ export function getMarketId(market: InputMarketParams) { - return `0x${keccak256( - `0x${ - market.loanToken.substring(2).toLowerCase().padStart(64, "0") + - market.collateralToken.substring(2).toLowerCase().padStart(64, "0") + - market.oracle.substring(2).padStart(64, "0") + - market.irm.substring(2).toLowerCase().padStart(64, "0") + - BigInt(market.lltv).toString(16).padStart(64, "0") - }`, - ).toString("hex")}` as MarketId; + return `0x${bytesToHex( + keccak_256( + hexToBytes( + `${ + market.loanToken.substring(2).toLowerCase().padStart(64, "0") + + market.collateralToken + .substring(2) + .toLowerCase() + .padStart(64, "0") + + market.oracle.substring(2).padStart(64, "0") + + market.irm.substring(2).toLowerCase().padStart(64, "0") + + BigInt(market.lltv).toString(16).padStart(64, "0") + }`, + ), + ), + )}` as MarketId; } /** diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7a2a7fcd..9c62d356 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -77,9 +77,9 @@ importers: packages/blue-sdk: dependencies: - keccak256: - specifier: ^1.0.6 - version: 1.0.6 + '@noble/hashes': + specifier: ^1.5.0 + version: 1.5.0 devDependencies: '@morpho-org/morpho-ts': specifier: workspace:^ @@ -4758,9 +4758,6 @@ packages: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} - keccak256@1.0.6: - resolution: {integrity: sha512-8GLiM01PkdJVGUhR1e6M/AvWnSqYS0HaERI+K/QtStGDGlSTx2B1zTqZk4Zlqu5TxHJNTxWAdP9Y+WI50OApUw==} - keccak@3.0.4: resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} engines: {node: '>=10.0.0'} @@ -12171,12 +12168,6 @@ snapshots: jsonparse@1.3.1: {} - keccak256@1.0.6: - dependencies: - bn.js: 5.2.1 - buffer: 6.0.3 - keccak: 3.0.4 - keccak@3.0.4: dependencies: node-addon-api: 2.0.2 From b502adfbf3e7a408de408c9b805661eeac734b3f Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Tue, 22 Oct 2024 10:07:54 +0200 Subject: [PATCH 30/32] ci(blue-sdk): fix gh release comd --- .github/workflows/publish.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 31646343..eaa38f05 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -58,13 +58,14 @@ jobs: - run: | pnpm -r -c exec 'node ../../scripts/release/version.js' echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > ~/.npmrc + echo "${{ steps.release.outputs.changelog }}" > CHANGELOG.md if: steps.release.outputs.version - run: pnpm publish --no-git-checks --access public --tag ${{ steps.release.outputs.channel }} working-directory: packages/${{ matrix.package }} if: steps.release.outputs.version - - run: gh release create ${{ steps.release.outputs.tag }} --target ${{ steps.release.outputs.branch }} --notes '${{ steps.release.outputs.changelog }}' --title '${{ steps.release.outputs.tag }}' ${{ steps.release.outputs.channel == 'latest' && '--latest' || '--prerelease' }} + - run: gh release create ${{ steps.release.outputs.tag }} --target ${{ steps.release.outputs.branch }} --notes-file CHANGELOG.md --title '${{ steps.release.outputs.tag }}' ${{ steps.release.outputs.channel == 'latest' && '--latest' || '--prerelease' }} if: steps.release.outputs.version env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 71f1cfd1c13b5431c5f8652a6a152d280a0bb9f3 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Tue, 22 Oct 2024 10:19:29 +0200 Subject: [PATCH 31/32] build: update secp256k1 --- packages/blue-sdk-ethers/package.json | 2 +- packages/blue-sdk-wagmi/package.json | 8 +- packages/bundler-sdk-viem/package.json | 2 +- packages/simulation-sdk-wagmi/package.json | 8 +- packages/simulation-sdk/package.json | 2 +- packages/test-wagmi/package.json | 10 +- pnpm-lock.yaml | 440 +++++++++++---------- 7 files changed, 243 insertions(+), 229 deletions(-) diff --git a/packages/blue-sdk-ethers/package.json b/packages/blue-sdk-ethers/package.json index 2c238d2b..c0c8c68e 100644 --- a/packages/blue-sdk-ethers/package.json +++ b/packages/blue-sdk-ethers/package.json @@ -22,7 +22,7 @@ "@morpho-org/test-ethers": "workspace:^", "@types/node": "^22.7.8", "ethers": "^6.13.4", - "ethers-types": "^3.17.0", + "ethers-types": "^3.17.2", "typescript": "^5.6.3", "viem": "^2.21.32", "vitest": "^2.1.3" diff --git a/packages/blue-sdk-wagmi/package.json b/packages/blue-sdk-wagmi/package.json index be55a77e..636ca0b0 100644 --- a/packages/blue-sdk-wagmi/package.json +++ b/packages/blue-sdk-wagmi/package.json @@ -38,15 +38,15 @@ "@tanstack/react-query": "^5.59.15", "@testing-library/dom": "^10.4.0", "@testing-library/react": "^16.0.1", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.3.0", - "@wagmi/core": "^2.13.9", + "@types/react": "^18.3.11", + "@types/react-dom": "^18.3.1", + "@wagmi/core": "^2.14.1", "react": "^18.3.1", "react-dom": "^18.3.1", "typescript": "^5.6.3", "viem": "^2.21.32", "vitest": "^2.1.3", - "wagmi": "^2.12.20" + "wagmi": "^2.12.22" }, "publishConfig": { "main": "lib/index.js", diff --git a/packages/bundler-sdk-viem/package.json b/packages/bundler-sdk-viem/package.json index 2700a8ed..cc5d4167 100644 --- a/packages/bundler-sdk-viem/package.json +++ b/packages/bundler-sdk-viem/package.json @@ -35,7 +35,7 @@ "@morpho-org/test-viem": "workspace:^", "@morpho-org/test-wagmi": "workspace:^", "@testing-library/dom": "^10.4.0", - "@types/lodash": "^4.17.7", + "@types/lodash": "^4.17.12", "@types/node": "^22.7.8", "lodash": "^4.17.21", "typescript": "^5.6.3", diff --git a/packages/simulation-sdk-wagmi/package.json b/packages/simulation-sdk-wagmi/package.json index e0d7bd19..c2f76dfb 100644 --- a/packages/simulation-sdk-wagmi/package.json +++ b/packages/simulation-sdk-wagmi/package.json @@ -43,9 +43,9 @@ "@morpho-org/test-wagmi": "workspace:^", "@tanstack/query-core": "^5.59.13", "@tanstack/react-query": "^5.59.15", - "@types/lodash": "^4.17.9", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.3.0", + "@types/lodash": "^4.17.12", + "@types/react": "^18.3.11", + "@types/react-dom": "^18.3.1", "lodash": "^4.17.21", "mutative": "^1.0.11", "react": "^18.3.1", @@ -53,7 +53,7 @@ "typescript": "^5.6.3", "viem": "^2.21.32", "vitest": "^2.1.3", - "wagmi": "^2.12.20" + "wagmi": "^2.12.22" }, "publishConfig": { "main": "lib/index.js", diff --git a/packages/simulation-sdk/package.json b/packages/simulation-sdk/package.json index 1c0d252b..9a2cad0e 100644 --- a/packages/simulation-sdk/package.json +++ b/packages/simulation-sdk/package.json @@ -29,7 +29,7 @@ "@morpho-org/morpho-test": "workspace:^", "@morpho-org/morpho-ts": "workspace:^", "@morpho-org/test": "workspace:^", - "@types/lodash": "^4.17.9", + "@types/lodash": "^4.17.12", "@types/node": "^22.7.8", "lodash": "^4.17.21", "mutative": "^1.0.11", diff --git a/packages/test-wagmi/package.json b/packages/test-wagmi/package.json index 1f0de8f3..22db97e1 100644 --- a/packages/test-wagmi/package.json +++ b/packages/test-wagmi/package.json @@ -21,20 +21,20 @@ "devDependencies": { "@morpho-org/test": "workspace:^", "@morpho-org/test-viem": "workspace:^", - "@tanstack/react-query": "^5.59.0", + "@tanstack/react-query": "^5.59.15", "@testing-library/dom": "^10.4.0", "@testing-library/react": "^16.0.1", "@types/node": "^22.7.8", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.3.0", - "@wagmi/core": "^2.13.9", + "@types/react": "^18.3.11", + "@types/react-dom": "^18.3.1", + "@wagmi/core": "^2.14.1", "react": "^18.3.1", "react-dom": "^18.3.1", "typescript": "^5.6.3", "viem": "^2.21.32", "viem-deal": "^2.0.1", "vitest": "^2.1.3", - "wagmi": "^2.12.20" + "wagmi": "^2.12.22" }, "publishConfig": { "main": "lib/index.js", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7a2a7fcd..510b00f4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -22,7 +22,7 @@ importers: version: 19.5.0 '@vitest/coverage-v8': specifier: ^2.1.3 - version: 2.1.3(vitest@2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0)) + version: 2.1.3(vitest@2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.36.0)) conventional-changelog-conventionalcommits: specifier: ^8.0.0 version: 8.0.0 @@ -52,7 +52,7 @@ importers: version: 5.6.3 vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.36.0) packages/blue-api-sdk: devDependencies: @@ -104,7 +104,7 @@ importers: version: 2.0.1(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.36.0) packages/blue-sdk-ethers: dependencies: @@ -134,7 +134,7 @@ importers: specifier: ^6.13.4 version: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) ethers-types: - specifier: ^3.17.0 + specifier: ^3.17.2 version: 3.17.2(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)) typescript: specifier: ^5.6.3 @@ -144,7 +144,7 @@ importers: version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.36.0) packages/blue-sdk-viem: devDependencies: @@ -180,7 +180,7 @@ importers: version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.36.0) packages/blue-sdk-wagmi: devDependencies: @@ -215,14 +215,14 @@ importers: specifier: ^16.0.1 version: 16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': - specifier: ^18.3.1 + specifier: ^18.3.11 version: 18.3.11 '@types/react-dom': - specifier: ^18.3.0 + specifier: ^18.3.1 version: 18.3.1 '@wagmi/core': - specifier: ^2.13.9 - version: 2.13.9(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + specifier: ^2.14.1 + version: 2.14.1(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) react: specifier: ^18.3.1 version: 18.3.1 @@ -237,10 +237,10 @@ importers: version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.36.0) wagmi: - specifier: ^2.12.20 - version: 2.12.20(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + specifier: ^2.12.22 + version: 2.12.22(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) packages/bundler-sdk-viem: devDependencies: @@ -272,8 +272,8 @@ importers: specifier: ^10.4.0 version: 10.4.0 '@types/lodash': - specifier: ^4.17.7 - version: 4.17.10 + specifier: ^4.17.12 + version: 4.17.12 '@types/node': specifier: ^22.7.8 version: 22.7.8 @@ -288,7 +288,7 @@ importers: version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.36.0) packages/liquidation-sdk-viem: dependencies: @@ -373,7 +373,7 @@ importers: version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.36.0) packages/morpho-test: devDependencies: @@ -403,7 +403,7 @@ importers: version: 5.6.3 vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.36.0) packages/simulation-sdk: devDependencies: @@ -420,8 +420,8 @@ importers: specifier: workspace:^ version: link:../test '@types/lodash': - specifier: ^4.17.9 - version: 4.17.10 + specifier: ^4.17.12 + version: 4.17.12 '@types/node': specifier: ^22.7.8 version: 22.7.8 @@ -439,7 +439,7 @@ importers: version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.36.0) packages/simulation-sdk-wagmi: devDependencies: @@ -477,13 +477,13 @@ importers: specifier: ^5.59.15 version: 5.59.15(react@18.3.1) '@types/lodash': - specifier: ^4.17.9 - version: 4.17.10 + specifier: ^4.17.12 + version: 4.17.12 '@types/react': - specifier: ^18.3.1 + specifier: ^18.3.11 version: 18.3.11 '@types/react-dom': - specifier: ^18.3.0 + specifier: ^18.3.1 version: 18.3.1 lodash: specifier: ^4.17.21 @@ -505,10 +505,10 @@ importers: version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.36.0) wagmi: - specifier: ^2.12.20 - version: 2.12.20(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + specifier: ^2.12.22 + version: 2.12.22(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) packages/test: dependencies: @@ -530,7 +530,7 @@ importers: version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.36.0) packages/test-ethers: devDependencies: @@ -554,7 +554,7 @@ importers: version: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.36.0) packages/test-viem: dependencies: @@ -579,7 +579,7 @@ importers: version: 2.0.1(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.36.0) packages/test-wagmi: devDependencies: @@ -590,7 +590,7 @@ importers: specifier: workspace:^ version: link:../test-viem '@tanstack/react-query': - specifier: ^5.59.0 + specifier: ^5.59.15 version: 5.59.15(react@18.3.1) '@testing-library/dom': specifier: ^10.4.0 @@ -602,14 +602,14 @@ importers: specifier: ^22.7.8 version: 22.7.8 '@types/react': - specifier: ^18.3.1 + specifier: ^18.3.11 version: 18.3.11 '@types/react-dom': - specifier: ^18.3.0 + specifier: ^18.3.1 version: 18.3.1 '@wagmi/core': - specifier: ^2.13.9 - version: 2.13.9(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + specifier: ^2.14.1 + version: 2.14.1(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) react: specifier: ^18.3.1 version: 18.3.1 @@ -627,10 +627,10 @@ importers: version: 2.0.1(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) + version: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.36.0) wagmi: - specifier: ^2.12.20 - version: 2.12.20(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + specifier: ^2.12.22 + version: 2.12.22(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) packages: @@ -1778,8 +1778,8 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/delegate@10.0.23': - resolution: {integrity: sha512-DXt1Gz+mVLbOljO9CF+SPh77LKVgskiD4OaIQ8hH2keBAXW8Ob8+sBINuPHGRg2oL3RrW5ncVUFrTj1wQFSgdg==} + '@graphql-tools/delegate@10.0.26': + resolution: {integrity: sha512-8KaphA86onhO8h9WJeu7YpRNwYDkbbD+KctV6LPJ99vK3w+rQuWkZoxrL1H2nN2FwDBP/9OXposeE7z5C6cv8w==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -1873,8 +1873,8 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/prisma-loader@8.0.6': - resolution: {integrity: sha512-UYygi6xxMaeiKtGwocAC1L8g9Fcm5LbjpqQmZUBOSL1qeagruTZB7Zrms1+waFRAyodEBAtFSRtj94/PYjIgdg==} + '@graphql-tools/prisma-loader@8.0.9': + resolution: {integrity: sha512-Xav7rPzt43L+ij8iAuWw319E8/9DEnvp637jGknGDxuRaLLmnUpozczEczMyUUD0cQeEPdEBq5XHNJ/O3XijZQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -1896,8 +1896,8 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/url-loader@8.0.4': - resolution: {integrity: sha512-QeSf37DEk7CLSQSP3xKvYiqvtSCBWPD5HuDHhmtnrZ7wt/NCkTeok7yLN1B/tcoAOvGBk+PknBKVyOnaQ4Yp/w==} + '@graphql-tools/url-loader@8.0.7': + resolution: {integrity: sha512-f1mq1wb1ivn8qFDVm8GWO5Co6Y/NZVXHgEG+3rjntr7aXjnw+DXyDQ+7QJRWJRDJcP0YWLJgfrBcWo1CqI4Qow==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -1918,8 +1918,8 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/wrap@10.0.7': - resolution: {integrity: sha512-mhaUBtgBAK/Xlk2dAfAmtsll1hrR9/KBlTfN5kj+81LCxtXwJa9v5cJJtEVBX7UxMF44OtUVutQW8XrFb1HMZQ==} + '@graphql-tools/wrap@10.0.10': + resolution: {integrity: sha512-3f1CUM+EpsALjt/HofzSWCLyfY65o9VpmqCTvIwVWGOnaP82cWbZE1Ytwb+t7yAZBKqCCc+1ginp+COIPD3ULw==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -2042,8 +2042,8 @@ packages: '@metamask/safe-event-emitter@2.0.0': resolution: {integrity: sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==} - '@metamask/safe-event-emitter@3.1.1': - resolution: {integrity: sha512-ihb3B0T/wJm1eUuArYP4lCTSEoZsClHhuWyfo/kMX3m/odpqNcPfsz5O2A3NT7dXCAgWPGDQGPqygCpgeniKMw==} + '@metamask/safe-event-emitter@3.1.2': + resolution: {integrity: sha512-5yb2gMI1BDm0JybZezeoX/3XhPDOtTbcFvpTXM9kxsoZjPZFh4XciqRbpD6N86HYZqWDhEaKUDuOyR0sQHEjMA==} engines: {node: '>=12.0.0'} '@metamask/sdk-communication-layer@0.30.0': @@ -2122,8 +2122,8 @@ packages: resolution: {integrity: sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg==} deprecated: Motion One for Vue is deprecated. Use Oku Motion instead https://oku-ui.com/motion - '@mswjs/interceptors@0.36.4': - resolution: {integrity: sha512-ktzj7bra4HatOGqXw/PXyresXxFtnZa570rm4olAyf9HbvNdEWRkQl81ykmJK0nCHxNndmh2zQ84TBYKFDM+sg==} + '@mswjs/interceptors@0.36.5': + resolution: {integrity: sha512-aQ8WF5zQwOdcxLsxSEk9Jd01GgGb80xxqCaiDDlewhtwqpSm8MOvUHslwPydVirasdW09++NxDNNftm1vLY8yA==} engines: {node: '>=18'} '@noble/curves@1.2.0': @@ -2166,36 +2166,36 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nomicfoundation/edr-darwin-arm64@0.6.3': - resolution: {integrity: sha512-hqtI7tYDqKG5PDmZ//Z65EH5cgH8VL/SAAu50rpHP7WAVfJWkOCcYbecywwF6nhHdonJbRTDGAeG1/+VOy6zew==} + '@nomicfoundation/edr-darwin-arm64@0.6.4': + resolution: {integrity: sha512-QNQErISLgssV9+qia8sIjRANqtbW8snSDvjspixT/kSQ5ZSGxxctTg7x72wPSrcu8+EBEveIe5uqENIp5GH8HQ==} engines: {node: '>= 18'} - '@nomicfoundation/edr-darwin-x64@0.6.3': - resolution: {integrity: sha512-4fGi79/lyOlRUORhCYsYb3sWqRHuHT7qqzyZfZuNOn8llaxmT1k36xNmvpyg37R8SzjnhT/DzoukSJrs23Ip9Q==} + '@nomicfoundation/edr-darwin-x64@0.6.4': + resolution: {integrity: sha512-cjVmREiwByyc9+oGfvAh49IAw+oVJHF9WWYRD+Tm/ZlSpnEVWxrGNBak2bd/JSYjn+mZE7gmWS4SMRi4nKaLUg==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-arm64-gnu@0.6.3': - resolution: {integrity: sha512-yFFTvGFMhfAvQ1Z2itUh1jpoUA+mVROyVELcaxjIq8fyg602lQmbS+NXkhQ+oaeDgJ+06mSENrHBg4fcfRf9cw==} + '@nomicfoundation/edr-linux-arm64-gnu@0.6.4': + resolution: {integrity: sha512-96o9kRIVD6W5VkgKvUOGpWyUGInVQ5BRlME2Fa36YoNsRQMaKtmYJEU0ACosYES6ZTpYC8U5sjMulvPtVoEfOA==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-arm64-musl@0.6.3': - resolution: {integrity: sha512-pOKmd0Fa3a6BHg5qbjbl/jMRELVi9oazbfiuU7Bvgn/dpTK+ID3jwT0SXiuC2zxjmPByWgXL6G9XRf5BPAM2rQ==} + '@nomicfoundation/edr-linux-arm64-musl@0.6.4': + resolution: {integrity: sha512-+JVEW9e5plHrUfQlSgkEj/UONrIU6rADTEk+Yp9pbe+mzNkJdfJYhs5JYiLQRP4OjxH4QOrXI97bKU6FcEbt5Q==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-x64-gnu@0.6.3': - resolution: {integrity: sha512-3AUferhkLIXtLV63w5GjpHttzdxZ36i656XMy+pkBZbbiqnzIVeKWg6DJv1A94fQY16gB4gqj9CLq4CWvbNN6w==} + '@nomicfoundation/edr-linux-x64-gnu@0.6.4': + resolution: {integrity: sha512-nzYWW+fO3EZItOeP4CrdMgDXfaGBIBkKg0Y/7ySpUxLqzut40O4Mb0/+quqLAFkacUSWMlFp8nsmypJfOH5zoA==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-x64-musl@0.6.3': - resolution: {integrity: sha512-fr6bD872WIBXe9YnTDi0CzYepMcYRgSnkVqn0yK4wRnIvKrloWhxXNVY45GVIl51aNZguBnvoA4WEt6HIazs3A==} + '@nomicfoundation/edr-linux-x64-musl@0.6.4': + resolution: {integrity: sha512-QFRoE9qSQ2boRrVeQ1HdzU+XN7NUgwZ1SIy5DQt4d7jCP+5qTNsq8LBNcqhRBOATgO63nsweNUhxX/Suj5r1Sw==} engines: {node: '>= 18'} - '@nomicfoundation/edr-win32-x64-msvc@0.6.3': - resolution: {integrity: sha512-sn34MvN1ajw2Oq1+Drpxej78Z0HfIzI4p4WlolupAV9dOZKzp2JAIQeLVfZpjIFbF3zuyxLPP4dUBrQoFPEqhA==} + '@nomicfoundation/edr-win32-x64-msvc@0.6.4': + resolution: {integrity: sha512-2yopjelNkkCvIjUgBGhrn153IBPLwnsDeNiq6oA0WkeM8tGmQi4td+PGi9jAriUDAkc59Yoi2q9hYA6efiY7Zw==} engines: {node: '>= 18'} - '@nomicfoundation/edr@0.6.3': - resolution: {integrity: sha512-hThe5ORR75WFYTXKL0K2AyLDxkTMrG+VQ1yL9BhQYsuh3OIH+3yNDxMz2LjfvrpOrMmJ4kk5NKdFewpqDojjXQ==} + '@nomicfoundation/edr@0.6.4': + resolution: {integrity: sha512-YgrSuT3yo5ZQkbvBGqQ7hG+RDvz3YygSkddg4tb1Z0Y6pLXFzwrcEwWaJCFAVeeZxdxGfCgGMUYgRVneK+WXkw==} engines: {node: '>= 18'} '@nomicfoundation/ethereumjs-common@4.0.4': @@ -2759,8 +2759,8 @@ packages: '@types/lodash.kebabcase@4.1.9': resolution: {integrity: sha512-kPrrmcVOhSsjAVRovN0lRfrbuidfg0wYsrQa5IYuoQO1fpHHGSme66oyiYA/5eQPVl8Z95OA3HG0+d2SvYC85w==} - '@types/lodash@4.17.10': - resolution: {integrity: sha512-YpS0zzoduEhuOWjAotS6A5AVCva7X4lVlYLF0FYHAY9sdraBfnatttHItlWeZdGhuEkf+OzMNg2ZYAx8t+52uQ==} + '@types/lodash@4.17.12': + resolution: {integrity: sha512-sviUmCE8AYdaF/KIHLDJBQgeYzPBI0vf/17NaYehBJfYD1j6/L95Slh07NlyK2iNyBNaEkb3En2jRt+a8y3xZQ==} '@types/lru-cache@5.1.1': resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==} @@ -2855,18 +2855,18 @@ packages: '@vitest/utils@2.1.3': resolution: {integrity: sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==} - '@wagmi/connectors@5.2.2': - resolution: {integrity: sha512-G9+0tLWLiG+CyZzI6cqV5mgUnLkYFtdN+kTD7RHesquwRXY6hzTAjCJL19gBuAKzrTXUhaNcxuIYszsRV+/qFA==} + '@wagmi/connectors@5.3.1': + resolution: {integrity: sha512-VbF4Asc29jW1ifaHExn8jVidNFFxm3wEA7JJBctRt6L/h24inrPh8eEsBjXmOJ3SNJZVHxr4nPqcviXMvWhhEg==} peerDependencies: - '@wagmi/core': 2.13.9 + '@wagmi/core': 2.14.1 typescript: '>=5.0.4' viem: 2.x peerDependenciesMeta: typescript: optional: true - '@wagmi/core@2.13.9': - resolution: {integrity: sha512-l5pGU97ANyCj48D/pffNkw5AB1R7K2X0vEgCGyHMo21u/Pj/SHvoA35VPta/kqOSZzELXpLxBbOZD4yw7FyCxQ==} + '@wagmi/core@2.14.1': + resolution: {integrity: sha512-Vl7VK5XdKxPfnYlp3E7U7AJSweBdfh+cd953hgAU2H+uNrekS9Nmt89l1b6WkwkYyqvccRDjsCtlcKRwvPtNAQ==} peerDependencies: '@tanstack/query-core': '>=5.0.0' typescript: '>=5.0.4' @@ -2958,12 +2958,12 @@ packages: '@walletconnect/window-metadata@1.0.1': resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} - '@whatwg-node/fetch@0.9.21': - resolution: {integrity: sha512-Wt0jPb+04JjobK0pAAN7mEHxVHcGA9HoP3OyCsZtyAecNQeADXCZ1MihFwVwjsgaRYuGVmNlsCmLxlG6mor8Gw==} + '@whatwg-node/fetch@0.9.22': + resolution: {integrity: sha512-+RIBffgoaRlWV9cKV6wAX71sbeoU2APOI3G13ZRMkabYHwkvDMeZDTyxJcsMXA5CpieJ7NFXF9Xyu72jwvdzqA==} engines: {node: '>=18.0.0'} - '@whatwg-node/node-fetch@0.5.26': - resolution: {integrity: sha512-4jXDeZ4IH4bylZ6wu14VEx0aDXXhrN4TC279v9rPmn08g4EYekcYf8wdcOOnS9STjDkb6x77/6xBUTqxGgjr8g==} + '@whatwg-node/node-fetch@0.5.27': + resolution: {integrity: sha512-0OaMj5W4fzWimRSFq07qFiWfquaUMNB+695GwE76LYKVuah+jwCdzSgsIOtwPkiyJ35w0XGhXmJPiIJCdLwopg==} engines: {node: '>=18.0.0'} JSONStream@1.3.5: @@ -3223,8 +3223,8 @@ packages: browserify-aes@1.2.0: resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} - browserslist@4.24.0: - resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==} + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -3561,8 +3561,8 @@ packages: core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - cosmiconfig-typescript-loader@5.0.0: - resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==} + cosmiconfig-typescript-loader@5.1.0: + resolution: {integrity: sha512-7PtBB+6FdsOvZyJtlF3hEPpACq7RQX6BVGsgC7/lfVXnKMvNCu/XY3ykreqG5w/rBNdu2z8LCIKoF3kpHHdHlA==} engines: {node: '>=v16'} peerDependencies: '@types/node': '*' @@ -3785,8 +3785,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.39: - resolution: {integrity: sha512-4xkpSR6CjuiaNyvwiWDI85N9AxsvbPawB8xc7yzLPonYTuP19BVgYweKyUMFtHEZgIcHWMt1ks5Cqx2m+6/Grg==} + electron-to-chromium@1.5.42: + resolution: {integrity: sha512-gIfKavKDw1mhvic9nbzA5lZw8QSHpdMwLwXc0cWidQz9B15pDoDdDH4boIatuFfeoCatb3a/NGL6CYRVFxGZ9g==} elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} @@ -4093,8 +4093,8 @@ packages: flow-enums-runtime@0.0.6: resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==} - flow-parser@0.248.1: - resolution: {integrity: sha512-fkCfVPelbTzSVp+jVwSvEyc+I4WG8MNhRG/EWSZZTlgHAMEdhXJaFEbfErXxMktboMhVGchvEFhWxkzNGM1m2A==} + flow-parser@0.250.0: + resolution: {integrity: sha512-8mkLh/CotlvqA9vCyQMbhJoPx2upEg9oKxARAayz8zQ58wCdABnTZy6U4xhMHvHvbTUFgZQk4uH2cglOCOel5A==} engines: {node: '>=0.4.0'} follow-redirects@1.15.9: @@ -4241,6 +4241,12 @@ packages: peerDependencies: graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 + graphql-tag@2.12.6: + resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} + engines: {node: '>=10'} + peerDependencies: + graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + graphql-ws@5.16.0: resolution: {integrity: sha512-Ju2RCU2dQMgSKtArPbEtsK5gNLnsQyTNIo/T7cZNp96niC1x0KdJNZV0TIoilceBPQwfb5itrGl8pkFeOUMl4A==} engines: {node: '>=10'} @@ -4685,8 +4691,8 @@ packages: joi@17.13.3: resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} - jose@5.9.4: - resolution: {integrity: sha512-WBBl6au1qg6OHj67yCffCgFR3BADJBXN8MdRvCgJDuMv3driV2nHr7jdGvaKX9IolosAsn+M0XRArqLXUhyJHQ==} + jose@5.9.6: + resolution: {integrity: sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==} js-sha3@0.8.0: resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} @@ -5460,8 +5466,8 @@ packages: resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} engines: {node: '>=0.12'} - picocolors@1.1.0: - resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -5565,8 +5571,8 @@ packages: pump@3.0.2: resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} - qr-code-styling@1.7.2: - resolution: {integrity: sha512-/D1nzJHOlALJ0ePYg25oO/yEAb4FaWOfW/R05It2h4nxojND0bc3dUNOGFT+bI6vlzR7mtqcS3i/ycc6w1MyAA==} + qr-code-styling@1.8.4: + resolution: {integrity: sha512-uxykNuvXaPDK/jGDERDIdDvvocefbHu1oxVYi6K87FUdPPAezkBdcIeFJ8XVX2HSsyLFINile5uzfOMYpGu5ZA==} engines: {node: '>=18.18.0'} qrcode-generator@1.4.4: @@ -5828,13 +5834,13 @@ packages: scuid@1.1.0: resolution: {integrity: sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==} - secp256k1@4.0.3: - resolution: {integrity: sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==} - engines: {node: '>=10.0.0'} + secp256k1@4.0.4: + resolution: {integrity: sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==} + engines: {node: '>=18.0.0'} - secp256k1@5.0.0: - resolution: {integrity: sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA==} - engines: {node: '>=14.0.0'} + secp256k1@5.0.1: + resolution: {integrity: sha512-lDFs9AAIaWP9UCdtWrotXWWF9t8PWgQDcxqgAnpM9rMqxb3Oaq2J0thzPVSxBwdJgyQtkU/sYtFtbM1RSt/iYA==} + engines: {node: '>=18.0.0'} selfsigned@2.4.1: resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} @@ -6124,8 +6130,8 @@ packages: resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==} engines: {node: '>=6.0.0'} - terser@5.35.0: - resolution: {integrity: sha512-TmYbQnzVfrx3RQsPoItoPplymixIAtp2R2xlpyVBYmFmvI34IzLhCLj8SimRb/kZXlq4t1gA+vbcTqLQ3+5Q5g==} + terser@5.36.0: + resolution: {integrity: sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==} engines: {node: '>=10'} hasBin: true @@ -6523,8 +6529,8 @@ packages: vlq@1.0.1: resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} - wagmi@2.12.20: - resolution: {integrity: sha512-U7UCQQL38ed2AaAMFwfSYjSFW94CwAbf/+ntaG43z1U5i8jdrxh85tP7rcpMWgnd7510/S3Gje0m7uTIS3iYFw==} + wagmi@2.12.22: + resolution: {integrity: sha512-ho4s2MZsvOpWFqt4lRHHyiqRDTlEarTP3Y0XMhM7nDsE45ShOZ9YhWwmTabSMr5t7bFFXBBfRXp5fO2SPnCvPA==} peerDependencies: '@tanstack/react-query': '>=5.0.0' react: '>=18' @@ -6730,13 +6736,14 @@ packages: resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} engines: {node: '>=12.20'} - zustand@4.4.1: - resolution: {integrity: sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw==} - engines: {node: '>=12.7.0'} + zustand@5.0.0: + resolution: {integrity: sha512-LE+VcmbartOPM+auOjCCLQOsQ05zUTp8RkgwRzefUk+2jISdMMFnxvyTjA4YNWr5ZGXYbVsEMZosttuxUBkojQ==} + engines: {node: '>=12.20.0'} peerDependencies: - '@types/react': '>=16.8' - immer: '>=9.0' - react: '>=16.8' + '@types/react': '>=18.0.0' + immer: '>=9.0.6' + react: '>=18.0.0' + use-sync-external-store: '>=1.2.0' peerDependenciesMeta: '@types/react': optional: true @@ -6744,6 +6751,8 @@ packages: optional: true react: optional: true + use-sync-external-store: + optional: true snapshots: @@ -6805,7 +6814,7 @@ snapshots: '@babel/code-frame@7.25.7': dependencies: '@babel/highlight': 7.25.7 - picocolors: 1.1.0 + picocolors: 1.1.1 '@babel/compat-data@7.25.8': {} @@ -6851,7 +6860,7 @@ snapshots: dependencies: '@babel/compat-data': 7.25.8 '@babel/helper-validator-option': 7.25.7 - browserslist: 4.24.0 + browserslist: 4.24.2 lru-cache: 5.1.1 semver: 6.3.1 @@ -6972,7 +6981,7 @@ snapshots: '@babel/helper-validator-identifier': 7.25.7 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.1.0 + picocolors: 1.1.1 '@babel/parser@7.25.8': dependencies: @@ -7742,7 +7751,7 @@ snapshots: '@commitlint/types': 19.5.0 chalk: 5.3.0 cosmiconfig: 9.0.0(typescript@5.6.3) - cosmiconfig-typescript-loader: 5.0.0(@types/node@22.7.8)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3) + cosmiconfig-typescript-loader: 5.1.0(@types/node@22.7.8)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -8046,10 +8055,10 @@ snapshots: '@graphql-tools/graphql-file-loader': 8.0.2(graphql@16.9.0) '@graphql-tools/json-file-loader': 8.0.2(graphql@16.9.0) '@graphql-tools/load': 8.0.3(graphql@16.9.0) - '@graphql-tools/prisma-loader': 8.0.6(@types/node@22.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) - '@graphql-tools/url-loader': 8.0.4(@types/node@22.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) + '@graphql-tools/prisma-loader': 8.0.9(@types/node@22.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) + '@graphql-tools/url-loader': 8.0.7(@types/node@22.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.5.5(graphql@16.9.0) - '@whatwg-node/fetch': 0.9.21 + '@whatwg-node/fetch': 0.9.22 chalk: 4.1.2 cosmiconfig: 8.3.6(typescript@5.6.3) debounce: 1.2.1 @@ -8245,7 +8254,7 @@ snapshots: change-case-all: 1.0.15 dependency-graph: 0.11.0 graphql: 16.9.0 - graphql-tag: 2.11.0(graphql@16.9.0) + graphql-tag: 2.12.6(graphql@16.9.0) parse-filepath: 1.0.2 tslib: 2.6.3 transitivePeerDependencies: @@ -8256,7 +8265,7 @@ snapshots: dependencies: '@ardatan/sync-fetch': 0.0.1(encoding@0.1.13) '@graphql-tools/utils': 10.5.5(graphql@16.9.0) - '@whatwg-node/fetch': 0.9.21 + '@whatwg-node/fetch': 0.9.22 graphql: 16.9.0 tslib: 2.8.0 transitivePeerDependencies: @@ -8281,7 +8290,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/delegate@10.0.23(graphql@16.9.0)': + '@graphql-tools/delegate@10.0.26(graphql@16.9.0)': dependencies: '@graphql-tools/batch-execute': 9.0.5(graphql@16.9.0) '@graphql-tools/executor': 1.3.2(graphql@16.9.0) @@ -8315,7 +8324,7 @@ snapshots: dependencies: '@graphql-tools/utils': 10.5.5(graphql@16.9.0) '@repeaterjs/repeater': 3.0.6 - '@whatwg-node/fetch': 0.9.21 + '@whatwg-node/fetch': 0.9.22 extract-files: 11.0.0 graphql: 16.9.0 meros: 1.3.0(@types/node@22.7.8) @@ -8363,7 +8372,7 @@ snapshots: '@graphql-tools/executor-http': 1.1.7(@types/node@22.7.8)(graphql@16.9.0) '@graphql-tools/graphql-tag-pluck': 8.3.3(graphql@16.9.0) '@graphql-tools/utils': 10.5.5(graphql@16.9.0) - '@whatwg-node/fetch': 0.9.21 + '@whatwg-node/fetch': 0.9.22 graphql: 16.9.0 tslib: 2.8.0 value-or-promise: 1.0.12 @@ -8426,19 +8435,19 @@ snapshots: '@graphql-tools/optimize@1.4.0(graphql@16.9.0)': dependencies: graphql: 16.9.0 - tslib: 2.8.0 + tslib: 2.6.3 '@graphql-tools/optimize@2.0.0(graphql@16.9.0)': dependencies: graphql: 16.9.0 - tslib: 2.8.0 + tslib: 2.6.3 - '@graphql-tools/prisma-loader@8.0.6(@types/node@22.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10)': + '@graphql-tools/prisma-loader@8.0.9(@types/node@22.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10)': dependencies: - '@graphql-tools/url-loader': 8.0.4(@types/node@22.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) + '@graphql-tools/url-loader': 8.0.7(@types/node@22.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.5.5(graphql@16.9.0) '@types/js-yaml': 4.0.9 - '@whatwg-node/fetch': 0.9.21 + '@whatwg-node/fetch': 0.9.22 chalk: 4.1.2 debug: 4.3.7(supports-color@8.1.1) dotenv: 16.4.5 @@ -8446,7 +8455,7 @@ snapshots: graphql-request: 6.1.0(encoding@0.1.13)(graphql@16.9.0) http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.5 - jose: 5.9.4 + jose: 5.9.6 js-yaml: 4.1.0 lodash: 4.17.21 scuid: 1.1.0 @@ -8464,7 +8473,7 @@ snapshots: '@ardatan/relay-compiler': 12.0.0(encoding@0.1.13)(graphql@16.9.0) '@graphql-tools/utils': 9.2.1(graphql@16.9.0) graphql: 16.9.0 - tslib: 2.8.0 + tslib: 2.6.3 transitivePeerDependencies: - encoding - supports-color @@ -8474,7 +8483,7 @@ snapshots: '@ardatan/relay-compiler': 12.0.0(encoding@0.1.13)(graphql@16.9.0) '@graphql-tools/utils': 10.5.5(graphql@16.9.0) graphql: 16.9.0 - tslib: 2.8.0 + tslib: 2.6.3 transitivePeerDependencies: - encoding - supports-color @@ -8487,17 +8496,17 @@ snapshots: tslib: 2.8.0 value-or-promise: 1.0.12 - '@graphql-tools/url-loader@8.0.4(@types/node@22.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10)': + '@graphql-tools/url-loader@8.0.7(@types/node@22.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10)': dependencies: '@ardatan/sync-fetch': 0.0.1(encoding@0.1.13) - '@graphql-tools/delegate': 10.0.23(graphql@16.9.0) + '@graphql-tools/delegate': 10.0.26(graphql@16.9.0) '@graphql-tools/executor-graphql-ws': 1.3.1(bufferutil@4.0.8)(graphql@16.9.0)(utf-8-validate@5.0.10) '@graphql-tools/executor-http': 1.1.7(@types/node@22.7.8)(graphql@16.9.0) '@graphql-tools/executor-legacy-ws': 1.1.1(bufferutil@4.0.8)(graphql@16.9.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.5.5(graphql@16.9.0) - '@graphql-tools/wrap': 10.0.7(graphql@16.9.0) + '@graphql-tools/wrap': 10.0.10(graphql@16.9.0) '@types/ws': 8.5.12 - '@whatwg-node/fetch': 0.9.21 + '@whatwg-node/fetch': 0.9.22 graphql: 16.9.0 isomorphic-ws: 5.0.0(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)) tslib: 2.8.0 @@ -8520,17 +8529,17 @@ snapshots: '@graphql-tools/utils@8.13.1(graphql@16.9.0)': dependencies: graphql: 16.9.0 - tslib: 2.8.0 + tslib: 2.6.3 '@graphql-tools/utils@9.2.1(graphql@16.9.0)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) graphql: 16.9.0 - tslib: 2.8.0 + tslib: 2.6.3 - '@graphql-tools/wrap@10.0.7(graphql@16.9.0)': + '@graphql-tools/wrap@10.0.10(graphql@16.9.0)': dependencies: - '@graphql-tools/delegate': 10.0.23(graphql@16.9.0) + '@graphql-tools/delegate': 10.0.26(graphql@16.9.0) '@graphql-tools/schema': 10.0.7(graphql@16.9.0) '@graphql-tools/utils': 10.5.5(graphql@16.9.0) graphql: 16.9.0 @@ -8639,7 +8648,7 @@ snapshots: '@metamask/eth-json-rpc-provider@1.0.1': dependencies: '@metamask/json-rpc-engine': 7.3.3 - '@metamask/safe-event-emitter': 3.1.1 + '@metamask/safe-event-emitter': 3.1.2 '@metamask/utils': 5.0.2 transitivePeerDependencies: - supports-color @@ -8655,7 +8664,7 @@ snapshots: '@metamask/json-rpc-engine@7.3.3': dependencies: '@metamask/rpc-errors': 6.4.0 - '@metamask/safe-event-emitter': 3.1.1 + '@metamask/safe-event-emitter': 3.1.2 '@metamask/utils': 8.5.0 transitivePeerDependencies: - supports-color @@ -8663,7 +8672,7 @@ snapshots: '@metamask/json-rpc-engine@8.0.2': dependencies: '@metamask/rpc-errors': 6.4.0 - '@metamask/safe-event-emitter': 3.1.1 + '@metamask/safe-event-emitter': 3.1.2 '@metamask/utils': 8.5.0 transitivePeerDependencies: - supports-color @@ -8671,7 +8680,7 @@ snapshots: '@metamask/json-rpc-middleware-stream@7.0.2': dependencies: '@metamask/json-rpc-engine': 8.0.2 - '@metamask/safe-event-emitter': 3.1.1 + '@metamask/safe-event-emitter': 3.1.2 '@metamask/utils': 8.5.0 readable-stream: 3.6.2 transitivePeerDependencies: @@ -8692,7 +8701,7 @@ snapshots: '@metamask/json-rpc-middleware-stream': 7.0.2 '@metamask/object-multiplex': 2.1.0 '@metamask/rpc-errors': 6.4.0 - '@metamask/safe-event-emitter': 3.1.1 + '@metamask/safe-event-emitter': 3.1.2 '@metamask/utils': 8.5.0 detect-browser: 5.3.0 extension-port-stream: 3.0.0 @@ -8712,7 +8721,7 @@ snapshots: '@metamask/safe-event-emitter@2.0.0': {} - '@metamask/safe-event-emitter@3.1.1': {} + '@metamask/safe-event-emitter@3.1.2': {} '@metamask/sdk-communication-layer@0.30.0(cross-fetch@4.0.0(encoding@0.1.13))(eciesjs@0.3.20)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))': dependencies: @@ -8732,7 +8741,7 @@ snapshots: '@metamask/sdk-install-modal-web@0.30.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: i18next: 23.11.5 - qr-code-styling: 1.7.2 + qr-code-styling: 1.8.4 optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -8859,7 +8868,7 @@ snapshots: '@motionone/dom': 10.18.0 tslib: 2.8.0 - '@mswjs/interceptors@0.36.4': + '@mswjs/interceptors@0.36.5': dependencies: '@open-draft/deferred-promise': 2.2.0 '@open-draft/logger': 0.3.0 @@ -8902,29 +8911,29 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@nomicfoundation/edr-darwin-arm64@0.6.3': {} + '@nomicfoundation/edr-darwin-arm64@0.6.4': {} - '@nomicfoundation/edr-darwin-x64@0.6.3': {} + '@nomicfoundation/edr-darwin-x64@0.6.4': {} - '@nomicfoundation/edr-linux-arm64-gnu@0.6.3': {} + '@nomicfoundation/edr-linux-arm64-gnu@0.6.4': {} - '@nomicfoundation/edr-linux-arm64-musl@0.6.3': {} + '@nomicfoundation/edr-linux-arm64-musl@0.6.4': {} - '@nomicfoundation/edr-linux-x64-gnu@0.6.3': {} + '@nomicfoundation/edr-linux-x64-gnu@0.6.4': {} - '@nomicfoundation/edr-linux-x64-musl@0.6.3': {} + '@nomicfoundation/edr-linux-x64-musl@0.6.4': {} - '@nomicfoundation/edr-win32-x64-msvc@0.6.3': {} + '@nomicfoundation/edr-win32-x64-msvc@0.6.4': {} - '@nomicfoundation/edr@0.6.3': + '@nomicfoundation/edr@0.6.4': dependencies: - '@nomicfoundation/edr-darwin-arm64': 0.6.3 - '@nomicfoundation/edr-darwin-x64': 0.6.3 - '@nomicfoundation/edr-linux-arm64-gnu': 0.6.3 - '@nomicfoundation/edr-linux-arm64-musl': 0.6.3 - '@nomicfoundation/edr-linux-x64-gnu': 0.6.3 - '@nomicfoundation/edr-linux-x64-musl': 0.6.3 - '@nomicfoundation/edr-win32-x64-msvc': 0.6.3 + '@nomicfoundation/edr-darwin-arm64': 0.6.4 + '@nomicfoundation/edr-darwin-x64': 0.6.4 + '@nomicfoundation/edr-linux-arm64-gnu': 0.6.4 + '@nomicfoundation/edr-linux-arm64-musl': 0.6.4 + '@nomicfoundation/edr-linux-x64-gnu': 0.6.4 + '@nomicfoundation/edr-linux-x64-musl': 0.6.4 + '@nomicfoundation/edr-win32-x64-msvc': 0.6.4 '@nomicfoundation/ethereumjs-common@4.0.4': dependencies: @@ -9658,9 +9667,9 @@ snapshots: '@types/lodash.kebabcase@4.1.9': dependencies: - '@types/lodash': 4.17.10 + '@types/lodash': 4.17.12 - '@types/lodash@4.17.10': {} + '@types/lodash@4.17.12': {} '@types/lru-cache@5.1.1': {} @@ -9719,7 +9728,7 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@vitest/coverage-v8@2.1.3(vitest@2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0))': + '@vitest/coverage-v8@2.1.3(vitest@2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.36.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -9733,7 +9742,7 @@ snapshots: std-env: 3.7.0 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0) + vitest: 2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.36.0) transitivePeerDependencies: - supports-color @@ -9744,13 +9753,13 @@ snapshots: chai: 5.1.1 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.7.8)(terser@5.35.0))': + '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.7.8)(terser@5.36.0))': dependencies: '@vitest/spy': 2.1.3 estree-walker: 3.0.3 magic-string: 0.30.12 optionalDependencies: - vite: 5.4.9(@types/node@22.7.8)(terser@5.35.0) + vite: 5.4.9(@types/node@22.7.8)(terser@5.36.0) '@vitest/pretty-format@2.1.3': dependencies: @@ -9777,13 +9786,13 @@ snapshots: loupe: 3.1.2 tinyrainbow: 1.2.0 - '@wagmi/connectors@5.2.2(@types/react@18.3.11)(@wagmi/core@2.13.9(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10))': + '@wagmi/connectors@5.3.1(@types/react@18.3.11)(@wagmi/core@2.14.1(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10))': dependencies: '@coinbase/wallet-sdk': 4.0.4 '@metamask/sdk': 0.30.0(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(utf-8-validate@5.0.10) '@safe-global/safe-apps-provider': 0.18.3(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@wagmi/core': 2.13.9(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + '@wagmi/core': 2.14.1(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) '@walletconnect/ethereum-provider': 2.17.0(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10) '@walletconnect/modal': 2.7.0(@types/react@18.3.11)(react@18.3.1) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' @@ -9815,12 +9824,12 @@ snapshots: - utf-8-validate - zod - '@wagmi/core@2.13.9(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10))': + '@wagmi/core@2.14.1(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10))': dependencies: eventemitter3: 5.0.1 mipd: 0.0.7(typescript@5.6.3) viem: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) - zustand: 4.4.1(@types/react@18.3.11)(react@18.3.1) + zustand: 5.0.0(@types/react@18.3.11)(react@18.3.1)(use-sync-external-store@1.2.0(react@18.3.1)) optionalDependencies: '@tanstack/query-core': 5.59.13 typescript: 5.6.3 @@ -9828,6 +9837,7 @@ snapshots: - '@types/react' - immer - react + - use-sync-external-store '@walletconnect/core@2.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: @@ -10139,12 +10149,12 @@ snapshots: '@walletconnect/window-getters': 1.0.1 tslib: 1.14.1 - '@whatwg-node/fetch@0.9.21': + '@whatwg-node/fetch@0.9.22': dependencies: - '@whatwg-node/node-fetch': 0.5.26 + '@whatwg-node/node-fetch': 0.5.27 urlpattern-polyfill: 10.0.0 - '@whatwg-node/node-fetch@0.5.26': + '@whatwg-node/node-fetch@0.5.27': dependencies: '@kamilkisiela/fast-url-parser': 1.1.4 busboy: 1.6.0 @@ -10436,12 +10446,12 @@ snapshots: inherits: 2.0.4 safe-buffer: 5.2.1 - browserslist@4.24.0: + browserslist@4.24.2: dependencies: caniuse-lite: 1.0.30001669 - electron-to-chromium: 1.5.39 + electron-to-chromium: 1.5.42 node-releases: 2.0.18 - update-browserslist-db: 1.1.1(browserslist@4.24.0) + update-browserslist-db: 1.1.1(browserslist@4.24.2) bs58@4.0.1: dependencies: @@ -10827,11 +10837,11 @@ snapshots: core-js-compat@3.38.1: dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 core-util-is@1.0.3: {} - cosmiconfig-typescript-loader@5.0.0(@types/node@22.7.8)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3): + cosmiconfig-typescript-loader@5.1.0(@types/node@22.7.8)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3): dependencies: '@types/node': 22.7.8 cosmiconfig: 9.0.0(typescript@5.6.3) @@ -11026,11 +11036,11 @@ snapshots: dependencies: '@types/secp256k1': 4.0.6 futoin-hkdf: 1.5.3 - secp256k1: 5.0.0 + secp256k1: 5.0.1 ee-first@1.1.1: {} - electron-to-chromium@1.5.39: {} + electron-to-chromium@1.5.42: {} elliptic@6.5.4: dependencies: @@ -11168,7 +11178,7 @@ snapshots: eth-block-tracker@7.1.0: dependencies: '@metamask/eth-json-rpc-provider': 1.0.1 - '@metamask/safe-event-emitter': 3.1.1 + '@metamask/safe-event-emitter': 3.1.2 '@metamask/utils': 5.0.2 json-rpc-random-id: 1.0.1 pify: 3.0.0 @@ -11177,7 +11187,7 @@ snapshots: eth-json-rpc-filters@6.0.1: dependencies: - '@metamask/safe-event-emitter': 3.1.1 + '@metamask/safe-event-emitter': 3.1.2 async-mutex: 0.2.6 eth-query: 2.1.2 json-rpc-engine: 6.1.0 @@ -11207,7 +11217,7 @@ snapshots: randombytes: 2.1.0 safe-buffer: 5.2.1 scrypt-js: 3.0.1 - secp256k1: 4.0.3 + secp256k1: 4.0.4 setimmediate: 1.0.5 ethereum-cryptography@1.2.0: @@ -11432,7 +11442,7 @@ snapshots: flow-enums-runtime@0.0.6: {} - flow-parser@0.248.1: {} + flow-parser@0.250.0: {} follow-redirects@1.15.9(debug@4.3.7): optionalDependencies: @@ -11573,7 +11583,7 @@ snapshots: '@graphql-tools/json-file-loader': 8.0.2(graphql@16.9.0) '@graphql-tools/load': 8.0.3(graphql@16.9.0) '@graphql-tools/merge': 9.0.8(graphql@16.9.0) - '@graphql-tools/url-loader': 8.0.4(@types/node@22.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) + '@graphql-tools/url-loader': 8.0.7(@types/node@22.7.8)(bufferutil@4.0.8)(encoding@0.1.13)(graphql@16.9.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.5.5(graphql@16.9.0) cosmiconfig: 8.3.6(typescript@5.6.3) graphql: 16.9.0 @@ -11600,6 +11610,11 @@ snapshots: dependencies: graphql: 16.9.0 + graphql-tag@2.12.6(graphql@16.9.0): + dependencies: + graphql: 16.9.0 + tslib: 2.6.3 + graphql-ws@5.16.0(graphql@16.9.0): dependencies: graphql: 16.9.0 @@ -11638,7 +11653,7 @@ snapshots: dependencies: '@ethersproject/abi': 5.7.0 '@metamask/eth-sig-util': 4.0.1 - '@nomicfoundation/edr': 0.6.3 + '@nomicfoundation/edr': 0.6.4 '@nomicfoundation/ethereumjs-common': 4.0.4 '@nomicfoundation/ethereumjs-tx': 5.0.4 '@nomicfoundation/ethereumjs-util': 9.0.4 @@ -12095,7 +12110,7 @@ snapshots: '@sideway/formula': 3.0.1 '@sideway/pinpoint': 2.0.0 - jose@5.9.4: {} + jose@5.9.6: {} js-sha3@0.8.0: {} @@ -12128,7 +12143,7 @@ snapshots: '@babel/register': 7.25.7(@babel/core@7.25.8) babel-core: 7.0.0-bridge.0(@babel/core@7.25.8) chalk: 4.1.2 - flow-parser: 0.248.1 + flow-parser: 0.250.0 graceful-fs: 4.2.11 micromatch: 4.0.8 neo-async: 2.6.2 @@ -12488,7 +12503,7 @@ snapshots: metro-minify-terser@0.80.12: dependencies: flow-enums-runtime: 0.0.6 - terser: 5.35.0 + terser: 5.36.0 metro-resolver@0.80.12: dependencies: @@ -12732,7 +12747,7 @@ snapshots: nock@14.0.0-beta.15: dependencies: - '@mswjs/interceptors': 0.36.4 + '@mswjs/interceptors': 0.36.5 json-stringify-safe: 5.0.1 propagate: 2.0.1 @@ -12987,7 +13002,7 @@ snapshots: safe-buffer: 5.2.1 sha.js: 2.4.11 - picocolors@1.1.0: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -13041,7 +13056,7 @@ snapshots: postcss@8.4.47: dependencies: nanoid: 3.3.7 - picocolors: 1.1.0 + picocolors: 1.1.1 source-map-js: 1.2.1 preact@10.24.3: {} @@ -13094,7 +13109,7 @@ snapshots: end-of-stream: 1.4.4 once: 1.4.0 - qr-code-styling@1.7.2: + qr-code-styling@1.8.4: dependencies: qrcode-generator: 1.4.4 @@ -13415,13 +13430,13 @@ snapshots: scuid@1.1.0: {} - secp256k1@4.0.3: + secp256k1@4.0.4: dependencies: elliptic: 6.5.7 - node-addon-api: 2.0.2 + node-addon-api: 5.1.0 node-gyp-build: 4.8.2 - secp256k1@5.0.0: + secp256k1@5.0.1: dependencies: elliptic: 6.5.7 node-addon-api: 5.1.0 @@ -13719,7 +13734,7 @@ snapshots: dependencies: rimraf: 2.6.3 - terser@5.35.0: + terser@5.36.0: dependencies: '@jridgewell/source-map': 0.3.6 acorn: 8.13.0 @@ -13900,11 +13915,11 @@ snapshots: consola: 3.2.3 pathe: 1.1.2 - update-browserslist-db@1.1.1(browserslist@4.24.0): + update-browserslist-db@1.1.1(browserslist@4.24.2): dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 escalade: 3.2.0 - picocolors: 1.1.0 + picocolors: 1.1.1 upper-case-first@2.0.2: dependencies: @@ -13978,12 +13993,12 @@ snapshots: - utf-8-validate - zod - vite-node@2.1.3(@types/node@22.7.8)(terser@5.35.0): + vite-node@2.1.3(@types/node@22.7.8)(terser@5.36.0): dependencies: cac: 6.7.14 debug: 4.3.7(supports-color@8.1.1) pathe: 1.1.2 - vite: 5.4.9(@types/node@22.7.8)(terser@5.35.0) + vite: 5.4.9(@types/node@22.7.8)(terser@5.36.0) transitivePeerDependencies: - '@types/node' - less @@ -13995,7 +14010,7 @@ snapshots: - supports-color - terser - vite@5.4.9(@types/node@22.7.8)(terser@5.35.0): + vite@5.4.9(@types/node@22.7.8)(terser@5.36.0): dependencies: esbuild: 0.21.5 postcss: 8.4.47 @@ -14003,12 +14018,12 @@ snapshots: optionalDependencies: '@types/node': 22.7.8 fsevents: 2.3.3 - terser: 5.35.0 + terser: 5.36.0 - vitest@2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.35.0): + vitest@2.1.3(@types/node@22.7.8)(happy-dom@15.7.4)(terser@5.36.0): dependencies: '@vitest/expect': 2.1.3 - '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.7.8)(terser@5.35.0)) + '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.7.8)(terser@5.36.0)) '@vitest/pretty-format': 2.1.3 '@vitest/runner': 2.1.3 '@vitest/snapshot': 2.1.3 @@ -14023,8 +14038,8 @@ snapshots: tinyexec: 0.3.1 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.4.9(@types/node@22.7.8)(terser@5.35.0) - vite-node: 2.1.3(@types/node@22.7.8)(terser@5.35.0) + vite: 5.4.9(@types/node@22.7.8)(terser@5.36.0) + vite-node: 2.1.3(@types/node@22.7.8)(terser@5.36.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.7.8 @@ -14042,11 +14057,11 @@ snapshots: vlq@1.0.1: {} - wagmi@2.12.20(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)): + wagmi@2.12.22(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.15(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)): dependencies: '@tanstack/react-query': 5.59.15(react@18.3.1) - '@wagmi/connectors': 5.2.2(@types/react@18.3.11)(@wagmi/core@2.13.9(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) - '@wagmi/core': 2.13.9(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + '@wagmi/connectors': 5.3.1(@types/react@18.3.11)(@wagmi/core@2.14.1(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.4(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.6.3)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) + '@wagmi/core': 2.14.1(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(react@18.3.1)(typescript@5.6.3)(use-sync-external-store@1.2.0(react@18.3.1))(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) react: 18.3.1 use-sync-external-store: 1.2.0(react@18.3.1) viem: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) @@ -14259,9 +14274,8 @@ snapshots: yocto-queue@1.1.1: {} - zustand@4.4.1(@types/react@18.3.11)(react@18.3.1): - dependencies: - use-sync-external-store: 1.2.0(react@18.3.1) + zustand@5.0.0(@types/react@18.3.11)(react@18.3.1)(use-sync-external-store@1.2.0(react@18.3.1)): optionalDependencies: '@types/react': 18.3.11 react: 18.3.1 + use-sync-external-store: 1.2.0(react@18.3.1) From f021fd4ff757e00dba4ebeb1aaa42e842e9bba4f Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Tue, 22 Oct 2024 16:32:08 +0200 Subject: [PATCH 32/32] test(viem): add viem-tracer --- packages/test-viem/package.json | 2 +- packages/test-viem/src/anvil.ts | 54 +-------- packages/test-viem/src/trace.ts | 200 ------------------------------- packages/test-viem/src/vitest.ts | 25 +--- pnpm-lock.yaml | 16 ++- 5 files changed, 21 insertions(+), 276 deletions(-) delete mode 100644 packages/test-viem/src/trace.ts diff --git a/packages/test-viem/package.json b/packages/test-viem/package.json index 55296ec5..bab7091c 100644 --- a/packages/test-viem/package.json +++ b/packages/test-viem/package.json @@ -19,7 +19,7 @@ "build": "tsc" }, "dependencies": { - "colors": "^1.4.0" + "viem-tracer": "^1.2.0" }, "peerDependencies": { "@morpho-org/test": "workspace:^", diff --git a/packages/test-viem/src/anvil.ts b/packages/test-viem/src/anvil.ts index e5ea6e0f..5931df29 100644 --- a/packages/test-viem/src/anvil.ts +++ b/packages/test-viem/src/anvil.ts @@ -1,4 +1,3 @@ -import "colors"; import { type Abi, type Address, @@ -6,12 +5,9 @@ import { type ContractFunctionArgs, type ContractFunctionName, type DeployContractParameters, - type EstimateGasParameters, - type ExactPartial, type HDAccount, type HttpTransport, type PublicActions, - type RpcTransactionRequest, type SendRawTransactionParameters, type SendTransactionParameters, type SendTransactionRequest, @@ -27,29 +23,26 @@ import { erc4626Abi, maxUint256, publicActions, - rpcSchema, walletActions, } from "viem"; import { type DealActions, dealActions } from "viem-deal"; -import { parseAccount } from "viem/accounts"; +import { type TracedTransport, traceActions, traced } from "viem-tracer"; import { - estimateGas as viem_estimateGas, sendRawTransaction as viem_sendRawTransaction, sendTransaction as viem_sendTransaction, writeContract as viem_writeContract, } from "viem/actions"; import type { Chain } from "viem/chains"; import { testAccount } from "./fixtures.js"; -import { type TraceCallRpcSchema, trace } from "./trace.js"; export type AnvilTestClient = Client< - HttpTransport, + TracedTransport, chain, HDAccount, TestRpcSchema<"anvil">, TestActions & DealActions & - PublicActions & + PublicActions, chain, HDAccount> & WalletActions & { tracing: { txs: boolean; @@ -126,10 +119,10 @@ export const createAnvilTestClient = ( chain, mode: "anvil", account: testAccount(), - transport, - rpcSchema: rpcSchema<[TraceCallRpcSchema]>(), + transport: traced(transport), }) .extend(dealActions) + .extend(traceActions) .extend(publicActions) .extend(walletActions) .extend((client) => { @@ -274,26 +267,6 @@ export const createAnvilTestClient = ( return hash; }, - async estimateGas(args: EstimateGasParameters) { - const gas = await viem_estimateGas(client, args).catch( - async (error) => { - if (this.tracing.txs) { - try { - error.message += `\n\nCall trace:\n${await trace(client, { - from: parseAccount(args.account ?? client.account).address, - ...args, - } as ExactPartial)}`; - } catch (err) { - error.message += `\n\nFailed to trace call:\n${err}`; - } - } - - throw error; - }, - ); - - return gas; - }, async sendTransaction< const request extends SendTransactionRequest, chainOverride extends Chain | undefined = undefined, @@ -305,22 +278,7 @@ export const createAnvilTestClient = ( request >, ) { - const hash = await viem_sendTransaction(client, args).catch( - async (error) => { - if (this.tracing.txs) { - try { - error.message += `\n\nCall trace:\n${await trace(client, { - from: parseAccount(args.account ?? client.account).address, - ...args, - } as ExactPartial)}`; - } catch (err) { - error.message += `\n\nFailed to trace call:\n${err}`; - } - } - - throw error; - }, - ); + const hash = await viem_sendTransaction(client, args); if ((automine ??= await client.getAutomine())) await client.waitForTransactionReceipt({ hash }); diff --git a/packages/test-viem/src/trace.ts b/packages/test-viem/src/trace.ts deleted file mode 100644 index 20824d4a..00000000 --- a/packages/test-viem/src/trace.ts +++ /dev/null @@ -1,200 +0,0 @@ -import { existsSync, readFileSync } from "node:fs"; -import { homedir } from "node:os"; -import { join } from "node:path"; -import "colors"; -import { writeFile } from "node:fs/promises"; -import { grey, red, yellow } from "colors"; -import { - type Address, - type BlockTag, - type Client, - type ExactPartial, - type Hex, - type RpcTransactionRequest, - decodeFunctionData, - isAddress, - parseAbi, - slice, -} from "viem"; - -export type TraceCallRpcSchema = { - Method: "debug_traceCall"; - Parameters: - | [ExactPartial, Hex | BlockTag] - | [ - ExactPartial, - BlockTag | Hex, - { - tracer: "callTracer" | "prestateTracer"; - tracerConfig?: { onlyTopCall?: boolean }; - }, - ]; - ReturnType: RpcCallTrace; -}; - -export const signaturesPath = join( - homedir(), - ".foundry", - "cache", - "signatures", -); - -export const signatures: { - events: Record; - functions: Record; -} = existsSync(signaturesPath) - ? JSON.parse(readFileSync(signaturesPath, { encoding: "utf8" })) - : { events: {}, functions: {} }; - -export type RpcCallType = - | "CALL" - | "STATICCALL" - | "DELEGATECALL" - | "CREATE" - | "CREATE2" - | "SELFDESTRUCT" - | "CALLCODE"; - -export type RpcCallTrace = { - from: Address; - gas: Hex; - gasUsed: Hex; - to: Address; - input: Hex; - output: Hex; - error?: string; - revertReason?: string; - calls?: RpcCallTrace[]; - value: Hex; - type: RpcCallType; -}; - -export const getSelector = (input: Hex) => slice(input, 0, 4); - -export const getCallTraceUnknownSelectors = (trace: RpcCallTrace): string => { - const rest = (trace.calls ?? []) - .flatMap((subtrace) => getCallTraceUnknownSelectors(subtrace)) - .filter(Boolean) - .join(","); - - if (!trace.input) return rest; - - const selector = getSelector(trace.input); - - if (signatures.functions[selector]) return rest; - - if (!rest) return selector; - - return `${selector},${rest}`; -}; - -export const getIndentLevel = (level: number, index = false) => - `${" ".repeat(level - 1)}${index ? `${level - 1} ↳ `.cyan : " "}`; - -export const formatAddress = (address: Address) => - `${address.slice(0, 6)}...${address.slice(0, 4)}`; - -export const formatArg = (arg: unknown, level: number): string => { - if (Array.isArray(arg)) { - const formattedArr = arg - .map( - (arg) => `\n${getIndentLevel(level + 1)}${formatArg(arg, level + 1)},`, - ) - .join(""); - - return `[${formattedArr ? `${formattedArr}\n` : ""}${getIndentLevel(level)}]`; - } - - switch (typeof arg) { - case "object": { - if (arg == null) return ""; - - const formattedObj = Object.entries(arg) - .map( - ([key, value]) => - `\n${getIndentLevel(level + 1)}${key}: ${formatArg(value, level + 1)},`, - ) - .join(""); - - return `{${formattedObj ? `${formattedObj}\n` : ""}${getIndentLevel(level)}}`; - } - case "string": - return isAddress(arg, { strict: false }) ? formatAddress(arg) : arg; - default: - return String(arg); - } -}; - -export const formatCallSignature = (trace: RpcCallTrace, level: number) => { - const selector = getSelector(trace.input); - - const signature = signatures.functions[selector]; - if (!signature) return trace.input; - - const { functionName, args } = decodeFunctionData({ - abi: parseAbi( - // @ts-ignore - [`function ${signature}`], - ), - data: trace.input, - }); - - const formattedArgs = args?.map((arg) => formatArg(arg, level)).join(", "); - - return `${(trace.error ? red : yellow)(functionName).bold}(${(formattedArgs ?? "").grey})`; -}; - -export const formatCallTrace = (trace: RpcCallTrace, level = 1): string => { - const rest = (trace.calls ?? []) - .map((subtrace) => formatCallTrace(subtrace, level + 1)) - .join("\n"); - - const returnValue = trace.revertReason ?? trace.output; - - return `${level === 1 ? `${getIndentLevel(level, true)}FROM ${trace.from.grey}\n`.cyan : ""}${getIndentLevel(level, true)}${trace.type.yellow} ${trace.from === trace.to ? ("self").grey : `(${trace.to.white})`}.${formatCallSignature(trace, level)}${returnValue ? (trace.error ? red : grey)(` -> ${returnValue}`) : ""} -${rest}`; -}; - -export async function trace( - client: Client, - tx: ExactPartial, - block: Hex | BlockTag = "latest", -) { - const trace = await client.request( - { - method: "debug_traceCall", - params: [tx, block, { tracer: "callTracer" }], - }, - { retryCount: 0 }, - ); - - const unknownSelectors = getCallTraceUnknownSelectors(trace); - - if (unknownSelectors) { - const lookupRes = await fetch( - `https://api.openchain.xyz/signature-database/v1/lookup?filter=false&function=${unknownSelectors}`, - ); - - const lookup = await lookupRes.json(); - - if (lookup.ok) { - Object.entries<{ name: string; filtered: boolean }[]>( - lookup.result.function, - ).map(([sig, results]) => { - const match = results.find(({ filtered }) => !filtered)?.name; - if (!match) return; - - signatures.functions[sig as Hex] = match; - }); - - writeFile(signaturesPath, JSON.stringify(signatures)); // Non blocking. - } else { - console.warn( - `Failed to fetch signatures for unknown selectors: ${unknownSelectors}`, - lookup.error, - ); - } - } - - return formatCallTrace(trace); -} diff --git a/packages/test-viem/src/vitest.ts b/packages/test-viem/src/vitest.ts index c485ffe0..ebffc0d9 100644 --- a/packages/test-viem/src/vitest.ts +++ b/packages/test-viem/src/vitest.ts @@ -2,7 +2,6 @@ import { type AnvilArgs, spawnAnvil } from "@morpho-org/test"; import { http, type Chain } from "viem"; import { test } from "vitest"; import { type AnvilTestClient, createAnvilTestClient } from "./anvil.js"; -import { trace } from "./trace.js"; export interface ViemTestContext { client: AnvilTestClient; @@ -28,29 +27,7 @@ export const createViemTest = ( let client: AnvilTestClient; - await use( - (client = createAnvilTestClient( - http(rpcUrl, { - async onFetchRequest(request) { - const { method, params } = await request.json(); - - if ( - method === "eth_call" && - (client.tracing.calls || client.tracing.nextCall) - ) { - client.tracing.nextCall = false; - - try { - console.log(await trace(client, params[0], params[1])); - } catch (error) { - console.warn("Failed to trace call:", error); - } - } - }, - }), - chain, - )), - ); + await use((client = createAnvilTestClient(http(rpcUrl), chain))); await stop(); }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 510b00f4..bda991b2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -558,9 +558,9 @@ importers: packages/test-viem: dependencies: - colors: - specifier: ^1.4.0 - version: 1.4.0 + viem-tracer: + specifier: ^1.2.0 + version: 1.2.0(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)) devDependencies: '@morpho-org/test': specifier: workspace:^ @@ -6457,6 +6457,11 @@ packages: peerDependencies: viem: ^2.21.18 + viem-tracer@1.2.0: + resolution: {integrity: sha512-3tHDxPitC1USSW1RmxRJcUr1UJmYYRTvKtScGbAaJixf3/0kMqLCbsei9bY1zF+b04JX5mR6XV4PK5klKWPBvQ==} + peerDependencies: + viem: ^2.21.0 + viem@2.21.32: resolution: {integrity: sha512-2oXt5JNIb683oy7C8wuIJ/SeL3XtHVMEQpy1U2TA6WMnJQ4ScssRvyPwYLcaP6mKlrGXE/cR/V7ncWpvLUVPYQ==} peerDependencies: @@ -13975,6 +13980,11 @@ snapshots: dependencies: viem: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + viem-tracer@1.2.0(viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)): + dependencies: + colors: 1.4.0 + viem: 2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10) + viem@2.21.32(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10): dependencies: '@adraffy/ens-normalize': 1.11.0