Skip to content

Commit

Permalink
aptos chain integration
Browse files Browse the repository at this point in the history
  • Loading branch information
Sonmezturk committed Feb 15, 2024
1 parent f8cac0b commit 59de475
Show file tree
Hide file tree
Showing 16 changed files with 703 additions and 141 deletions.
440 changes: 299 additions & 141 deletions package-lock.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
"@solana/web3.js": "^1.30.2",
"@supercharge/promise-pool": "^2.4.0",
"@taquito/taquito": "^14.1.0",
"aptos": "^1.21.0",
"bignumber.js": "^9.1.0",
"dotenv": "^16.0.3",
"ethers": "^5.7.2",
Expand Down
1 change: 1 addition & 0 deletions src/app.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,5 +58,6 @@ nodeUrls['BASE_NODE_URL'] = process.env['BASE_NODE_URL'];
nodeUrls['CORE_NODE_URL'] = process.env['CORE_NODE_URL'];
nodeUrls['LINEA_NODE_URL'] = process.env['LINEA_NODE_URL'];
nodeUrls['WAX_NODE_URL'] = process.env['WAX_NODE_URL'];
nodeUrls['APTOS_NODE_URL'] = process.env['APTOS_NODE_URL'];

export { config, nodeUrls };
23 changes: 23 additions & 0 deletions src/constants/tokens/aptos/core.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"APT": "0x1::aptos_coin::AptosCoin",
"USDC": "0x5e156f1207d0ebfa19a9eeff00d62a282278fb8719f4fab3a586a0a2c0fffbea::coin::T",
"USDT": "0xa2eda21a58856fda86451436513b867c97eecb4ba099da5775520e0f7492e852::coin::T",
"WBTC": "0xae478ff7d83ed072dbc5e264250e67ef58f57c99d89b447efd8a0a2e8b2be76e::coin::T",
"ETH": "0xcc8a89c8dce9693d354449f1f73e60e14e347417854f029db5bc8e7454008abb::coin::T",
"USDC_1": "0xc91d826e29a3183eb3b6f6aa3a722089fdffb8e9642b94c5fcd4c48d035c0080::coin::T",
"USDA": "0x1000000fa32d122c18a6a31c009ce5e71674f22d06a581bb0a15575e6addadcc::usda::USDA",
"USDC_2": "0xf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa::asset::USDC",
"USDT_2": "0xf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa::asset::USDT",
"WETH": "0xf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa::asset::WETH",
"SOL": "0xdd89c0e695df0692205912fb69fc290418bed0dbe6e4573d744a6d5e6bab6c13::coin::T",
"ST_APT": "0x84d7aeef42d38a5ffc3ccef853e1b82e4958659d16a7de736a29c55fbbeb0114::staked_aptos_coin::StakedAptosCoin",
"ST_APT2": "0xd11107bdf0d6d7040c6c0bfbdecb6545191fdf13e8d8d259952f53e1713f61b5::staked_coin::StakedAptos",
"CELER_BNB": "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::BnbCoin",
"CELER_BUSD": "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::BusdCoin",
"CELER_USDC": "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::UsdcCoin",
"CELER_USDT": "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::UsdtCoin",
"CELER_DAI": "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::DaiCoin",
"CELER_ETH": "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::WethCoin",
"CELER_WBTC": "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::WbtcCoin",
"amAPT": "0x111ae3e5bc816a5e63c2da97d0aa3886519e0cd5e4b046659fa35796bd11542a::amapt_token::AmnisApt"
}
19 changes: 19 additions & 0 deletions src/factory/providers/aptos/amnis/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { ITvlParams, ITvlReturn } from '../../../../interfaces/ITvl';

async function tvl(params: ITvlParams): Promise<Partial<ITvlReturn>> {
const { block, chain, provider, web3 } = params;
const {
data: { supply },
} = (
await web3.eth.query(
'/accounts/0x111ae3e5bc816a5e63c2da97d0aa3886519e0cd5e4b046659fa35796bd11542a/resource/0x1::coin::CoinInfo%3C0x111ae3e5bc816a5e63c2da97d0aa3886519e0cd5e4b046659fa35796bd11542a::amapt_token::AmnisApt%3E',
)
).data;

return {
balances: {
'0x1::aptos_coin::aptoscoin': supply.vec[0].integer.vec[0].value,
},
};
}
export { tvl };
29 changes: 29 additions & 0 deletions src/factory/providers/aptos/aries/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { ITvlParams, ITvlReturn } from '../../../../interfaces/ITvl';

