Skip to content

Commit ef6d795

Browse files
committed
refactor(morpho-sdk): split midnight action files
1 parent 45ff77e commit ef6d795

13 files changed

Lines changed: 818 additions & 733 deletions
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { midnightAbi } from "@morpho-org/midnight-sdk";
2+
import { deepFreeze, getChainAddress } from "@morpho-org/morpho-ts";
3+
import { encodeFunctionData } from "viem";
4+
import type {
5+
MidnightAuthorizationAction,
6+
Transaction,
7+
} from "../../types/index.js";
8+
import type { MidnightAuthorizationParams } from "./types.js";
9+
import { withMetadata } from "./utils.js";
10+
11+
/** Encodes `Midnight.setIsAuthorized(authorized, true, onBehalf)`. */
12+
export const midnightAuthorization = (
13+
params: MidnightAuthorizationParams,
14+
): Readonly<Transaction<MidnightAuthorizationAction>> => {
15+
const isAuthorized = params.isAuthorized ?? true;
16+
const midnight = getChainAddress(params.chainId, "midnight");
17+
18+
let tx: Transaction<MidnightAuthorizationAction> = {
19+
to: midnight,
20+
value: 0n,
21+
data: encodeFunctionData({
22+
abi: midnightAbi,
23+
functionName: "setIsAuthorized",
24+
args: [params.authorized, isAuthorized, params.onBehalf],
25+
}),
26+
action: {
27+
type: "midnightAuthorization",
28+
args: {
29+
authorized: params.authorized,
30+
isAuthorized,
31+
onBehalf: params.onBehalf,
32+
},
33+
},
34+
};
35+
36+
tx = withMetadata(tx, params.metadata);
37+
38+
return deepFreeze(tx);
39+
};
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
import { MarketUtils, midnightBundlesAbi } from "@morpho-org/midnight-sdk";
2+
import { deepFreeze, getChainAddress } from "@morpho-org/morpho-ts";
3+
import { encodeFunctionData, zeroAddress } from "viem";
4+
import {
5+
EmptyMidnightTakesError,
6+
type MidnightBorrowMarketAction,
7+
NegativeMidnightAmountError,
8+
NonPositiveMidnightAmountError,
9+
type Transaction,
10+
} from "../../types/index.js";
11+
import type {
12+
MidnightBorrowMarketParams,
13+
MidnightCollateralSupply,
14+
} from "./types.js";
15+
import { withMetadata } from "./utils.js";
16+
17+
/** Encodes the borrow-market Midnight bundle. */
18+
export const midnightBorrowMarket = (
19+
params: MidnightBorrowMarketParams,
20+
): Readonly<Transaction<MidnightBorrowMarketAction>> => {
21+
if (params.collateralAssets < 0n) {
22+
throw new NegativeMidnightAmountError(
23+
"collateralAssets",
24+
params.collateralAssets,
25+
);
26+
}
27+
if (params.loanAssets <= 0n) {
28+
throw new NonPositiveMidnightAmountError("loanAssets", params.loanAssets);
29+
}
30+
if (params.maxUnits < 0n) {
31+
throw new NegativeMidnightAmountError("maxUnits", params.maxUnits);
32+
}
33+
if (params.takes.length === 0) {
34+
throw new EmptyMidnightTakesError();
35+
}
36+
37+
const marketId = MarketUtils.toId({
38+
market: params.market,
39+
chainId: params.chainId,
40+
});
41+
const midnightBundles = getChainAddress(params.chainId, "midnightBundles");
42+
const collateralSupplies: readonly MidnightCollateralSupply[] =
43+
params.collateralAssets > 0n
44+
? [
45+
{
46+
collateralIndex: params.collateralIndex ?? 0n,
47+
assets: params.collateralAssets,
48+
permit: { kind: 0, data: "0x" } as const,
49+
},
50+
]
51+
: [];
52+
const receiver = params.receiver ?? params.taker;
53+
54+
let tx: Transaction<MidnightBorrowMarketAction> = {
55+
to: midnightBundles,
56+
value: 0n,
57+
data: encodeFunctionData({
58+
abi: midnightBundlesAbi,
59+
functionName: "supplyCollateralAndSellWithAssetsTarget",
60+
args: [
61+
params.loanAssets,
62+
params.maxUnits,
63+
params.taker,
64+
receiver,
65+
collateralSupplies,
66+
params.takes,
67+
0n,
68+
zeroAddress,
69+
],
70+
}),
71+
action: {
72+
type: "midnightBorrowMarket",
73+
args: {
74+
market: marketId,
75+
collateralAssets: params.collateralAssets,
76+
loanAssets: params.loanAssets,
77+
maxUnits: params.maxUnits,
78+
taker: params.taker,
79+
receiver,
80+
takes: params.takes.length,
81+
},
82+
},
83+
};
84+
85+
tx = withMetadata(tx, params.metadata);
86+
87+
return deepFreeze(tx);
88+
};
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { midnightAbi } from "@morpho-org/midnight-sdk";
2+
import { deepFreeze, getChainAddress } from "@morpho-org/morpho-ts";
3+
import { encodeFunctionData, maxUint256 } from "viem";
4+
import type {
5+
MidnightCancelOfferAction,
6+
Transaction,
7+
} from "../../types/index.js";
8+
import type { MidnightCancelOfferParams } from "./types.js";
9+
import { withMetadata } from "./utils.js";
10+
11+
/** Encodes `Midnight.setConsumed(group, maxUint256, onBehalf)`. */
12+
export const midnightCancelOffer = (
13+
params: MidnightCancelOfferParams,
14+
): Readonly<Transaction<MidnightCancelOfferAction>> => {
15+
const midnight = getChainAddress(params.chainId, "midnight");
16+
const amount = params.amount ?? maxUint256;
17+
18+
let tx: Transaction<MidnightCancelOfferAction> = {
19+
to: midnight,
20+
value: 0n,
21+
data: encodeFunctionData({
22+
abi: midnightAbi,
23+
functionName: "setConsumed",
24+
args: [params.group, amount, params.onBehalf],
25+
}),
26+
action: {
27+
type: "midnightCancelOffer",
28+
args: {
29+
group: params.group,
30+
amount,
31+
onBehalf: params.onBehalf,
32+
},
33+
},
34+
};
35+
36+
tx = withMetadata(tx, params.metadata);
37+
38+
return deepFreeze(tx);
39+
};

0 commit comments

Comments
 (0)