@merkl/api 0.21.27 → 0.21.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (17) hide show
  1. package/dist/src/engine/implementations/Erc20/subTypes/factories.js +6 -0
  2. package/dist/src/engine/implementations/Erc20/subTypes/implementations/dlend/metadata.d.ts +17 -0
  3. package/dist/src/engine/implementations/Erc20/subTypes/implementations/dlend/metadata.js +29 -0
  4. package/dist/src/engine/implementations/Erc20/subTypes/implementations/dlend/tvl.d.ts +6 -0
  5. package/dist/src/engine/implementations/Erc20/subTypes/implementations/dlend/tvl.js +51 -0
  6. package/dist/src/engine/implementations/Erc20/subTypes/implementations/euler/metadata.d.ts +1 -1
  7. package/dist/src/engine/implementations/Erc20/subTypes/implementations/euler/metadata.js +1 -1
  8. package/dist/src/engine/implementations/Erc20/subTypes/implementations/gearbox/metadata.d.ts +1 -1
  9. package/dist/src/engine/implementations/Erc20/subTypes/implementations/gearbox/metadata.js +1 -1
  10. package/dist/src/engine/implementations/Erc20/subTypes/implementations/lendleVaults/metadata.d.ts +1 -1
  11. package/dist/src/engine/implementations/Erc20/subTypes/implementations/lendleVaults/metadata.js +1 -1
  12. package/dist/src/engine/implementations/Erc20/subTypes/implementations/superlend/metadata.d.ts +1 -1
  13. package/dist/src/engine/implementations/Erc20/subTypes/implementations/superlend/metadata.js +1 -1
  14. package/dist/src/engine/implementations/Erc20/subTypes/implementations/termmax/metadata.d.ts +1 -1
  15. package/dist/src/engine/implementations/Erc20/subTypes/implementations/termmax/metadata.js +1 -1
  16. package/dist/tsconfig.package.tsbuildinfo +1 -1
  17. package/package.json +1 -1
@@ -1,4 +1,6 @@
1
1
  import { Erc20SubType } from ".";
2
+ import { DlendMetadata } from "./implementations/dlend/metadata";
3
+ import { DlendTVLBuilder } from "./implementations/dlend/tvl";
2
4
  import { EulerMetadata } from "./implementations/euler/metadata";
3
5
  import { EulerTVLBuilder } from "./implementations/euler/tvl";
4
6
  import { GearboxMetadata } from "./implementations/gearbox/metadata";
@@ -23,6 +25,8 @@ const tvlMap = {
23
25
  [Erc20SubType.euler_lend]: new EulerTVLBuilder(),
24
26
  [Erc20SubType.lendle_vaults]: new LendleTVLBuilder(),
25
27
  [Erc20SubType.termmax]: new TermMaxTVLBuilder(),
28
+ [Erc20SubType.dlend_lending]: new DlendTVLBuilder(),
29
+ [Erc20SubType.dlend_borrowing]: new DlendTVLBuilder(),
26
30
  };