async function tvl(params: ITvlParams): Promise<Partial<ITvlReturn>> {
const { block, chain, provider, web3 } = params;
const balances = {};
const resourcesCache = await web3.eth.getResources(
'0x9770fa9c725cbd97eb50b2be5f7416efdfd1f1554beb0750d4dae4c64e860da3',
);
const coinContainers = resourcesCache
.filter((token) =>
token.type.includes(
'0x9770fa9c725cbd97eb50b2be5f7416efdfd1f1554beb0750d4dae4c64e860da3::reserve::ReserveCoinContainer',
),
)
.map((i) => ({
lamports: i.data.underlying_coin.value,
tokenAddress: i.type.slice(
i.type.indexOf('<') + 1,
i.type.lastIndexOf('>'),
),
}));
coinContainers.forEach((token) => {
balances[token.tokenAddress.toLowerCase()] = token.lamports;
});
return {
balances,
};
}
export { tvl };
25 changes: 25 additions & 0 deletions src/factory/providers/aptos/liquidswap/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { ITvlParams, ITvlReturn } from '../../../../interfaces/ITvl';

async function tvl(params: ITvlParams): Promise<Partial<ITvlReturn>> {
const { block, chain, provider, web3 } = params;
const balances = await web3.eth.dexExport({
account:
'0x05a97986a9d031c4567e15b797be516910cfcb4156312482efc6a19c0a30c948',
poolStr: 'liquidity_pool::LiquidityPool',
});
const liqPool = await web3.eth.dexExport({
account:
'0x61d2c22a6cb7831bee0f48363b0eec92369357aece0d1142062f7d5d85c7bef8',
poolStr: 'liquidity_pool::LiquidityPool',
});
Object.entries(liqPool).forEach(([address, balance]) => {
if (!balances[address]) {
balances[address] = balance;
} else balances[address] = balances[address].plus(balance);
});
return {
balances,
};
}

export { tvl };
19 changes: 19 additions & 0 deletions src/factory/providers/aptos/pancakeswap/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import formatter from '../../../../util/formatter';
import { ITvlParams, ITvlReturn } from '../../../../interfaces/ITvl';

async function tvl(params: ITvlParams): Promise<Partial<ITvlReturn>> {
const { block, chain, provider, web3 } = params;
const balances = await web3.eth.dexExport({
account:
'0xc7efb4076dbe143cbcd98cfaaa929ecfc8f299203dfff63b95ccb6bfe19850fa',
poolStr: 'swap::TokenPairReserve',
token0Reserve: (i) => i.data.reserve_x,
token1Reserve: (i) => i.data.reserve_y,
});
formatter.convertBalancesToFixed(balances);
return {
balances,
};
}

export { tvl };
19 changes: 19 additions & 0 deletions src/factory/providers/aptos/sushiswap/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import formatter from '../../../../util/formatter';
import { ITvlParams, ITvlReturn } from '../../../../interfaces/ITvl';

async function tvl(params: ITvlParams): Promise<Partial<ITvlReturn>> {
const { block, chain, provider, web3 } = params;
const balances = await web3.eth.dexExport({
account:
'0x31a6675cbe84365bf2b0cbce617ece6c47023ef70826533bde5203d32171dc3c',
poolStr: 'swap::TokenPairReserve',
token0Reserve: (i) => i.data.reserve_x,
token1Reserve: (i) => i.data.reserve_y,
});
formatter.convertBalancesToFixed(balances);
return {
balances,
};
}

export { tvl };
115 changes: 115 additions & 0 deletions src/factory/providers/aptos/thala/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
import formatter from '../../../../util/formatter';
import { ITvlParams, ITvlReturn } from '../../../../interfaces/ITvl';
import BigNumber from 'bignumber.js';
const TAHA_SWAP =
'0x48271d39d0b05bd6efca2278f22277d6fcc375504f9839fd73f74ace240861af';
const MOVE_DOLLAR =
'0x6f986d146e4a90b828d8c12c14b6f4e003fdff11a8eecceceb63744363eaac01';
const LSD_ACCOUNT =
'0xfaf4e633ae9eb31366c9ca24214231760926576c7b625313b3688b5e900731f6';

function sum(balances, result) {
Object.entries(result).forEach(([address, balance]) => {
if (!balances[address]) {
balances[address] = balance;
} else balances[address] = balances[address].plus(balance);
});
}
async function tvl(params: ITvlParams): Promise<Partial<ITvlReturn>> {
const balances = {};
const swap = await thalaSwap(params);
const cdp = await thalaCDP(params);
const lsd = await thalaLSD(params);

sum(balances, swap.balances);
sum(balances, cdp.balances);
sum(balances, lsd.balances);
formatter.convertBalancesToFixed(balances);
return { balances };
}

