Skip to content

Commit 655622c

Browse files
committed
feat: morpho partial liquidator on monad
1 parent ba4d662 commit 655622c

File tree

6 files changed

+86
-6
lines changed

6 files changed

+86
-6
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"@commitlint/config-conventional": "^20.0.0",
2929
"@gearbox-protocol/biome-config": "^1.0.14",
3030
"@gearbox-protocol/cli-utils": "^5.60.6",
31-
"@gearbox-protocol/liquidator-contracts": "^1.36.0-experimental.66",
31+
"@gearbox-protocol/liquidator-contracts": "^1.36.0-experimental.67",
3232
"@gearbox-protocol/liquidator-v2-contracts": "^2.4.0",
3333
"@gearbox-protocol/sdk": "11.7.2",
3434
"@gearbox-protocol/types": "^1.14.8",

src/services/liquidate/partial/PartialContractsDeployer.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
import {
1414
AAVELiquidatorV310Contract,
1515
GHOLiquidatorV310Contract,
16+
MorphoLiquidatorV310Contract,
1617
SiloLiquidatorV310Contract,
1718
} from "./v310/index.js";
1819

@@ -24,6 +25,7 @@ const FACTORIES: IPartialLiqudatorContractFactory[] = [
2425
// v310
2526
AAVELiquidatorV310Contract,
2627
GHOLiquidatorV310Contract,
28+
MorphoLiquidatorV310Contract,
2729
SiloLiquidatorV310Contract,
2830
];
2931

src/services/liquidate/partial/constants.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,7 @@ export const SONIC_USDCE_SILO: Address =
2727
"0x322e1d5384aa4ED66AeCa770B95686271de61dc3";
2828
export const SONIC_WS_SILO: Address =
2929
"0xf55902DE87Bd80c6a35614b48d7f8B612a083C12";
30+
31+
export const MORPHO: Partial<Record<NetworkType, Address>> = {
32+
Monad: "0xD5D960E8C380B724a48AC59E2DfF1b2CB4a1eAee",
33+
};
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import {
2+
morphoLiquidatorAbi,
3+
morphoUnwinderAbi,
4+
} from "@gearbox-protocol/liquidator-contracts/abi";
5+
import {
6+
MorphoLiquidator_bytecode,
7+
MorphoUnwinder_bytecode,
8+
} from "@gearbox-protocol/liquidator-contracts/bytecode";
9+
import {
10+
type CreditSuite,
11+
type Curator,
12+
isVersionRange,
13+
VERSION_RANGE_310,
14+
} from "@gearbox-protocol/sdk";
15+
import { type Address, isAddress } from "viem";
16+
17+
import { MORPHO } from "../constants.js";
18+
import { mustGetCuratorName } from "../utils.js";
19+
import PartialLiquidatorV310Contract from "./PartialLiquidatorV310Contract.js";
20+
21+
export class MorphoLiquidatorV310Contract extends PartialLiquidatorV310Contract {
22+
#morpho: Address;
23+
24+
public static tryAttach(
25+
cm: CreditSuite,
26+
): MorphoLiquidatorV310Contract | undefined {
27+
if (!isVersionRange(cm.router.version, VERSION_RANGE_310)) {
28+
return undefined;
29+
}
30+
const morpho = MORPHO[cm.networkType];
31+
if (!morpho || !isAddress(morpho)) {
32+
return undefined;
33+
}
34+
const curator = mustGetCuratorName(cm);
35+
return new MorphoLiquidatorV310Contract(cm.router.address, curator, morpho);
36+
}
37+
38+
constructor(router: Address, curator: Curator, morpho: Address) {
39+
super("Morpho", router, curator);
40+
this.#morpho = morpho;
41+
}
42+
43+
protected async deploy(): Promise<void> {
44+
const liquidatorAddr =
45+
this.config.liquidationMode === "deleverage"
46+
? await this.#deployUnwinder()
47+
: await this.#deployLiquidator();
48+
49+
this.address = liquidatorAddr;
50+
}
51+
52+
async #deployLiquidator(): Promise<Address> {
53+
const { address } = await this.deployer.ensureExists({
54+
abi: morphoLiquidatorAbi,
55+
bytecode: MorphoLiquidator_bytecode,
56+
// constructor(address _owner, address _morpho)
57+
args: [this.owner, this.#morpho],
58+
});
59+
this.logger.debug(`MorphoLiquidator address: ${address}`);
60+
return address;
61+
}
62+
63+
async #deployUnwinder(): Promise<Address> {
64+
const { address } = await this.deployer.ensureExists({
65+
abi: morphoUnwinderAbi,
66+
bytecode: MorphoUnwinder_bytecode,
67+
// constructor(address _owner, address _morpho)
68+
args: [this.owner, this.#morpho],
69+
});
70+
this.logger.debug(`MorphoUnwinder address: ${address}`);
71+
return address;
72+
}
73+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export * from "./AAVELiquidatorV310Contract.js";
22
export * from "./GHOLiquidatorV310Contract.js";
3+
export * from "./MorphoLiquidatorV310Contract.js";
34
export * from "./SiloLiquidatorV310Contract.js";

yarn.lock

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1902,10 +1902,10 @@ __metadata:
19021902
languageName: node
19031903
linkType: hard
19041904

1905-
"@gearbox-protocol/liquidator-contracts@npm:^1.36.0-experimental.66":
1906-
version: 1.36.0-experimental.66
1907-
resolution: "@gearbox-protocol/liquidator-contracts@npm:1.36.0-experimental.66"
1908-
checksum: 10c0/9e59cda54d62aa45aca0838b304a3a5d9b480b83edbb977f5a5fbc7ee1a49acff609ba93c877c46ebe400b45a2d33ed6902838cb9c6f1ce152a4d2c9f04168c9
1905+
"@gearbox-protocol/liquidator-contracts@npm:^1.36.0-experimental.67":
1906+
version: 1.36.0-experimental.67
1907+
resolution: "@gearbox-protocol/liquidator-contracts@npm:1.36.0-experimental.67"
1908+
checksum: 10c0/aa67a877d040c0fde8844dc98a324f49628f683a143a4ca2e6e911a383853d4b8de01a05746cede2bdf0653d704eecb4ba4987c96c22b19d06658d6da60ed061
19091909
languageName: node
19101910
linkType: hard
19111911

@@ -1927,7 +1927,7 @@ __metadata:
19271927
"@commitlint/config-conventional": "npm:^20.0.0"
19281928
"@gearbox-protocol/biome-config": "npm:^1.0.14"
19291929
"@gearbox-protocol/cli-utils": "npm:^5.60.6"
1930-
"@gearbox-protocol/liquidator-contracts": "npm:^1.36.0-experimental.66"
1930+
"@gearbox-protocol/liquidator-contracts": "npm:^1.36.0-experimental.67"
19311931
"@gearbox-protocol/liquidator-v2-contracts": "npm:^2.4.0"
19321932
"@gearbox-protocol/sdk": "npm:11.7.2"
19331933
"@gearbox-protocol/types": "npm:^1.14.8"

0 commit comments

Comments
 (0)