From cd434e267a9d74fa35265ffa10c900607e8a4c55 Mon Sep 17 00:00:00 2001 From: Shubham Goyal Date: Tue, 3 Jun 2025 14:19:28 +0530 Subject: [PATCH 1/2] Add Moar Market adapter --- src/adaptors/moar-market/index.js | 69 +++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/adaptors/moar-market/index.js diff --git a/src/adaptors/moar-market/index.js b/src/adaptors/moar-market/index.js new file mode 100644 index 0000000000..51bd1fe339 --- /dev/null +++ b/src/adaptors/moar-market/index.js @@ -0,0 +1,69 @@ +const axios = require('axios'); +const sdk = require('@defillama/sdk'); + +const MOAR_APP_URL = 'https://app.moar.market'; +const MOAR_ADDRESS = "0xa3afc59243afb6deeac965d40b25d509bb3aebc12f502b8592c283070abc2e07"; + +async function apy() { + const allPoolsResponse = await function_view({ + functionStr: `${MOAR_ADDRESS}::pool::get_all_pools`, + type_arguments: [], + args: [], + }) + + const pools = []; + for (const poolData of allPoolsResponse) { + const underlyingAsset = poolData.underlying_asset.inner; + const faSymbol = await function_view({ + functionStr: "0x1::fungible_asset::symbol", + type_arguments: ["0x1::fungible_asset::Metadata"], + args: [underlyingAsset], + }) + + pools.push({ + pool: poolData.name, + chain: 'aptos', + project: 'moar-market', + apyBase: (poolData.interest_rate / 1e8 * (1 - poolData.fee_on_interest_bps / 1e4)) * 100, + apyReward: null, + apyBaseBorrow: poolData.interest_rate / 1e8 * 100, + apyRewardBorrow: null, + totalSupplyUsd: await getUSDValue(poolData.total_deposited, underlyingAsset), + totalBorrowUsd: await getUSDValue(poolData.total_borrows, underlyingAsset), + rewardTokens: [], + symbol: faSymbol, + tvlUsd: await getUSDValue(poolData.total_deposited - poolData.total_borrows, underlyingAsset), + underlyingTokens: [poolData.underlying_asset.inner], + url: `${MOAR_APP_URL}/lend/${faSymbol.toLowerCase()}`, + }) + } + + return pools; +} + +async function getUSDValue(amount, asset) { + const chainApi = new sdk.ChainApi({ chain: 'aptos' }) + chainApi.addToken(asset, amount) + const usdValue = await chainApi.getUSDValue() + return usdValue +} + +async function function_view({ functionStr, type_arguments = [], args = [], ledgerVersion = undefined }) { + let path = `https://api.mainnet.aptoslabs.com/v1/view` + if (ledgerVersion !== undefined) path += `?ledger_version=${ledgerVersion}` + const response = await axios.post(path, + { "function": functionStr, "type_arguments": type_arguments, arguments: args }, + { + headers: { + 'Content-Type': 'application/json', + }, + } + ) + return response.data.length === 1 ? response.data[0] : response.data +} + +module.exports = { + timetravel: true, + apy: apy, + url: `${MOAR_APP_URL}/lend`, +}; From 9616aa3474ea71fc716361b3961daaa68c3f194d Mon Sep 17 00:00:00 2001 From: Shubham Goyal Date: Wed, 4 Jun 2025 15:05:27 +0530 Subject: [PATCH 2/2] Update Moar Market indexer - get data from aptos resources --- src/adaptors/moar-market/index.js | 45 ++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/src/adaptors/moar-market/index.js b/src/adaptors/moar-market/index.js index 51bd1fe339..57409f746b 100644 --- a/src/adaptors/moar-market/index.js +++ b/src/adaptors/moar-market/index.js @@ -3,39 +3,47 @@ const sdk = require('@defillama/sdk'); const MOAR_APP_URL = 'https://app.moar.market'; const MOAR_ADDRESS = "0xa3afc59243afb6deeac965d40b25d509bb3aebc12f502b8592c283070abc2e07"; +const MOAR_PACKAGE_OWNER_ADDRESS = "0x37e9ce6910ceadd16b0048250a33dac6342549acf31387278ea0f95c9057f110"; async function apy() { - const allPoolsResponse = await function_view({ - functionStr: `${MOAR_ADDRESS}::pool::get_all_pools`, - type_arguments: [], - args: [], - }) + const poolsConfig = await getAptosResource(MOAR_PACKAGE_OWNER_ADDRESS, `${MOAR_ADDRESS}::pool::PoolConfigs`) + const poolAddresses = poolsConfig['data']['all_pools']['inline_vec'].map(x => x['inner']) const pools = []; - for (const poolData of allPoolsResponse) { + let poolIndex = 0; + for (const poolAddress of poolAddresses) { + const poolData = (await getAptosResource(poolAddress, `${MOAR_ADDRESS}::pool::Pool`)).data const underlyingAsset = poolData.underlying_asset.inner; - const faSymbol = await function_view({ - functionStr: "0x1::fungible_asset::symbol", - type_arguments: ["0x1::fungible_asset::Metadata"], - args: [underlyingAsset], - }) + + const [faSymbol, interestRateResponse] = await Promise.all([ + aptosView({ + functionStr: "0x1::fungible_asset::symbol", + type_arguments: ["0x1::fungible_asset::Metadata"], + args: [underlyingAsset]}), + aptosView({ + functionStr: `${MOAR_ADDRESS}::pool::get_interest_rate`, + type_arguments: [], + args: [poolIndex.toString()], + })]) + const interestRate = interestRateResponse[0]; pools.push({ - pool: poolData.name, + pool: `${poolAddress}_aptos`, chain: 'aptos', project: 'moar-market', - apyBase: (poolData.interest_rate / 1e8 * (1 - poolData.fee_on_interest_bps / 1e4)) * 100, + apyBase: (interestRate / 1e8 * (1 - poolData.fee_on_interest_bps / 1e4)) * 100, apyReward: null, - apyBaseBorrow: poolData.interest_rate / 1e8 * 100, + apyBaseBorrow: interestRate / 1e8 * 100, apyRewardBorrow: null, totalSupplyUsd: await getUSDValue(poolData.total_deposited, underlyingAsset), totalBorrowUsd: await getUSDValue(poolData.total_borrows, underlyingAsset), rewardTokens: [], symbol: faSymbol, tvlUsd: await getUSDValue(poolData.total_deposited - poolData.total_borrows, underlyingAsset), - underlyingTokens: [poolData.underlying_asset.inner], + underlyingTokens: [underlyingAsset], url: `${MOAR_APP_URL}/lend/${faSymbol.toLowerCase()}`, }) + poolIndex++; } return pools; @@ -48,7 +56,12 @@ async function getUSDValue(amount, asset) { return usdValue } -async function function_view({ functionStr, type_arguments = [], args = [], ledgerVersion = undefined }) { +async function getAptosResource(address, resource) { + const response = await axios.get(`https://api.mainnet.aptoslabs.com/v1/accounts/${address}/resource/${resource}`) + return response.data +} + +async function aptosView({ functionStr, type_arguments = [], args = [], ledgerVersion = undefined }) { let path = `https://api.mainnet.aptoslabs.com/v1/view` if (ledgerVersion !== undefined) path += `?ledger_version=${ledgerVersion}` const response = await axios.post(path,