async function thalaSwap(params: ITvlParams): Promise<Partial<ITvlReturn>> {
const { web3 } = params;

const balances = {};
const resources = await web3.eth.getResources(TAHA_SWAP);

const pools = resources
.filter(
(resource) =>
resource.type.includes(`${TAHA_SWAP}::stable_pool::StablePool<`) ||
resource.type.includes(`${TAHA_SWAP}::weighted_pool::WeightedPool<`),
)
.map((pool) => ({
assets: [
pool.data.asset_0,
pool.data.asset_1,
pool.data.asset_2,
pool.data.asset_3,
],
asset_types: pool.type.split('<')[1].replace('>', '').split(', '),
}));

pools.forEach(({ assets, asset_types }) => {
assets.forEach((asset, index) => {
if (!asset_types[index]?.includes('base_pool::Null'))
formatter.merge(balances, asset_types[index], asset.value);
});
});

return { balances };
}

async function thalaCDP(params: ITvlParams): Promise<Partial<ITvlReturn>> {
const { web3 } = params;

const balances = {};
const resources = await web3.eth.getResources(MOVE_DOLLAR);
const vaults = resources
.filter((resource) =>
resource.type.includes(`${MOVE_DOLLAR}::vault::Vaults<`),
)
.map((vault) => ({
total_collateral: vault.data.total_collateral,
asset_type: vault.type.split('<')[1].replace('>', '').split(', '),
}));

const psms = resources
.filter((resource) => resource.type.includes(`${MOVE_DOLLAR}::psm::PSM<`))
.map((psm) => ({
total_collateral: psm.data.coin.value,
asset_type: psm.type.split('<')[1].replace('>', '').split(', '),
}));

vaults.forEach(({ asset_type, total_collateral }) => {
formatter.merge(balances, asset_type[0], total_collateral);
});
psms.forEach(({ asset_type, total_collateral }) => {
formatter.merge(balances, asset_type[0], total_collateral);
});

return { balances };
}

async function thalaLSD(
params: ITvlParams,
): Promise<{ balances: { '0x1::aptos_coin::aptoscoin': BigNumber } }> {
const { web3 } = params;

const {
data: { supply },
} = (
await web3.eth.query(
`/accounts/${LSD_ACCOUNT}/resource/0x1::coin::CoinInfo%3C${LSD_ACCOUNT}::staking::ThalaAPT%3E`,
)
).data;

return {
balances: {
'0x1::aptos_coin::aptoscoin': new BigNumber(
supply.vec[0].integer.vec[0].value / 1e8,
),
},
};
}
export { tvl };
19 changes: 19 additions & 0 deletions src/factory/providers/aptos/tortuga/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { ITvlParams, ITvlReturn } from '../../../../interfaces/ITvl';

async function tvl(params: ITvlParams): Promise<Partial<ITvlReturn>> {
const { block, chain, provider, web3 } = params;
const {
data: { supply },
} = (
await web3.eth.query(
'/accounts/0x84d7aeef42d38a5ffc3ccef853e1b82e4958659d16a7de736a29c55fbbeb0114/resource/0x1::coin::CoinInfo%3C0x84d7aeef42d38a5ffc3ccef853e1b82e4958659d16a7de736a29c55fbbeb0114::staked_aptos_coin::StakedAptosCoin%3E',
)
).data;

return {
balances: {
'0x1::aptos_coin::aptoscoin': supply.vec[0].integer.vec[0].value,
},
};
}
export { tvl };
4 changes: 4 additions & 0 deletions src/util/data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,10 @@ const data = {
prefix: 'core_',
delay: 0,
},
aptos: {
prefix: 'apt_',
delay: 4600,
},
},
FILTERS: {
MarketCapInFiat: 'marketCapInFiat',
Expand Down
8 changes: 8 additions & 0 deletions src/util/formatter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,13 @@ function sum(balanceArray) {
return balances;
}

function merge(balances, token, reserve) {
if (!balances[token.toLowerCase()]) {
balances[token.toLowerCase()] = new BigNumber(reserve);
} else
balances[token.toLowerCase()] = balances[token.toLowerCase()].plus(reserve);
}

function sumMultiBalanceOf(balances, results, chain = '', provider = '') {
try {
if (results.output) {
Expand Down Expand Up @@ -145,6 +152,7 @@ export default {
decodeResult,
convertBalancesToFixed,
convertBalancesToBigNumber,
merge,
sum,
sumMultiBalanceOf,
swapTokenAddresses,
Expand Down
Loading

0 comments on commit 59de475

Please sign in to comment.