diff --git a/subgraphs/enzyme-core/contexts/arbitrum.ts b/subgraphs/enzyme-core/contexts/arbitrum.ts index 89c5e99e..22e9dc1b 100644 --- a/subgraphs/enzyme-core/contexts/arbitrum.ts +++ b/subgraphs/enzyme-core/contexts/arbitrum.ts @@ -29,7 +29,7 @@ export const arbitrum: Context = { theGraphStakingProxyAddress: '0x0000000000000000000000000000000000000000', lusdAddress: '0x0000000000000000000000000000000000000000', compAddress: '0x354a6da3fcde098f8389cad84b0182725c6c91de', - // morphoBlueAddress: "0x0000000000000000000000000000000000000000", + morphoBlueAddress: '0x0000000000000000000000000000000000000000', aliceOrderManager: '0x0000000000000000000000000000000000000000', }, persistent: { diff --git a/subgraphs/enzyme-core/contexts/ethereum.ts b/subgraphs/enzyme-core/contexts/ethereum.ts index 11f1f3f4..f34ec624 100644 --- a/subgraphs/enzyme-core/contexts/ethereum.ts +++ b/subgraphs/enzyme-core/contexts/ethereum.ts @@ -34,7 +34,7 @@ export const ethereum: Context = { theGraphStakingProxyAddress: suluDeployment.externalContracts.theGraphStakingProxy, lusdAddress: '0x5f98805a4e8be255a32880fdec7f6728c6568ba0', compAddress: '0xc00e94cb662c3520282e6f5717214004a7f26888', - // morphoBlueAddress: "0xbbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb", + morphoBlueAddress: '0xbbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb', aliceOrderManager: '0x841473a19279e54a850e9083a3a57de9e6244d2e', }, persistent: { diff --git a/subgraphs/enzyme-core/contexts/polygon.ts b/subgraphs/enzyme-core/contexts/polygon.ts index 95330c8d..97482f0b 100644 --- a/subgraphs/enzyme-core/contexts/polygon.ts +++ b/subgraphs/enzyme-core/contexts/polygon.ts @@ -32,7 +32,7 @@ export const polygon: Context = { theGraphStakingProxyAddress: polygonV4Deployment.externalContracts.theGraphStakingProxy, lusdAddress: '0x0000000000000000000000000000000000000000', compAddress: '0x8505b9d2254a7ae468c0e9dd10ccea3a837aef5c', - // morphoBlueAddress: "0x0000000000000000000000000000000000000000", + morphoBlueAddress: '0x0000000000000000000000000000000000000000', aliceOrderManager: '0x0000000000000000000000000000000000000000', }, persistent: { diff --git a/subgraphs/enzyme-core/contexts/testnet.ts b/subgraphs/enzyme-core/contexts/testnet.ts index db7b443f..127dd7c9 100644 --- a/subgraphs/enzyme-core/contexts/testnet.ts +++ b/subgraphs/enzyme-core/contexts/testnet.ts @@ -32,7 +32,7 @@ export const testnet: Context = { theGraphStakingProxyAddress: testnetV4Deployment.externalContracts.theGraphStakingProxy, lusdAddress: '0x0000000000000000000000000000000000000000', compAddress: '0x8505b9d2254a7ae468c0e9dd10ccea3a837aef5c', - // morphoBlueAddress: "0x0000000000000000000000000000000000000000", + morphoBlueAddress: '0x0000000000000000000000000000000000000000', aliceOrderManager: '0x0000000000000000000000000000000000000000', }, persistent: { diff --git a/subgraphs/enzyme-core/entities/MorphoBluePosition.ts b/subgraphs/enzyme-core/entities/MorphoBluePosition.ts index e9380587..423231fb 100644 --- a/subgraphs/enzyme-core/entities/MorphoBluePosition.ts +++ b/subgraphs/enzyme-core/entities/MorphoBluePosition.ts @@ -1,90 +1,97 @@ -// import { Address, Bytes, ethereum } from '@graphprotocol/graph-ts'; -// import { AssetAmount, ExternalPositionType, MorphoBlueMarket, MorphoBluePosition, MorphoBluePositionChange, Vault } from '../generated/schema'; -// import { useVault } from './Vault'; -// import { logCritical, uniqueEventId } from '@enzymefinance/subgraph-utils'; -// import { getActivityCounter } from './Counter'; -// import { ExternalSdk } from '../generated/contracts/ExternalSdk'; -// import { morphoBlueAddress } from '../generated/addresses'; -// import { ensureAsset } from './Asset'; +import { Address, Bytes, ethereum } from '@graphprotocol/graph-ts'; +import { + AssetAmount, + ExternalPositionType, + MorphoBlueMarket, + MorphoBluePosition, + MorphoBluePositionChange, + Vault, +} from '../generated/schema'; +import { useVault } from './Vault'; +import { logCritical, uniqueEventId } from '@enzymefinance/subgraph-utils'; +import { getActivityCounter } from './Counter'; +import { ExternalSdk } from '../generated/contracts/ExternalSdk'; +import { morphoBlueAddress } from '../generated/addresses'; +import { ensureAsset } from './Asset'; -// function morphoBlueMarketId(morphoBluePosition: Address, marketId: Bytes): string { -// return morphoBluePosition.toHex() + '/' + marketId.toHex(); -// } +function morphoBlueMarketId(morphoBluePosition: Address, marketId: Bytes): string { + return morphoBluePosition.toHex() + '/' + marketId.toHex(); +} -// export function ensureMorphoBlueMarket(morphoBluePosition: Address, marketId: Bytes): MorphoBlueMarket { -// let id = morphoBlueMarketId(morphoBluePosition, marketId); -// let market = MorphoBlueMarket.load(id); +export function ensureMorphoBlueMarket(morphoBluePosition: Address, marketId: Bytes): MorphoBlueMarket { + let id = morphoBlueMarketId(morphoBluePosition, marketId); + let market = MorphoBlueMarket.load(id); -// if (market) { -// return market; -// } + if (market) { + return market; + } -// let contract = ExternalSdk.bind(morphoBlueAddress); -// let marketParams = contract.try_idToMarketParams(marketId); + let contract = ExternalSdk.bind(morphoBlueAddress); + let marketParams = contract.try_idToMarketParams(marketId); -// if (marketParams.reverted) { -// logCritical('Unable to obtain market params for market id {}',[marketId.toHex()]) -// } + if (marketParams.reverted) { + logCritical('Unable to obtain market params for market id {}', [marketId.toHex()]); + } -// let loanToken = ensureAsset(marketParams.value.loanToken); -// let collateralToken = ensureAsset(marketParams.value.collateralToken) + let loanToken = ensureAsset(marketParams.value.loanToken); + let collateralToken = ensureAsset(marketParams.value.collateralToken); -// market = new MorphoBlueMarket(id); -// market.marketId = marketId; -// market.morpheBluePosition = morphoBluePosition.toHex(); -// market.loanToken = loanToken.id; -// market.collateralToken = collateralToken.id; -// market.removed = false; -// market.save(); + market = new MorphoBlueMarket(id); + market.marketId = marketId; + market.morphoBluePosition = morphoBluePosition.toHex(); + market.loanToken = loanToken.id; + market.collateralToken = collateralToken.id; + market.removed = false; + market.save(); -// return market; -// } + return market; +} -// export function createMorphoBluePosition( -// externalPositionAddress: Address, -// vaultAddress: Address, -// type: ExternalPositionType, -// ): MorphoBluePosition { -// let position = new MorphoBluePosition(externalPositionAddress.toHex()); -// position.vault = useVault(vaultAddress.toHex()).id; -// position.active = true; -// position.type = type.id; -// position.save(); +export function createMorphoBluePosition( + externalPositionAddress: Address, + vaultAddress: Address, + type: ExternalPositionType, +): MorphoBluePosition { + let position = new MorphoBluePosition(externalPositionAddress.toHex()); + position.vault = useVault(vaultAddress.toHex()).id; + position.active = true; + position.type = type.id; + position.save(); -// return position; -// } + return position; +} -// export function useMorphoBluePosition(id: string): MorphoBluePosition { -// let position = MorphoBluePosition.load(id); -// if (position == null) { -// logCritical('Failed to load MorphoBluePosition {}.', [id]); -// } +export function useMorphoBluePosition(id: string): MorphoBluePosition { + let position = MorphoBluePosition.load(id); + if (position == null) { + logCritical('Failed to load MorphoBluePosition {}.', [id]); + } -// return position as MorphoBluePosition; -// } + return position as MorphoBluePosition; +} -// export function createMorphoBluePositionChange( -// MorphoBluePositionAddress: Address, -// changeType: string, -// vault: Vault, -// market: MorphoBlueMarket, -// assetAmount: AssetAmount, -// event: ethereum.Event, -// ): MorphoBluePositionChange { -// let change = new MorphoBluePositionChange(uniqueEventId(event)); -// change.morphoBluePositionChangeType = changeType; -// change.externalPosition = MorphoBluePositionAddress.toHex(); -// change.vault = vault.id; -// change.timestamp = event.block.timestamp.toI32(); -// change.market = market.id; -// change.assetAmount = assetAmount.id; -// change.activityCounter = getActivityCounter(); -// change.activityCategories = ['Vault']; -// change.activityType = 'Trade'; -// change.save(); +export function createMorphoBluePositionChange( + morphoBluePositionAddress: Address, + changeType: string, + vault: Vault, + market: MorphoBlueMarket, + assetAmount: AssetAmount, + event: ethereum.Event, +): MorphoBluePositionChange { + let change = new MorphoBluePositionChange(uniqueEventId(event)); + change.morphoBluePositionChangeType = changeType; + change.externalPosition = morphoBluePositionAddress.toHex(); + change.vault = vault.id; + change.timestamp = event.block.timestamp.toI32(); + change.market = market.id; + change.assetAmount = assetAmount.id; + change.activityCounter = getActivityCounter(); + change.activityCategories = ['Vault']; + change.activityType = 'Trade'; + change.save(); -// vault.lastAssetUpdate = event.block.timestamp.toI32(); -// vault.save(); + vault.lastAssetUpdate = event.block.timestamp.toI32(); + vault.save(); -// return change; -// } + return change; +} diff --git a/subgraphs/enzyme-core/mappings/v4/ExternalPositionManager.ts b/subgraphs/enzyme-core/mappings/v4/ExternalPositionManager.ts index 2074d5b6..ec3185bf 100644 --- a/subgraphs/enzyme-core/mappings/v4/ExternalPositionManager.ts +++ b/subgraphs/enzyme-core/mappings/v4/ExternalPositionManager.ts @@ -60,7 +60,7 @@ import { KilnStakingPositionLib4DataSource, LidoWithdrawalsPositionLib4DataSource, MapleLiquidityPositionLib4DataSource, - // MorphoBluePositionLib4DataSource, + MorphoBluePositionLib4DataSource, StakeWiseV3StakingPositionLib4DataSource, TheGraphDelegationPositionLib4DataSource, UniswapV3LiquidityPositionLib4DataSource, @@ -81,7 +81,7 @@ import { PendleV2ActionId, GMXV2LeverageTradingActionId, AliceActionId, - // MorphoBlueActionId, + MorphoBlueActionId, } from '../../utils/actionId'; import { ensureMapleLiquidityPoolV1, ensureMapleLiquidityPoolV2 } from '../../entities/MapleLiquidityPool'; import { ExternalSdk } from '../../generated/contracts/ExternalSdk'; @@ -125,7 +125,6 @@ import { createKilnStakingPositionChange, ensureKilnStaking, ethPerKilnNode, - useKilnStakingPosition, } from '../../entities/KilnStakingPosition'; import { kilnClaimFeeType } from '../../utils/kilnClaimFeeType'; import { @@ -159,11 +158,11 @@ import { gmxUsdDecimals, } from '../../entities/GMXV2LeverageTradingPosition'; import { createAlicePosition, createAlicePositionChange, useAliceOrder } from '../../entities/AlicePosition'; -// import { -// createMorphoBluePosition, -// createMorphoBluePositionChange, -// ensureMorphoBlueMarket, -// } from '../../entities/MorphoBluePosition'; +import { + createMorphoBluePosition, + createMorphoBluePositionChange, + ensureMorphoBlueMarket, +} from '../../entities/MorphoBluePosition'; export function handleExternalPositionDeployedForFund(event: ExternalPositionDeployedForFund): void { let type = useExternalPositionType(event.params.externalPositionTypeId); @@ -254,13 +253,13 @@ export function handleExternalPositionDeployedForFund(event: ExternalPositionDep return; } - // if (type.label == 'MORPHO_BLUE') { - // createMorphoBluePosition(event.params.externalPosition, event.params.vaultProxy, type); + if (type.label == 'MORPHO_BLUE') { + createMorphoBluePosition(event.params.externalPosition, event.params.vaultProxy, type); - // MorphoBluePositionLib4DataSource.create(event.params.externalPosition); + MorphoBluePositionLib4DataSource.create(event.params.externalPosition); - // return; - // } + return; + } if (type.label == 'STAKEWISE_V3') { createStakeWiseStakingPosition(event.params.externalPosition, event.params.vaultProxy, type); @@ -2451,176 +2450,188 @@ export function handleCallOnExternalPositionExecutedForFund(event: CallOnExterna return; } - // if (type.label == 'MORPHO_BLUE') { - // if (actionId == MorphoBlueActionId.Lend) { - // let decoded = ethereum.decode('(bytes32,uint256)', event.params.actionArgs); + if (type.label == 'MORPHO_BLUE') { + if (actionId == MorphoBlueActionId.Lend) { + let decoded = ethereum.decode('(bytes32,uint256)', event.params.actionArgs); - // if (decoded == null) { - // return; - // } + if (decoded == null) { + return; + } - // let tuple = decoded.toTuple(); + let tuple = decoded.toTuple(); - // let marketId = tuple[0].toBytes(); + let marketId = tuple[0].toBytes(); - // let morphoBlueMarket = ensureMorphoBlueMarket(event.address, marketId); - // let loanToken = ensureAsset(Address.fromString(morphoBlueMarket.loanToken)); + let morphoBlueMarket = ensureMorphoBlueMarket(event.address, marketId); + let loanToken = ensureAsset(Address.fromString(morphoBlueMarket.loanToken)); - // let amount = toBigDecimal(tuple[1].toBigInt(), loanToken.decimals); + let amount = toBigDecimal(tuple[1].toBigInt(), loanToken.decimals); - // let assetAmount = createAssetAmount(loanToken, amount, denominationAsset, 'morpho-blue-lend', event); + let assetAmount = createAssetAmount(loanToken, amount, denominationAsset, 'morpho-blue-lend', event); - // createMorphoBluePositionChange( - // event.params.externalPosition, - // 'Lend', - // vault, - // morphoBlueMarket, - // assetAmount, - // event, - // ); - // } + createMorphoBluePositionChange( + event.params.externalPosition, + 'Lend', + vault, + morphoBlueMarket, + assetAmount, + event, + ); + } - // if (actionId == MorphoBlueActionId.Redeem) { - // let decoded = ethereum.decode('(bytes32,uint256)', event.params.actionArgs); + if (actionId == MorphoBlueActionId.Redeem) { + let decoded = ethereum.decode('(bytes32,uint256)', event.params.actionArgs); - // if (decoded == null) { - // return; - // } + if (decoded == null) { + return; + } - // let tuple = decoded.toTuple(); + let tuple = decoded.toTuple(); - // let marketId = tuple[0].toBytes(); + let marketId = tuple[0].toBytes(); - // let morphoBlueMarket = ensureMorphoBlueMarket(event.address, marketId); - // let loanToken = ensureAsset(Address.fromString(morphoBlueMarket.loanToken)); + let morphoBlueMarket = ensureMorphoBlueMarket(event.address, marketId); + let loanToken = ensureAsset(Address.fromString(morphoBlueMarket.loanToken)); - // let amount = toBigDecimal(tuple[1].toBigInt(), loanToken.decimals); + let amount = toBigDecimal(tuple[1].toBigInt(), loanToken.decimals); - // let assetAmount = createAssetAmount(loanToken, amount, denominationAsset, 'morpho-blue-redeem', event); + let assetAmount = createAssetAmount(loanToken, amount, denominationAsset, 'morpho-blue-redeem', event); - // createMorphoBluePositionChange( - // event.params.externalPosition, - // 'Redeem', - // vault, - // morphoBlueMarket, - // assetAmount, - // event, - // ); - // } + createMorphoBluePositionChange( + event.params.externalPosition, + 'Redeem', + vault, + morphoBlueMarket, + assetAmount, + event, + ); + } - // if (actionId == MorphoBlueActionId.AddCollateral) { - // let decoded = ethereum.decode('(bytes32,uint256)', event.params.actionArgs); + if (actionId == MorphoBlueActionId.AddCollateral) { + let decoded = ethereum.decode('(bytes32,uint256)', event.params.actionArgs); - // if (decoded == null) { - // return; - // } + if (decoded == null) { + return; + } - // let tuple = decoded.toTuple(); + let tuple = decoded.toTuple(); - // let marketId = tuple[0].toBytes(); + let marketId = tuple[0].toBytes(); - // let morphoBlueMarket = ensureMorphoBlueMarket(event.address, marketId); - // let collateralToken = ensureAsset(Address.fromString(morphoBlueMarket.collateralToken)); + let morphoBlueMarket = ensureMorphoBlueMarket(event.address, marketId); + let collateralToken = ensureAsset(Address.fromString(morphoBlueMarket.collateralToken)); - // let amount = toBigDecimal(tuple[1].toBigInt(), collateralToken.decimals); + let amount = toBigDecimal(tuple[1].toBigInt(), collateralToken.decimals); - // let assetAmount = createAssetAmount(collateralToken, amount, denominationAsset, 'morpho-blue-add-collateral', event); + let assetAmount = createAssetAmount( + collateralToken, + amount, + denominationAsset, + 'morpho-blue-add-collateral', + event, + ); - // createMorphoBluePositionChange( - // event.params.externalPosition, - // 'AddCollateral', - // vault, - // morphoBlueMarket, - // assetAmount, - // event, - // ); - // } + createMorphoBluePositionChange( + event.params.externalPosition, + 'AddCollateral', + vault, + morphoBlueMarket, + assetAmount, + event, + ); + } - // if (actionId == MorphoBlueActionId.RemoveCollateral) { - // let decoded = ethereum.decode('(bytes32,uint256)', event.params.actionArgs); + if (actionId == MorphoBlueActionId.RemoveCollateral) { + let decoded = ethereum.decode('(bytes32,uint256)', event.params.actionArgs); - // if (decoded == null) { - // return; - // } + if (decoded == null) { + return; + } - // let tuple = decoded.toTuple(); + let tuple = decoded.toTuple(); - // let marketId = tuple[0].toBytes(); + let marketId = tuple[0].toBytes(); - // let morphoBlueMarket = ensureMorphoBlueMarket(event.address, marketId); - // let collateralToken = ensureAsset(Address.fromString(morphoBlueMarket.collateralToken)); + let morphoBlueMarket = ensureMorphoBlueMarket(event.address, marketId); + let collateralToken = ensureAsset(Address.fromString(morphoBlueMarket.collateralToken)); - // let amount = toBigDecimal(tuple[1].toBigInt(), collateralToken.decimals); + let amount = toBigDecimal(tuple[1].toBigInt(), collateralToken.decimals); - // let assetAmount = createAssetAmount(collateralToken, amount, denominationAsset, 'morpho-blue-remove-collateral', event); + let assetAmount = createAssetAmount( + collateralToken, + amount, + denominationAsset, + 'morpho-blue-remove-collateral', + event, + ); - // createMorphoBluePositionChange( - // event.params.externalPosition, - // 'RemoveCollateral', - // vault, - // morphoBlueMarket, - // assetAmount, - // event, - // ); - // } + createMorphoBluePositionChange( + event.params.externalPosition, + 'RemoveCollateral', + vault, + morphoBlueMarket, + assetAmount, + event, + ); + } - // if (actionId == MorphoBlueActionId.Borrow) { - // let decoded = ethereum.decode('(bytes32,uint256)', event.params.actionArgs); + if (actionId == MorphoBlueActionId.Borrow) { + let decoded = ethereum.decode('(bytes32,uint256)', event.params.actionArgs); - // if (decoded == null) { - // return; - // } + if (decoded == null) { + return; + } - // let tuple = decoded.toTuple(); + let tuple = decoded.toTuple(); - // let marketId = tuple[0].toBytes(); + let marketId = tuple[0].toBytes(); - // let morphoBlueMarket = ensureMorphoBlueMarket(event.address, marketId); - // let borrowToken = ensureAsset(Address.fromString(morphoBlueMarket.loanToken)); + let morphoBlueMarket = ensureMorphoBlueMarket(event.address, marketId); + let borrowToken = ensureAsset(Address.fromString(morphoBlueMarket.loanToken)); - // let amount = toBigDecimal(tuple[1].toBigInt(), borrowToken.decimals); + let amount = toBigDecimal(tuple[1].toBigInt(), borrowToken.decimals); - // let assetAmount = createAssetAmount(borrowToken, amount, denominationAsset, 'morpho-blue-borrow', event); + let assetAmount = createAssetAmount(borrowToken, amount, denominationAsset, 'morpho-blue-borrow', event); - // createMorphoBluePositionChange( - // event.params.externalPosition, - // 'Borrow', - // vault, - // morphoBlueMarket, - // assetAmount, - // event, - // ); - // } + createMorphoBluePositionChange( + event.params.externalPosition, + 'Borrow', + vault, + morphoBlueMarket, + assetAmount, + event, + ); + } - // if (actionId == MorphoBlueActionId.Repay) { - // let decoded = ethereum.decode('(bytes32,uint256)', event.params.actionArgs); + if (actionId == MorphoBlueActionId.Repay) { + let decoded = ethereum.decode('(bytes32,uint256)', event.params.actionArgs); - // if (decoded == null) { - // return; - // } + if (decoded == null) { + return; + } - // let tuple = decoded.toTuple(); + let tuple = decoded.toTuple(); - // let marketId = tuple[0].toBytes(); + let marketId = tuple[0].toBytes(); - // let morphoBlueMarket = ensureMorphoBlueMarket(event.address, marketId); - // let borrowToken = ensureAsset(Address.fromString(morphoBlueMarket.loanToken)); + let morphoBlueMarket = ensureMorphoBlueMarket(event.address, marketId); + let borrowToken = ensureAsset(Address.fromString(morphoBlueMarket.loanToken)); - // let amount = toBigDecimal(tuple[1].toBigInt(), borrowToken.decimals); + let amount = toBigDecimal(tuple[1].toBigInt(), borrowToken.decimals); - // let assetAmount = createAssetAmount(borrowToken, amount, denominationAsset, 'morpho-blue-repay', event); + let assetAmount = createAssetAmount(borrowToken, amount, denominationAsset, 'morpho-blue-repay', event); - // createMorphoBluePositionChange( - // event.params.externalPosition, - // 'Repay', - // vault, - // morphoBlueMarket, - // assetAmount, - // event, - // ); - // } - // return; - // } + createMorphoBluePositionChange( + event.params.externalPosition, + 'Repay', + vault, + morphoBlueMarket, + assetAmount, + event, + ); + } + return; + } if (type.label == 'ALICE') { if (actionId == AliceActionId.PlaceOrder) { diff --git a/subgraphs/enzyme-core/mappings/v4/MorphoBluePositionLib.ts b/subgraphs/enzyme-core/mappings/v4/MorphoBluePositionLib.ts index 12a5a0e7..de0e0eaf 100644 --- a/subgraphs/enzyme-core/mappings/v4/MorphoBluePositionLib.ts +++ b/subgraphs/enzyme-core/mappings/v4/MorphoBluePositionLib.ts @@ -1,13 +1,13 @@ -// import { ensureMorphoBlueMarket } from '../../entities/MorphoBluePosition'; -// import { MarketIdAdded, MarketIdRemoved } from '../../generated/contracts/MorphoBluePositionLib4Events'; +import { ensureMorphoBlueMarket } from '../../entities/MorphoBluePosition'; +import { MarketIdAdded, MarketIdRemoved } from '../../generated/contracts/MorphoBluePositionLib4Events'; -// export function handleMarketIdAdded(event: MarketIdAdded): void { -// let market = ensureMorphoBlueMarket(event.address, event.params.marketId); -// market.removed = false; -// market.save(); -// } -// export function handleMarketIdRemoved(event: MarketIdRemoved): void { -// let market = ensureMorphoBlueMarket(event.address, event.params.marketId); -// market.removed = true; -// market.save(); -// } +export function handleMarketIdAdded(event: MarketIdAdded): void { + let market = ensureMorphoBlueMarket(event.address, event.params.marketId); + market.removed = false; + market.save(); +} +export function handleMarketIdRemoved(event: MarketIdRemoved): void { + let market = ensureMorphoBlueMarket(event.address, event.params.marketId); + market.removed = true; + market.save(); +} diff --git a/subgraphs/enzyme-core/mappings/v4/VaultLib.ts b/subgraphs/enzyme-core/mappings/v4/VaultLib.ts index ea3230f7..30c6e57f 100644 --- a/subgraphs/enzyme-core/mappings/v4/VaultLib.ts +++ b/subgraphs/enzyme-core/mappings/v4/VaultLib.ts @@ -61,7 +61,7 @@ import { trackedAssetRemoved } from '../../entities/TrackedAssetRemoved'; import { usePendleV2Position } from '../../entities/PendleV2Position'; import { useGMXV2LeverageTradingPosition } from '../../entities/GMXV2LeverageTradingPosition'; import { useAlicePosition } from '../../entities/AlicePosition'; -// import { useMorphoBluePosition } from '../../entities/MorphoBluePosition'; +import { useMorphoBluePosition } from '../../entities/MorphoBluePosition'; export function handleTransfer(event: Transfer): void { // only track deposit balance if not zero address @@ -397,11 +397,11 @@ export function handleExternalPositionAdded(event: ExternalPositionAdded): void pp.save(); } - // if (type.label == 'MORPHO_BLUE') { - // let mbp = useMorphoBluePosition(event.params.externalPosition.toHex()); - // mbp.active = true; - // mbp.save(); - // } + if (type.label == 'MORPHO_BLUE') { + let mbp = useMorphoBluePosition(event.params.externalPosition.toHex()); + mbp.active = true; + mbp.save(); + } if (type.label == 'ALICE') { let ap = useAlicePosition(event.params.externalPosition.toHex()); @@ -509,11 +509,11 @@ export function handleExternalPositionRemoved(event: ExternalPositionRemoved): v ap.save(); } - // if (type.label == 'MORPHO_BLUE') { - // let mbp = useMorphoBluePosition(event.params.externalPosition.toHex()); - // mbp.active = false; - // mbp.save(); - // } + if (type.label == 'MORPHO_BLUE') { + let mbp = useMorphoBluePosition(event.params.externalPosition.toHex()); + mbp.active = false; + mbp.save(); + } let activity = new ExternalPositionRemovedEvent(uniqueEventId(event)); activity.timestamp = event.block.timestamp.toI32(); diff --git a/subgraphs/enzyme-core/schema.graphql b/subgraphs/enzyme-core/schema.graphql index d091c060..565ec690 100644 --- a/subgraphs/enzyme-core/schema.graphql +++ b/subgraphs/enzyme-core/schema.graphql @@ -1652,44 +1652,45 @@ type PendleV2PositionChange implements Activity & VaultActivity & ExternalPositi activityType: ActivityType! } -# type MorphoBluePosition implements ExternalPosition @entity { -# id: ID! -# vault: Vault! -# type: ExternalPositionType! -# active: Boolean! -# changes: [ExternalPositionChange!]! @derivedFrom(field: "externalPosition") -# } - -# type MorphoBlueMarket @entity { -# id: ID! -# marketId: Bytes! -# morpheBluePosition: MorphoBluePosition! -# loanToken: Asset! -# collateralToken: Asset! -# removed: Boolean! -# } - -# enum MorphoBluePositionChangeType { -# Lend -# Redeem -# AddCollateral -# RemoveCollateral -# Borrow -# Repay -# } - -# type MorphoBluePositionChange implements Activity & VaultActivity & ExternalPositionChange @entity { -# id: ID! -# vault: Vault! -# timestamp: Int! -# externalPosition: ExternalPosition! -# morphoBluePositionChangeType: MorphoBluePositionChangeType! -# market: MorphoBlueMarket! -# assetAmount: AssetAmount! -# activityCounter: Int! -# activityCategories: [ActivityCategory!]! -# activityType: ActivityType! -# } +type MorphoBluePosition implements ExternalPosition @entity { + id: ID! + vault: Vault! + type: ExternalPositionType! + active: Boolean! + markets: [MorphoBlueMarket!]! @derivedFrom(field: "morphoBluePosition") + changes: [ExternalPositionChange!]! @derivedFrom(field: "externalPosition") +} + +type MorphoBlueMarket @entity { + id: ID! + marketId: Bytes! + morphoBluePosition: MorphoBluePosition! + loanToken: Asset! + collateralToken: Asset! + removed: Boolean! +} + +enum MorphoBluePositionChangeType { + Lend + Redeem + AddCollateral + RemoveCollateral + Borrow + Repay +} + +type MorphoBluePositionChange implements Activity & VaultActivity & ExternalPositionChange @entity { + id: ID! + vault: Vault! + timestamp: Int! + externalPosition: ExternalPosition! + morphoBluePositionChangeType: MorphoBluePositionChangeType! + market: MorphoBlueMarket! + assetAmount: AssetAmount! + activityCounter: Int! + activityCategories: [ActivityCategory!]! + activityType: ActivityType! +} type StakeWiseStakingPosition implements ExternalPosition @entity { id: ID! diff --git a/subgraphs/enzyme-core/subgraph.config.ts b/subgraphs/enzyme-core/subgraph.config.ts index 2172a8ec..2a8965a6 100644 --- a/subgraphs/enzyme-core/subgraph.config.ts +++ b/subgraphs/enzyme-core/subgraph.config.ts @@ -59,7 +59,7 @@ export interface Variables { grtAddress: string; lusdAddress: string; compAddress: string; - // morphoBlueAddress: string; + morphoBlueAddress: string; aliceOrderManager: string; }; } @@ -174,7 +174,7 @@ export const configure: Configurator = (variables) => { IPendleV2Market: 'abis/external/IPendleV2Market.json', MaplePool: 'abis/external/MaplePool.json', MapleRewards: 'abis/external/MapleRewards.json', - // MorphoBlue: 'abis/external/MorphoBlue.json', + MorphoBlue: 'abis/external/MorphoBlue.json', NonfungiblePositionManager: 'abis/external/NonfungiblePositionManager.json', TheGraphStaking: 'abis/external/TheGraphStaking.json', UniswapV3Factory: 'abis/external/UniswapV3Factory.json', @@ -200,7 +200,7 @@ export const configure: Configurator = (variables) => { abis.IPendleV2Market.getFunction('getRewardTokens'), abis.MaplePool.getFunction('liquidityAsset'), abis.MapleRewards.getFunction('stakingToken'), - // abis.MorphoBlue.getFunction('idToMarketParams'), + abis.MorphoBlue.getFunction('idToMarketParams'), abis.NonfungiblePositionManager.getFunction('factory'), abis.NonfungiblePositionManager.getFunction('positions'), abis.NonfungiblePositionManager.getFunction('tokenURI'), diff --git a/subgraphs/enzyme-core/templates/addresses.ts b/subgraphs/enzyme-core/templates/addresses.ts index 22cba905..f5946697 100644 --- a/subgraphs/enzyme-core/templates/addresses.ts +++ b/subgraphs/enzyme-core/templates/addresses.ts @@ -254,7 +254,7 @@ export let lusdAddress = Address.fromString('{{external.lusdAddress}}'); export let compAddress = Address.fromString('{{external.compAddress}}'); -// export let morphoBlueAddress = Address.fromString('{{external.morphoBlueAddress}}'); +export let morphoBlueAddress = Address.fromString('{{external.morphoBlueAddress}}'); export let aliceOrderManagerAddress = Address.fromString('{{external.aliceOrderManager}}'); diff --git a/subgraphs/enzyme-core/utils/actionId.ts b/subgraphs/enzyme-core/utils/actionId.ts index 5edbc167..17d5eaf5 100644 --- a/subgraphs/enzyme-core/utils/actionId.ts +++ b/subgraphs/enzyme-core/utils/actionId.ts @@ -118,14 +118,14 @@ export enum GMXV2LeverageTradingActionId { Sweep = 5, } -// export enum MorphoBlueActionId { -// Lend = 0, -// Redeem = 1, -// AddCollateral = 2, -// RemoveCollateral = 3, -// Borrow = 4, -// Repay = 5, -// } +export enum MorphoBlueActionId { + Lend = 0, + Redeem = 1, + AddCollateral = 2, + RemoveCollateral = 3, + Borrow = 4, + Repay = 5, +} export enum AliceActionId { PlaceOrder = 0,