27
31
  export const erc20SubTypeTVLBuilderFactory = (erc20Subtype) => {
28
32
  if (!tvlMap[erc20Subtype]) {
@@ -44,6 +48,8 @@ const metadataMap = {
44
48
  [Erc20SubType.euler_lend]: new EulerMetadata(),
45
49
  [Erc20SubType.lendle_vaults]: new LendleMetadata(),
46
50
  [Erc20SubType.termmax]: new TermMaxMetadata(),
51
+ [Erc20SubType.dlend_lending]: new DlendMetadata(),
52
+ [Erc20SubType.dlend_borrowing]: new DlendMetadata(),
47
53
  };
48
54
  export const erc20SubTypeMetadataBuilderFactory = (erc20Subtype) => {
49
55
  if (!metadataMap[erc20Subtype]) {
@@ -0,0 +1,17 @@
1
+ import type { MetadataBuilder } from "@/engine/metadata/interface";
2
+ import type { CampaignWithParams } from "@/modules/v4/campaign/campaign.model";
3
+ import type { ProtocolId } from "@/modules/v4/protocol/protocol.model";
4
+ import type { Erc20LikeCampaignEnum } from "../..";
5
+ export declare class DlendMetadata implements MetadataBuilder<Erc20LikeCampaignEnum> {
6
+ build(campaign: Omit<CampaignWithParams<Erc20LikeCampaignEnum>, "manualOverrides">, _opportunityIdentifier: string): Promise<{
7
+ action: "LEND" | "BORROW";
8
+ mainProtocol: ProtocolId;
9
+ name: string;
10
+ tokens: {
11
+ chainId: number;
12
+ address: any;
13
+ }[];
14
+ depositUrl: string;
15
+ explorerAddress: any;
16
+ }>;
17
+ }
@@ -0,0 +1,29 @@
1
+ import { TokenService } from "@/modules/v4/token/token.service";
2
+ import { OpportunityAction } from "@db/api";
3
+ import { Aave__factory, ChainInteractionService, TokenInteractionService } from "@sdk";
4
+ export class DlendMetadata {
5
+ async build(campaign, _opportunityIdentifier) {
6
+ const { params, computeChainId } = campaign;
7
+ const { targetToken } = params;
8
+ const targetTokenInfo = await TokenService.fetchOnChain({
9
+ chainId: computeChainId,
10
+ address: targetToken,
11
+ });
12
+ const underlyingToken = await Aave__factory.connect(targetToken, ChainInteractionService(computeChainId).provider()).UNDERLYING_ASSET_ADDRESS();
13
+ const underlyingTokenSymbol = await TokenInteractionService(computeChainId).symbol(underlyingToken);
14
+ const action = targetTokenInfo?.name?.toLowerCase().includes("debt")
15
+ ? OpportunityAction.BORROW
16
+ : OpportunityAction.LEND;
17
+ return {
18
+ action,
19
+ mainProtocol: "dlend",
20
+ name: `${action === OpportunityAction.BORROW ? "Borrow" : "Supply"} ${underlyingTokenSymbol} on dTrinity dLend`,
21
+ tokens: [
22
+ { chainId: computeChainId, address: targetToken },
23
+ { chainId: computeChainId, address: underlyingToken },
24
+ ],
25
+ depositUrl: `https://app.dtrinity.org/dlend/reserve-overview/?underlyingAsset=${underlyingToken}`,
26
+ explorerAddress: params.targetToken,
27
+ };
28
+ }
29
+ }
@@ -0,0 +1,6 @@
1
+ import type { Erc20LikeCampaignEnum } from "@/engine/implementations/Erc20/subTypes";
2
+ import type { TVLBuilder, TVLData } from "@/engine/tvl/interface";
3
+ import { type CampaignParameters, type MerklChainId } from "@sdk";
4
+ export declare class DlendTVLBuilder implements TVLBuilder<Erc20LikeCampaignEnum> {
5
+ build(computeChainId: MerklChainId, campaigns: CampaignParameters<Erc20LikeCampaignEnum>[]): Promise<TVLData<any>>;
6
+ }
@@ -0,0 +1,51 @@
1
+ import { TokenService } from "@/modules/v4/token/token.service";
2
+ import { TvlType } from "@db/api";
3
+ import { AaveInterface, ChainInteractionService, ERC20Interface, bigIntToNumber, } from "@sdk";
4
+ export class DlendTVLBuilder {
5
+ async build(computeChainId, campaigns) {
6
+ const tvls = [];
7
+ const firstRound = await ChainInteractionService(computeChainId).fetchAndDecodeObject(campaigns.flatMap(campaign => {
8
+ const { campaignId, campaignParameters } = campaign;
9
+ const { targetToken } = campaignParameters;
10
+ return [
11
+ {
12
+ callData: AaveInterface.encodeFunctionData("UNDERLYING_ASSET_ADDRESS"),
13
+ target: targetToken,
14
+ key: `${campaignId}_underlyingToken`,
15
+ decoder: (data) => AaveInterface.decodeFunctionResult("UNDERLYING_ASSET_ADDRESS", data)[0],
16
+ },
17
+ {
18
+ callData: ERC20Interface.encodeFunctionData("totalSupply"),
19
+ target: targetToken,
20
+ key: `${campaignId}_totalSupply`,
21
+ decoder: (data) => BigInt(ERC20Interface.decodeFunctionResult("totalSupply", data)[0].toString()),
22
+ },
23
+ ];
24
+ }));
25
+ for (const campaign of campaigns) {
26
+ const { campaignId } = campaign;
27
+ const underlyingTokenAddress = firstRound[`${campaignId}_underlyingToken`];
28
+ const totalSupply = firstRound[`${campaignId}_totalSupply`];
29
+ // We don't fetch token data everytime, we use the database and the associated service
30
+ const underlyingToken = await TokenService.findUniqueFillOrThrow({
31
+ chainId: computeChainId,
32
+ address: underlyingTokenAddress,
33
+ });
34
+ if (!underlyingToken.decimals || !underlyingToken.price) {
35
+ throw new Error(`Missing decimals or price for token ${underlyingToken.address}`);
36
+ }
37
+ tvls.push({
38
+ campaign,
39
+ tvl: bigIntToNumber(totalSupply, underlyingToken.decimals) * underlyingToken.price,
40
+ tvlBreakdown: [
41
+ {
42
+ identifier: underlyingToken.id,
43
+ type: TvlType.TOKEN,
44
+ value: bigIntToNumber(totalSupply, underlyingToken.decimals),
45
+ },
46
+ ],
47
+ });
48
+ }
49
+ return tvls;
50
+ }
51
+ }
@@ -4,7 +4,7 @@ import type { ProtocolId } from "@/modules/v4/protocol/protocol.model";
4
4
  import { type Campaign as CampaignType } from "@sdk";
5
5
  type campaignType = CampaignType.EULER;
6
6
  export declare class EulerMetadata implements MetadataBuilder<campaignType> {
7
- build(campaign: Omit<CampaignWithParams<campaignType>, "manualOverrides">): Promise<{
7
+ build(campaign: Omit<CampaignWithParams<campaignType>, "manualOverrides">, _opportunityIdentifier: string): Promise<{
8
8
  action: "LEND" | "BORROW";
9
9
  mainProtocol: ProtocolId;
10
10
  name: string;
@@ -4,7 +4,7 @@ import { sanitizeChainName } from "@/utils/sanitizeChain";
4
4
  import { OpportunityAction } from "@db/api";
5
5
  import { ChainInteractionService, EulerSubCampaignType, Euler__factory } from "@sdk";
6
6
  export class EulerMetadata {
7
- async build(campaign) {
7
+ async build(campaign, _opportunityIdentifier) {
8
8
  const { params, computeChainId, subType } = campaign;
9
9
  let { targetToken, addressAsset: underlyingToken, symbolCollateral, evkAddress } = params;
10
10
  if (!underlyingToken)
@@ -3,7 +3,7 @@ import type { CampaignWithParams } from "@/modules/v4/campaign/campaign.model";
3
3
  import type { ProtocolId } from "@/modules/v4/protocol/protocol.model";
4
4
  import type { Erc20LikeCampaignEnum } from "../..";
5
5
  export declare class GearboxMetadata implements MetadataBuilder<Erc20LikeCampaignEnum> {
6
- build(campaign: Omit<CampaignWithParams<Erc20LikeCampaignEnum>, "manualOverrides">): Promise<{
6
+ build(campaign: Omit<CampaignWithParams<Erc20LikeCampaignEnum>, "manualOverrides">, _opportunityIdentifier: string): Promise<{
7
7
  action: "LEND";
8
8
  mainProtocol: ProtocolId;
9
9
  name: string;
@@ -1,7 +1,7 @@
1
1
  import { OpportunityAction } from "@db/api";
2
2
  import { ChainInteractionService, GearBoxVault__factory, TokenInteractionService } from "@sdk";
3
3
  export class GearboxMetadata {
4
- async build(campaign) {
4
+ async build(campaign, _opportunityIdentifier) {
5
5
  const { params, computeChainId } = campaign;
6
6
  const { targetToken } = params;
7
7
  const underlyingToken = await GearBoxVault__factory.connect(targetToken, ChainInteractionService(computeChainId).provider()).underlyingToken();
@@ -3,7 +3,7 @@ import type { CampaignWithParams } from "@/modules/v4/campaign/campaign.model";
3
3
  import type { ProtocolId } from "@/modules/v4/protocol/protocol.model";
4
4
  import type { Erc20LikeCampaignEnum } from "../..";
5
5
  export declare class LendleMetadata implements MetadataBuilder<Erc20LikeCampaignEnum> {
6
- build(campaign: Omit<CampaignWithParams<Erc20LikeCampaignEnum>, "manualOverrides">): Promise<{
6
+ build(campaign: Omit<CampaignWithParams<Erc20LikeCampaignEnum>, "manualOverrides">, _opportunityIdentifier: string): Promise<{
7
7
  action: "LEND";
8
8
  mainProtocol: ProtocolId;
9
9
  name: string;
@@ -1,7 +1,7 @@
1
1
  import { OpportunityAction } from "@db/api";
2
2
  import { ChainInteractionService, LendleVault__factory, TokenInteractionService } from "@sdk";
3
3
  export class LendleMetadata {
4
- async build(campaign) {
4
+ async build(campaign, _opportunityIdentifier) {
5
5
  const { params, computeChainId } = campaign;
6
6
  const { targetToken } = params;
7
7
  const underlyingToken = await LendleVault__factory.connect(targetToken, ChainInteractionService(computeChainId).provider()).want();
@@ -3,7 +3,7 @@ import type { CampaignWithParams } from "@/modules/v4/campaign/campaign.model";
3
3
  import type { ProtocolId } from "@/modules/v4/protocol/protocol.model";
4
4
  import type { Erc20LikeCampaignEnum } from "../..";
5
5
  export declare class SuperlendMetadata implements MetadataBuilder<Erc20LikeCampaignEnum> {
6
- build(campaign: Omit<CampaignWithParams<Erc20LikeCampaignEnum>, "manualOverrides">): Promise<{
6
+ build(campaign: Omit<CampaignWithParams<Erc20LikeCampaignEnum>, "manualOverrides">, _opportunityIdentifier: string): Promise<{
7
7
  action: "LEND" | "BORROW";
8
8
  mainProtocol: ProtocolId;
9
9
  name: string;
@@ -2,7 +2,7 @@ import { TokenService } from "@/modules/v4/token/token.service";
2
2
  import { OpportunityAction } from "@db/api";
3
3
  import { Aave__factory, ChainInteractionService, TokenInteractionService } from "@sdk";
4
4
  export class SuperlendMetadata {
5
- async build(campaign) {
5
+ async build(campaign, _opportunityIdentifier) {
6
6
  const { params, computeChainId } = campaign;
7
7
  const { targetToken } = params;
8
8
  const targetTokenInfo = await TokenService.fetchOnChain({
@@ -3,7 +3,7 @@ import type { CampaignWithParams } from "@/modules/v4/campaign/campaign.model";
3
3
  import type { ProtocolId } from "@/modules/v4/protocol/protocol.model";
4
4
  import type { Erc20LikeCampaignEnum } from "../..";
5
5
  export declare class TermMaxMetadata implements MetadataBuilder<Erc20LikeCampaignEnum> {
6
- build(campaign: Omit<CampaignWithParams<Erc20LikeCampaignEnum>, "manualOverrides">): Promise<{
6
+ build(campaign: Omit<CampaignWithParams<Erc20LikeCampaignEnum>, "manualOverrides">, _opportunityIdentifier: string): Promise<{
7
7
  action: "HOLD";
8
8
  mainProtocol: ProtocolId;
9
9
  name: string;
@@ -1,7 +1,7 @@
1
1
  import { OpportunityAction } from "@db/api";
2
2
  import { ChainInteractionService, TermMaxFT__factory, TermMaxMarket__factory, TokenInteractionService } from "@sdk";
3
3
  export class TermMaxMetadata {
4
- async build(campaign) {
4
+ async build(campaign, _opportunityIdentifier) {
5
5
  const { params, computeChainId } = campaign;
6
6
  const { targetToken } = params;
7
7
  const marketAddress = await TermMaxFT__factory.connect(targetToken, ChainInteractionService(computeChainId).provider()).marketAddr();