@aurigami/sdk 1.22.0 → 1.23.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.esm.js","sources":["../src/consts/constants.ts","../src/consts/decimals.ts","../src/consts/symbols.ts","../src/helpers/aurora-api-helpers.ts","../src/helpers/graphql-helpers.ts","../src/helpers/helpers.ts","../src/entities/BlockchainEntity.ts","../src/entities/auriEnv.ts","../src/entities/token.ts","../src/entities/tokenAmount.ts","../src/consts/dummy.ts","../src/helpers/aurigami-api.ts","../src/helpers/kyber-aggregator-api.ts","../src/helpers/one-inch-aggregator-api.ts","../src/helpers/priceFetcher.ts","../src/helpers/transfer-event-query.ts","../src/helpers/historicalPriceFetcher.ts","../src/interactors/Airdrop.ts","../src/interactors/MoneyMarket.ts","../src/interactors/Papermill.ts","../src/interactors/PlyGame.ts","../src/interactors/Pulp.ts","../src/interactors/Referral.ts","../src/interactors/Staking.ts","../src/types/index.ts","../src/interactors/Multicall.ts","../src/interactors/misc.ts","../src/interactors/PlyTokenLock.ts","../src/helpers/notification-api.ts","../src/SDK.ts","../src/index.ts"],"sourcesContent":["import BigNumber from 'bignumber.js';\nimport { BigNumber as BN } from 'ethers';\nimport { MAINNET_ADDRESSES } from './deployments';\nexport const dummyAddress: string = '0xDEADbeEfEEeEEEeEEEeEEeeeeeEeEEeeeeEEEEeE';\nexport const ETHAddress: string = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE';\n\nexport const AURORA_CHAINID = 1313161554;\n\nexport const DECIMAL_PRECISION = 10;\n\nexport const AURORA_PLUS_API_PREFIX = 'https://aurora.plus/api/wallet/';\n\nexport const networkAddresses = {\n auTokens: [\n {\n name: 'auUSDC',\n address: MAINNET_ADDRESSES.auTokens.USDC.toLowerCase(),\n underlying: '0xb12bfca5a55806aaf64e99521918a4bf0fc40802'.toLowerCase(),\n },\n {\n name: 'auETH',\n address: MAINNET_ADDRESSES.auTokens.ETH.toLowerCase(),\n underlying: ETHAddress.toLowerCase(),\n },\n {\n name: 'auWBTC',\n address: MAINNET_ADDRESSES.auTokens.WBTC.toLowerCase(),\n underlying: '0xf4eb217ba2454613b15dbdea6e5f22276410e89e'.toLowerCase(),\n },\n {\n name: 'auUSDT',\n address: MAINNET_ADDRESSES.auTokens.USDT.toLowerCase(),\n underlying: '0x4988a896b1227218e4a686fde5eabdcabd91571f'.toLowerCase(),\n },\n {\n name: 'auDAI',\n address: MAINNET_ADDRESSES.auTokens.DAI.toLowerCase(),\n underlying: '0xe3520349f477a5f6eb06107066048508498a291b'.toLowerCase(),\n },\n {\n name: 'auWNEAR',\n address: MAINNET_ADDRESSES.auTokens.WNEAR.toLowerCase(),\n underlying: '0xC42C30aC6Cc15faC9bD938618BcaA1a1FaE8501d'.toLowerCase(),\n },\n {\n name: 'auSTNEAR',\n address: MAINNET_ADDRESSES.auTokens.STNEAR.toLowerCase(),\n underlying: '0x07F9F7f963C5cD2BBFFd30CcfB964Be114332E30'.toLowerCase(),\n },\n {\n name: 'auAURORA',\n address: MAINNET_ADDRESSES.auTokens.AURORA.toLowerCase(),\n underlying: '0x8bec47865ade3b172a928df8f990bc7f2a3b9f79'.toLowerCase(),\n },\n {\n name: 'auTRI',\n address: MAINNET_ADDRESSES.auTokens.TRI.toLowerCase(),\n underlying: '0xFa94348467f64D5A457F75F8bc40495D33c65aBB'.toLowerCase(),\n },\n {\n name: 'auPLY',\n address: MAINNET_ADDRESSES.auTokens.PLY.toLowerCase(),\n underlying: '0x09c9d464b58d96837f8d8b6f4d9fe4ad408d3a4f'.toLowerCase(),\n },\n {\n name: 'auUSN',\n address: MAINNET_ADDRESSES.auTokens.USN.toLowerCase(),\n underlying: '0x5183e1b1091804bc2602586919e6880ac1cf2896'.toLowerCase(),\n },\n {\n name: 'auNEARX',\n address: MAINNET_ADDRESSES.auTokens.NEARX.toLowerCase(),\n underlying: '0xb39eeb9e168ef6c639f5e282fef1f6bc4dcae375'.toLowerCase(),\n },\n ],\n misc: {\n COMPTROLLER: MAINNET_ADDRESSES.comptroller.toLowerCase(),\n DEPRECATED_OLD_ORACLE: MAINNET_ADDRESSES.oracle.toLowerCase(),\n PYTH_ORACLE: MAINNET_ADDRESSES.pythOracle.toLowerCase(),\n AURIFAIRLAUNCH: MAINNET_ADDRESSES.fairLaunch.toLowerCase(),\n AURILENS: MAINNET_ADDRESSES.auriLens.toLowerCase(),\n ETHREPAYHELPER: MAINNET_ADDRESSES.ethRepayHelper.toLowerCase(),\n AURI_AIRDROP: MAINNET_ADDRESSES.auriAirdropMultipleRedeem.toLowerCase(),\n MULTICALL: MAINNET_ADDRESSES.multicall.toLowerCase(),\n TEAM_MULTISIG: '0x2D05FfFE70CE64c5954710D4C308dB31C8dBd8dE'.toLowerCase(),\n TEAM_MULTISIG_AURORA_PLUS: '0x31f501589c7a090bf68f2fe2687744bf9130e1ab'.toLowerCase(),\n AURORA_PLUS: '0xf075c896cbbb625e7911e284cd23ee19bdccf299'.toLowerCase(),\n PULP_CONTRACT: '0x04ac48711bcdc45b4d223fb021e09da73c71095e'.toLowerCase(),\n PLY_TOKEN_LOCK: MAINNET_ADDRESSES.plyTokenLock.toLowerCase(),\n REFERRAL: MAINNET_ADDRESSES.referralDirectory.toLowerCase(),\n REFERRAL_V2: '0xCECd147409B2d64A9A2E5418e3E471E8af19E0bd'.toLowerCase(),\n AURI_INTERNAL_LENS: MAINNET_ADDRESSES.auriInternalLens.toLowerCase(),\n PLYGAME: MAINNET_ADDRESSES.plyGame.toLowerCase(),\n },\n tokens: {\n AURORA: '0x8bec47865ade3b172a928df8f990bc7f2a3b9f79'.toLowerCase(),\n PLY: '0x09c9d464b58d96837f8d8b6f4d9fe4ad408d3a4f'.toLowerCase(),\n stNEAR: '0x07f9f7f963c5cd2bbffd30ccfb964be114332e30'.toLowerCase(),\n USDC: '0xb12bfca5a55806aaf64e99521918a4bf0fc40802'.toLowerCase(),\n WNEAR: '0xC42C30aC6Cc15faC9bD938618BcaA1a1FaE8501d'.toLowerCase(),\n TRI: '0xFa94348467f64D5A457F75F8bc40495D33c65aBB'.toLowerCase(),\n META: '0xc21ff01229e982d7c8b8691163b0a3cb8f357453'.toLowerCase(),\n PULP: MAINNET_ADDRESSES.PULP.toLowerCase(),\n PLYWNEAR: MAINNET_ADDRESSES.ply_wnear_lp.toLowerCase(),\n USN: '0x5183e1b1091804bc2602586919e6880ac1cf2896'.toLowerCase(),\n PLY_WNEAR: '0x044b6b0cd3bb13d2b9057781df4459c66781dce7'.toLowerCase(),\n WNEAR_TRI: '0x84b123875f0f36b966d0b6ca14b31121bd9676ad'.toLowerCase(),\n AURORA_WNEAR: '0x1e0e812fbcd3eb75d8562ad6f310ed94d258d008'.toLowerCase(),\n NEARX: '0xb39eeb9e168ef6c639f5e282fef1f6bc4dcae375'.toLowerCase(),\n STADER: '0x078e103d5f9629ac48b8563fa2bfcd2f6d5fde84'.toLowerCase(),\n },\n} as const;\n\nexport const DEPOSIT_ONLY_TOKENS = [\n MAINNET_ADDRESSES.auTokens.AURORA.toLowerCase(),\n MAINNET_ADDRESSES.auTokens.TRI.toLowerCase(),\n MAINNET_ADDRESSES.auTokens.PLY.toLowerCase(),\n MAINNET_ADDRESSES.auTokens.USN.toLowerCase(),\n];\n\n// All token that we can calculate the price via oracle + coingecko\nexport const PRICE_WHITELISTED = new Set([\n ...networkAddresses.auTokens.map((t) => t.underlying),\n networkAddresses.tokens.AURORA,\n networkAddresses.tokens.TRI,\n networkAddresses.tokens.META,\n networkAddresses.tokens.stNEAR,\n networkAddresses.tokens.STADER,\n]);\n\nexport const REWARD_CLAIM_START = 1651759200; // Thursday, 5 May 2022 14:00:00 UTC\n\nexport const BORROW_LIMIT_BUFFER = new BigNumber(1);\n\nexport const ONE_DAY = 86400;\nexport const ONE_WEEK = ONE_DAY * 7;\nexport const ONE_YEAR = ONE_DAY * 365;\n\nexport const PLYWNEAR_POOL_ID = 0;\nexport const PLYWNEAR_REWARD_TOKENS = [\n '0x09C9D464b58d96837f8d8b6f4d9fE4aD408d3A4f', // PLY\n '0x04Ac48711BCdc45b4d223fb021E09DA73c71095e', // PULP\n '0xC42C30aC6Cc15faC9bD938618BcaA1a1FaE8501d', // WNEAR\n '0x07F9F7f963C5cD2BBFFd30CcfB964Be114332E30', // STNEAR\n '0x8BEc47865aDe3B172A928df8f990Bc7f2A3b9f79', // AURORA\n '0xFa94348467f64D5A457F75F8bc40495D33c65aBB', // TRI\n];\n// could call RPC to get all the staking pools but it's not necessary for now\nexport const ALL_STAKING_POOLS: number[] = [PLYWNEAR_POOL_ID];\nexport const INF = BN.from(2).pow(256).sub(1);\n\nexport const AIRDROP_START_TIMESTAMP = 1649858400;\nexport const AIRDROP_END_TIMESTAMP = 1651068000;\nexport const AIRDROP_KEEP_THRESHOLD = 7 * 86400;\n\nexport const DEPOSIT_NEAR_REWARDS_PER_WEEK: { [k: string]: string } = Object.fromEntries(\n // lower case all addresses\n Object.entries({\n '0xb12bfca5a55806aaf64e99521918a4bf0fc40802': '36375', // USDC\n '0x4988a896b1227218e4a686fde5eabdcabd91571f': '14550', // USDT\n '0xf4eb217ba2454613b15dbdea6e5f22276410e89e': '3638', // WBTC\n '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE': '14550', // ETH\n '0xc42c30ac6cc15fac9bd938618bcaa1a1fae8501d': '3638', // WNEAR\n }).map(([k, v]) => [k.toLowerCase(), v])\n);\n\nexport const BORROW_NEAR_REWARDS_PER_WEEK: { [k: string]: string } = {\n // currently 0 for all markets\n};\n\nexport const HARDCODE_PRICE_TOKENS: { [k: string]: string } = Object.fromEntries([\n [networkAddresses.tokens.USN.toLowerCase(), '1'],\n]);\n\nexport const REFERRAL_CAMPAIGNS: { [k: string]: { start: number; end: number } } =\n Object.fromEntries([\n ['referral-2505', { start: 1652882400, end: 1653487199 }],\n ['referrer-2505', { start: 1652882400, end: 1653487199 }],\n ['referral-0106', { start: 1653487200, end: 1654091999 }],\n ['referrer-0106', { start: 1653487200, end: 1654091999 }],\n ['referral-0806', { start: 1654092000, end: 1654696799 }],\n ['referrer-0806', { start: 1654092000, end: 1654696799 }],\n ['referral-1506', { start: 1654696800, end: 1655301599 }],\n ['referrer-1506', { start: 1654696800, end: 1655301599 }],\n ]);\n\nexport const CACHE_TIMEOUT = 10 * 1000; // 10 seconds\n\nexport const SD_INCENTIVE_IN_SD = 83.35;\n\nexport const STADER_ETH = '0x30D20208d987713f46DFD34EF128Bb16C404D10f'.toLowerCase();\n\nexport const USDT_ETH = '0xdAC17F958D2ee523a2206206994597C13D831ec7'.toLowerCase();\n\nexport const AURIGAMI_SUBGRAPH_URL =\n 'https://api.thegraph.com/subgraphs/name/takao-aurigami/aurigami-feb-27';\n\nexport const GRAPHQL_URL = 'https://old.explorer.aurora.dev/api/v1/graphql';\n","export const decimalRecords: Record<string, number> = {\n '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee': 18,\n '0x09c9d464b58d96837f8d8b6f4d9fe4ad408d3a4f': 18,\n '0x3195949f267702723bc614cae037cdc8d1e94786': 8,\n '0xfa94348467f64d5a457f75f8bc40495d33c65abb': 18,\n '0x07f9f7f963c5cd2bbffd30ccfb964be114332e30': 24,\n '0xc42c30ac6cc15fac9bd938618bcaa1a1fae8501d': 24,\n '0x6ea6c03061bddce23d4ec60b6e6e880c33d24dca': 8,\n '0xca9511b610ba5fc7e311fdef9ce16050ee4449e9': 8,\n '0x8bec47865ade3b172a928df8f990bc7f2a3b9f79': 18,\n '0xcfb6b0498cb7555e7e21502e0f449bf28760adbb': 8,\n '0x4f0d864b1abf4b701799a0b30b57a22dfeb5917b': 8,\n '0xad5a2437ff55ed7a8cad3b797b3ec7c5a19b1c54': 8,\n '0x4988a896b1227218e4a686fde5eabdcabd91571f': 6,\n '0xb12bfca5a55806aaf64e99521918a4bf0fc40802': 6,\n '0xe3520349f477a5f6eb06107066048508498a291b': 18,\n '0x8888682e24dd4df7b7ff2b91fccb575737e433bf': 8,\n '0xae4fac24dcdae0132c6d04f564dcf059616e9423': 8,\n '0xce4166363e3a584dac84a47bcd3414b43efcdd1c': 8,\n '0xf4eb217ba2454613b15dbdea6e5f22276410e89e': 8,\n '0xc21ff01229e982d7c8b8691163b0a3cb8f357453': 24,\n '0x04ac48711bcdc45b4d223fb021e09da73c71095e': 18, // PULP\n '0x044b6b0cd3bb13d2b9057781df4459c66781dce7': 18, // PLYWNEAR\n '0x5183e1b1091804bc2602586919e6880ac1cf2896': 18, // USN\n '0x84b123875f0f36b966d0b6ca14b31121bd9676ad': 18, // WNEAR_TRI,\n '0x1e0e812fbcd3eb75d8562ad6f310ed94d258d008': 18, // AURORA_WNEAR\n '0xb39eeb9e168ef6c639f5e282fef1f6bc4dcae375': 24, // NEARX\n '0x078e103d5f9629ac48b8563fa2bfcd2f6d5fde84': 18, // STADER\n};\n","import { networkAddresses } from './constants';\n\nexport const symbolRecords: Record<string, string> = Object.fromEntries(\n networkAddresses.auTokens\n .map((e) => [e.address, e.name]) // AuToken\n .concat(networkAddresses.auTokens.map((e) => [e.underlying, e.name.slice(2)])) // underlying token\n .concat([['0x04ac48711bcdc45b4d223fb021e09da73c71095e', 'PULP']]) // others\n .map(([address, name]) => [address.toLowerCase(), name])\n);\n","import axios from 'axios';\n\nconst AURORA_API_BASE_URL = 'https://explorer.mainnet.aurora.dev/api';\n\nexport async function getQuery(\n module: string,\n action: string,\n params: Record<string, any> = {}\n): Promise<any> {\n params = { ...params, module: module, action: action };\n\n let resp = await axios.get(AURORA_API_BASE_URL + '?' + new URLSearchParams(params), {\n headers: { 'Content-Type': 'application/json' },\n });\n\n return resp.data.result!;\n}\n","import axios from 'axios';\n\nexport async function queryGraphQL(query: string, graphqlUrl: string): Promise<any> {\n let resp = await axios.post(graphqlUrl, {\n query: query,\n });\n return resp.data.data!;\n}\n","import { TypedEvent } from '@aurigami/contracts/typechain/common';\nimport { Provider } from '@ethersproject/abstract-provider';\nimport BigNumber from 'bignumber.js';\nimport { BigNumber as BN, utils } from 'ethers';\nimport { Result } from 'ethers/lib/utils';\nimport { GRAPHQL_URL, networkAddresses } from '../consts/constants';\nimport { decimalRecords } from '../consts/decimals';\nimport { symbolRecords } from '../consts/symbols';\nimport { Address } from '../types';\nimport { getQuery as getAuroraAPIQuery } from './aurora-api-helpers';\nimport { queryGraphQL } from './graphql-helpers';\n\nexport function assert(condition: boolean, message: string = ''): void {\n if (!condition) {\n message = 'Assertion failed' + (message ? ': ' + message : '');\n throw new Error(message);\n }\n}\n\nexport function formatObject(object: Object) {\n return JSON.stringify(object, null, ' ');\n}\n\nexport function decimalFactor(decimal: number) {\n return BN.from(10).pow(decimal).toString();\n}\n\nexport const isSameAddress = (address1: Address, address2: Address): boolean => {\n return address1.toLowerCase() == address2.toLowerCase();\n};\n\nexport const getCurrentTimestamp = (): number => {\n return Math.trunc(Date.now() / 1000);\n};\n\nexport async function sleep(duration: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, duration);\n });\n}\n\nexport function validateAndParseAddress(address: Address): Address {\n try {\n return utils.getAddress(address);\n } catch (error) {\n throw new Error('Invalid address: ' + address);\n }\n}\n\nexport function getDecimal(address: Address): number {\n let addressLowercase = address.toLowerCase();\n assert(decimalRecords[addressLowercase] != undefined, 'Decimal not found for ' + address);\n return decimalRecords[addressLowercase];\n}\n\nexport function getSymbol(address: Address): string {\n let addressLowercase = address.toLowerCase();\n assert(symbolRecords[addressLowercase] != undefined, 'Symbol not found for ' + address);\n return symbolRecords[addressLowercase];\n}\n\nexport function getUnderlying(address: Address): Address {\n let addressLowercase = address.toLowerCase();\n let matching = networkAddresses.auTokens.filter((e) => e.address == addressLowercase);\n if (matching.length == 0) {\n throw new Error('Underlying not found for ' + address);\n }\n return matching[0].underlying;\n}\n\nexport function calcLMRewardApr(\n rewardsValue: BigNumber,\n totalStakeValue: BigNumber,\n frequencyPerYear: number\n): BigNumber {\n if (rewardsValue.isZero()) {\n return new BigNumber(0);\n }\n if (totalStakeValue.lte(0)) {\n // avoid division by zero when there is no stake\n return rewardsValue;\n }\n return rewardsValue.multipliedBy(frequencyPerYear).dividedBy(totalStakeValue);\n}\n\nexport function calcNetApy(\n suppliedValue: BigNumber,\n supplyApy: BigNumber,\n borrowedValue: BigNumber,\n borrowApy: BigNumber\n) {\n return suppliedValue.multipliedBy(supplyApy).minus(borrowedValue.multipliedBy(borrowApy));\n}\n\nexport async function getBlockTimestamp(provider: Provider, blockNumber: number): Promise<number> {\n const block = await provider.getBlock(blockNumber);\n return block.timestamp;\n}\n\nexport async function getBlocksTimestampViaRPC(\n provider: Provider,\n blocksNumber: number[]\n): Promise<number[]> {\n // Promise all 200 blocks at a time, using too many blocks at once will cause the RPC call timeout.\n const CHUNK_SIZE = 200;\n let results: number[] = [];\n for (let i = 0; i < blocksNumber.length; i += CHUNK_SIZE) {\n let slice = blocksNumber.slice(i, i + CHUNK_SIZE);\n let promises = slice.map(async (blockNumber) => getBlockTimestamp(provider, blockNumber));\n results = results.concat(await Promise.all(promises));\n }\n return results;\n}\n\n/**\n * Get timestamp of multiple blocks.\n * @note the getBlockTimestamp function is too slow because of the RPC call, even with Promise.all.\n * So I use the GraphQL endpoint of Aurora instead. You can check it here: https://explorer.mainnet.aurora.dev/graphiql\n */\nexport async function getBlocksTimestamp(\n provider: Provider,\n blockNumbers: number[]\n): Promise<number[]> {\n if (blockNumbers.length == 0) return [];\n const CHUNK_SIZE = 100; // graphql query limit\n\n let promises = [];\n let lines: string[] = blockNumbers.map((x) => `b${x}: block(number: ${x}) { timestamp }`);\n\n for (let i = 0; i < lines.length; i += CHUNK_SIZE) {\n let query = `{ ${lines.slice(i, i + CHUNK_SIZE).join('\\n')} }`;\n promises.push(queryGraphQL(query, GRAPHQL_URL));\n }\n\n // merge all the json objects\n let results = (await Promise.all(promises)).reduce((acc, cur) => {\n return { ...acc, ...cur };\n }, {});\n\n let missingBlocks = blockNumbers.filter((blockNumber) => !results[`b${blockNumber}`]);\n if (missingBlocks.length > 0) {\n devLog(`These blocks are missing from Aurora GraphQL endpoint: ${missingBlocks.join(', ')}`);\n }\n\n let missingBlocksTimestamps = await getBlocksTimestampViaRPC(provider, missingBlocks);\n\n missingBlocksTimestamps.forEach((timestamp, index) => {\n results[`b${missingBlocks[index]}`] = { timestamp: new Date(timestamp * 1000).toISOString() };\n });\n\n return blockNumbers.map((blockNumber) =>\n Math.trunc(new Date(results[`b${blockNumber}`]!.timestamp).getTime() / 1000)\n );\n}\n\n/**\n * Get the block number of the last block that has a timestamp before the given timestamp\n * @param timestamp input timestamp\n * @returns return the last block that its timestamp <= the give timestamp\n * @note Check this API for more information: https://aurorascan.dev/apis#blocks\n *\n * This function is much faster than using binary search.\n */\nexport async function getBlockBeforeTimestamp(provider: Provider, timestamp: number) {\n let result = await getAuroraAPIQuery('block', 'getblocknobytime', {\n timestamp: timestamp,\n closest: 'before',\n });\n\n // In case the API return `Block timestamp too far in the future`\n // use the last block number\n return parseInt(result.blockNumber) || (await provider.getBlockNumber());\n}\n\nexport function devLog(message?: any, ...optionalParams: any[]): void {\n if ('production' !== process.env.NODE_ENV) {\n console.log('[DEV LOG]', message, ...optionalParams);\n }\n}\n\n/**\n * Sorts (in place) an array of Events by blocknumber.\n * This method mutates the array and returns a reference to the same array.\n **/\nexport function sortEvents<T extends Result>(events: TypedEvent<T>[]): TypedEvent<T>[] {\n return events.sort((a, b) => {\n if (a.blockNumber == b.blockNumber) {\n return a.logIndex - b.logIndex;\n }\n return a.blockNumber - b.blockNumber;\n });\n}\n\n// export function Cache(cacheTimeout: number) {\n// return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {\n// const originalMethod = descriptor.value;\n// let cache = new Map<string, any>();\n// descriptor.value = function (...args: any[]) {\n// let key = JSON.stringify(args);\n// if (cache.has(key)) {\n// let [timestamp, value] = cache.get(key);\n// if (Date.now() - timestamp < cacheTimeout) {\n// return value;\n// }\n// }\n// let result = originalMethod.apply(this, args);\n// cache.set(key, [Date.now(), result]);\n// return result;\n// };\n// return descriptor;\n// };\n// }\n","import { Signer } from '@ethersproject/abstract-signer';\nimport { NetworkConnection } from '../types';\n\nexport class BlockchainEntityRead {\n protected _networkConnection: NetworkConnection;\n public constructor(networkConnection: NetworkConnection) {\n this._networkConnection = networkConnection;\n }\n}\n\nexport class BlockchainEntityReadWrite extends BlockchainEntityRead {\n public constructor(networkConnection: NetworkConnection) {\n if (!(networkConnection.signer instanceof Signer)) {\n throw Error('Signer is not provided when constructing BlockchainEntityReadWrite');\n }\n super(networkConnection);\n }\n}\n\nexport class BlockchainEntity {\n constructor() {}\n public read(networkConnection: NetworkConnection): BlockchainEntityRead {\n return new BlockchainEntityRead(networkConnection);\n }\n\n public readWrite(networkConnection: NetworkConnection): BlockchainEntityReadWrite {\n return new BlockchainEntityReadWrite(networkConnection);\n }\n}\n","import {\n AuErc20,\n AuriAirdrop,\n AuriFairLaunch,\n AuriInternalLens,\n AuriLens,\n AuriOracle,\n Comptroller,\n IERC20,\n PULP,\n PlyGame,\n PlyTokenLock,\n ReferralDirectoryV2,\n} from '@aurigami/contracts/typechain';\nimport { Contract } from 'ethers';\nimport * as abis from '../abis';\nimport { networkAddresses } from '../consts/constants';\nimport { assert } from '../helpers/helpers';\nimport { AuTokenWithUnderlying } from '../types';\nimport { BlockchainEntityRead } from './BlockchainEntity';\n\nexport class AuriEnv extends BlockchainEntityRead {\n private _comptroller: Comptroller | null = null;\n private _auriFairLaunch: AuriFairLaunch | null = null;\n private _auriLens: AuriLens | null = null;\n private _ply: IERC20 | null = null;\n private _pulp: PULP | null = null;\n private _auriInternalLens: AuriInternalLens | null = null;\n private _auriAirdrop: AuriAirdrop | null = null;\n private _referralDirectoryV2: ReferralDirectoryV2 | null = null;\n private _oracle: AuriOracle | null = null;\n private _plygame: PlyGame | null = null;\n private _plyTokenLock: PlyTokenLock | null = null;\n\n public getContract<CType extends Contract>(address: string, abi: any) {\n return new Contract(address, abi, this._networkConnection.provider) as CType;\n }\n\n public getAuTokenContracts(): AuTokenWithUnderlying[] {\n return networkAddresses.auTokens.map((auToken) => {\n const contract = this.getContract<AuTokenWithUnderlying>(\n auToken.address,\n abis.AuTokenABI.abi\n );\n contract.underlying = auToken.underlying;\n return contract;\n });\n }\n\n /**\n * Get AuErc20 contract by its address or underlying name.\n *\n * Either address or underlyingName must be provided\n *\n */\n public getAuErc20Contract({\n address,\n underlyingName,\n }: {\n address?: string;\n underlyingName?: string;\n }): AuErc20 {\n assert(\n address !== undefined || underlyingName !== undefined,\n 'Either address or underlyingName must be provided'\n );\n\n if (underlyingName) {\n address = networkAddresses.auTokens.find(\n (auToken) => auToken.name == 'au' + underlyingName\n )?.address;\n assert(address !== undefined, `AuToken with underlying ${underlyingName} not found`);\n }\n\n return this.getContract<AuErc20>(address!, abis.AuErc20ABI.abi);\n }\n\n get comptroller(): Comptroller {\n if (!this._comptroller) {\n this._comptroller = this.getContract<Comptroller>(\n networkAddresses.misc.COMPTROLLER,\n abis.ComptrollerABI.abi\n );\n }\n return this._comptroller;\n }\n\n get auriFairLaunch(): AuriFairLaunch {\n if (!this._auriFairLaunch) {\n this._auriFairLaunch = this.getContract<AuriFairLaunch>(\n networkAddresses.misc.AURIFAIRLAUNCH,\n abis.AuriFairLaunchABI.abi\n );\n }\n return this._auriFairLaunch;\n }\n\n get auriLens(): AuriLens {\n if (!this._auriLens) {\n this._auriLens = this.getContract<AuriLens>(\n networkAddresses.misc.AURILENS,\n abis.AuriLensABI.abi\n );\n }\n return this._auriLens;\n }\n\n get ply(): IERC20 {\n if (!this._ply) {\n this._ply = this.getContract<IERC20>(networkAddresses.tokens.PLY, abis.EIP20InterfaceABI.abi);\n }\n return this._ply;\n }\n\n get pulp(): PULP {\n if (!this._pulp) {\n this._pulp = this.getContract<PULP>(networkAddresses.tokens.PULP, abis.PulpABI.abi);\n }\n return this._pulp;\n }\n\n get auriInternalLens(): AuriInternalLens {\n if (!this._auriInternalLens) {\n this._auriInternalLens = this.getContract<AuriInternalLens>(\n networkAddresses.misc.AURI_INTERNAL_LENS,\n abis.AuriInternalLensABI.abi\n );\n }\n return this._auriInternalLens;\n }\n\n get auriAirdrop(): AuriAirdrop {\n if (!this._auriAirdrop) {\n this._auriAirdrop = this.getContract<AuriAirdrop>(\n networkAddresses.misc.AURI_AIRDROP,\n abis.AuriAirdropABI.abi\n );\n }\n return this._auriAirdrop;\n }\n\n get referralDirectoryV2(): ReferralDirectoryV2 {\n if (!this._referralDirectoryV2) {\n this._referralDirectoryV2 = this.getContract<ReferralDirectoryV2>(\n networkAddresses.misc.REFERRAL_V2,\n abis.ReferralDirectoryV2ABI.abi\n );\n }\n return this._referralDirectoryV2;\n }\n\n get oracle(): AuriOracle {\n if (!this._oracle) {\n this._oracle = this.getContract<AuriOracle>(\n networkAddresses.misc.PYTH_ORACLE,\n abis.AuriOracleABI.abi\n );\n }\n return this._oracle;\n }\n\n get plygame(): PlyGame {\n if (!this._plygame) {\n this._plygame = this.getContract<PlyGame>(networkAddresses.misc.PLYGAME, abis.PlyGameABI.abi);\n }\n return this._plygame;\n }\n\n get plyTokenLock(): PlyTokenLock {\n if (!this._plyTokenLock) {\n this._plyTokenLock = this.getContract<PlyTokenLock>(\n networkAddresses.misc.PLY_TOKEN_LOCK,\n abis.PlyTokenLockABI.abi\n );\n }\n return this._plyTokenLock;\n }\n}\n","import { networkAddresses } from '../consts/constants';\nimport { getDecimal } from '../helpers/helpers';\n\nexport class Token {\n public readonly address: string;\n public readonly decimals: number;\n public constructor(address: string, decimals: number) {\n this.address = address.toLowerCase();\n this.decimals = decimals;\n }\n}\n\nexport const PLYToken = new Token(\n networkAddresses.tokens.PLY,\n getDecimal(networkAddresses.tokens.PLY)\n);\n\nexport const PLYWNEARToken = new Token(\n networkAddresses.tokens.PLYWNEAR,\n getDecimal(networkAddresses.tokens.PLYWNEAR)\n);\n","import BigNumber from 'bignumber.js';\nimport { decimalFactor, getDecimal, getSymbol } from '../helpers/helpers';\nimport { Address } from '../types';\nimport { Token } from './token';\n\nexport class TokenAmount {\n public readonly token: Token;\n private rawAmnt: string;\n\n public constructor(token: Token, amount: string, isRaw: boolean = true) {\n if (isRaw) {\n this.rawAmnt = amount;\n } else {\n this.rawAmnt = new BigNumber(amount).times(decimalFactor(token.decimals)).toFixed(0);\n }\n this.token = token;\n }\n\n public formattedAmount(decimal?: number, fmt?: BigNumber.Format): string {\n if (decimal !== undefined && fmt !== undefined) {\n return new BigNumber(this.rawAmnt)\n .div(decimalFactor(this.token.decimals))\n .toFormat(decimal, fmt);\n }\n\n return new BigNumber(this.rawAmnt).div(decimalFactor(this.token.decimals)).toString();\n }\n\n public formattedAmountWithSymbol(decimal?: number, fmt?: BigNumber.Format): string {\n return `${this.formattedAmount(decimal, fmt)} ${getSymbol(this.token.address)}`;\n }\n\n public rawAmount(): string {\n return this.rawAmnt;\n }\n\n public compare(other: TokenAmount): number {\n return new BigNumber(this.rawAmnt).comparedTo(new BigNumber(other.rawAmnt));\n }\n\n public static fromAddressAndAmount(\n tokenAddress: Address,\n amount: string,\n isRaw: boolean = true\n ): TokenAmount {\n return new TokenAmount(new Token(tokenAddress, getDecimal(tokenAddress)), amount, isRaw);\n }\n}\n","import { Token, TokenAmount } from '../entities';\nimport { ReferralReward, UserMarketDetails } from '../types';\nimport { networkAddresses } from './constants';\n\nexport const dummyToken = new Token(networkAddresses.tokens.WNEAR, 24);\n\nexport const dummyPly = new Token('0x8729438eb15e2c8b576fcc6aecda6a148776c0f5', 18);\n\nexport const dummyPlyAurora = new Token('0xE530dC2095Ef5653205CF5ea79F8979a7028065c', 18);\n\nexport const dummyTokenAmount = new TokenAmount(dummyToken, '123.456', false);\n\nexport const dummyZeroTokenAmount = new TokenAmount(dummyToken, '0');\n\nexport const dummyTokenAmount2 = new TokenAmount(dummyToken, '456.123', false);\n\nexport const dummyTokenAmount3 = new TokenAmount(dummyToken, '1000.123', false);\n\nexport const dummyMarketAddress = '0xbeb5d47a3f720ec0a390d04b4d41ed7d9688bc7f'; // qiUSDC\n\nexport const dummyUserMarketDetails: UserMarketDetails = {\n market: dummyMarketAddress,\n depositBalance: dummyTokenAmount2,\n borrowBalance: dummyZeroTokenAmount,\n isCollateral: true,\n maxWithdrawableAmount: dummyTokenAmount,\n collateralRatio: 0.5,\n underlyingPrice: '1',\n};\n\nexport const referralRewardDummy1: ReferralReward = {\n campaign: 'testa',\n startTime: Math.trunc(new Date(2022, 8, 1).getTime() / 1000),\n endTime: Math.trunc(new Date(2022, 9, 30).getTime() / 1000),\n isReferrer: false,\n rewardTokenAmount: dummyTokenAmount,\n transactionHash: null,\n userAddr: '0x...123',\n refereeAddress: '0x123..123',\n};\n\nexport const referralRewardDummy2: ReferralReward = {\n campaign: 'testb',\n startTime: Math.trunc(new Date(2022, 8, 1).getTime() / 1000),\n endTime: Math.trunc(new Date(2022, 8, 31).getTime() / 1000),\n isReferrer: true,\n rewardTokenAmount: dummyTokenAmount2,\n transactionHash: '0x4da9657663b46ef18d150b897b28c7b717f16421978b52e3a06d91b54ca3548b',\n userAddr: '0x...456',\n refereeAddress: '0x123..123',\n};\n","import axios from 'axios';\n\nconst AURIGAMI_API_END_POINT = 'https://api.aurigami.finance/app/';\n\nexport async function getApi(url: string, params: Record<string, any> = {}): Promise<any> {\n const resp = await axios.get(AURIGAMI_API_END_POINT + url + '?' + new URLSearchParams(params), {\n headers: { 'Content-Type': 'application/json' },\n });\n\n return resp.data;\n}\n\nexport type MetaApiResponse = {\n totalItems: number;\n itemCount: number;\n itemsPerPage: number;\n totalPages: number;\n currentPage: number;\n};\n\nexport type PaginagedApiResponse<T> = {\n items: T[];\n meta: MetaApiResponse;\n};\n\nexport async function getPaginatedApi<T = any>(\n url: string,\n params: Record<string, any> = {},\n page: number = 1,\n pageSize: number = 50\n): Promise<PaginagedApiResponse<T>> {\n params = {\n ...params,\n page,\n limit: pageSize,\n };\n const resp = await axios.get(AURIGAMI_API_END_POINT + url + '?' + new URLSearchParams(params), {\n headers: { 'Content-Type': 'application/json' },\n });\n\n return resp.data;\n}\n","import axios from 'axios';\n\nconst KYBER_AGGREGATOR_AURORA_API_END_POINT =\n 'https://aggregator-api.kyberswap.com/aurora/route/encode';\n\nconst KYBER_AGGREGATOR_ETH_API_END_POINT =\n 'https://aggregator-api.kyberswap.com/ethereum/route/encode';\n\nexport async function getSwapInfo(\n tokenIn: string,\n tokenOut: string,\n amountIn: string,\n onAurora = true\n): Promise<KyberApiResponse> {\n const params = {\n tokenIn,\n tokenOut,\n amountIn,\n to: '0x0000000000000000000000000000000000000000',\n useMeta: '1',\n saveGas: '1',\n gasInclude: '1',\n };\n const endpoint = onAurora\n ? KYBER_AGGREGATOR_AURORA_API_END_POINT\n : KYBER_AGGREGATOR_ETH_API_END_POINT;\n const resp = await axios.get(endpoint + '?' + new URLSearchParams(params), {\n headers: { 'Content-Type': 'application/json' },\n });\n\n return resp.data;\n}\n\nexport type KyberApiResponse = {\n inputAmount: string;\n outputAmount: string;\n};\n","// https://api.1inch.io/v5.0/1313161554/quote?fromTokenAddress=0x8bec47865ade3b172a928df8f990bc7f2a3b9f79&toTokenAddress=0x4988a896b1227218e4a686fde5eabdcabd91571f&amount=1000000000000000000\n\nimport axios from 'axios';\n\nconst ONEINCH_AGGREGATOR_API_END_POINT = 'https://api.1inch.io/v5.0/1313161554/quote';\n\nexport async function getQuoteOneInch(\n fromTokenAddress: string,\n toTokenAddress: string,\n amount: string\n): Promise<OneInchApiResponse> {\n const params = {\n fromTokenAddress,\n toTokenAddress,\n amount,\n };\n const resp = await axios.get(\n ONEINCH_AGGREGATOR_API_END_POINT + '?' + new URLSearchParams(params),\n {\n headers: { 'Content-Type': 'application/json' },\n }\n );\n return resp.data;\n}\n\nexport type OneInchApiResponse = {\n fromToken: {\n symbol: string;\n name: string;\n decimals: number;\n address: string;\n logoURI: string;\n tags: string[];\n };\n toToken: {\n symbol: string;\n name: string;\n decimals: number;\n address: string;\n logoURI: string;\n tags: string[];\n };\n toTokenAmount: string;\n fromTokenAmount: string;\n};\n","import AuriLensABI from '@aurigami/contracts/artifacts/contracts/AuriLens.sol/AuriLens.json';\nimport { AuriPythOracle, ERC20, IUniswapV2Pair } from '@aurigami/contracts/typechain';\nimport axios from 'axios';\nimport BigNumber from 'bignumber.js';\nimport { BigNumber as BN, Contract, ethers, providers } from 'ethers';\nimport { AuriOracleABI, EIP20InterfaceABI, IUniswapV2PairABI } from '../abis';\nimport {\n DECIMAL_PRECISION,\n HARDCODE_PRICE_TOKENS,\n PRICE_WHITELISTED,\n STADER_ETH,\n USDT_ETH,\n networkAddresses,\n} from '../consts/constants';\nimport { TokenAmount } from '../entities/tokenAmount';\nimport { Address, TokenValuation } from '../types';\nimport { assert, decimalFactor, devLog, getDecimal, isSameAddress } from './helpers';\nimport { getSwapInfo } from './kyber-aggregator-api';\nimport { getQuoteOneInch } from './one-inch-aggregator-api';\n\nexport async function prepareParamsAggregator(address: string, provider: providers.Provider) {\n const tokenInErc20 = new Contract(address, EIP20InterfaceABI.abi, provider) as ERC20;\n const tokenInDecimal = await tokenInErc20.decimals();\n const tokenInQuantity = BN.from(10).pow(tokenInDecimal).toString();\n const usdtAddress =\n networkAddresses.auTokens.find((autoken) => autoken.name == 'auUSDT')?.underlying ?? '';\n const usdtDecimal = getDecimal(usdtAddress);\n return {\n tokenInQuantity,\n usdtAddress,\n usdtDecimal,\n };\n}\n\nexport async function fetchPriceFromOneInch(address: string, provider: providers.Provider) {\n const { tokenInQuantity, usdtAddress, usdtDecimal } = await prepareParamsAggregator(\n address,\n provider\n );\n const info = await getQuoteOneInch(address, usdtAddress, tokenInQuantity);\n const outputAmount = info.toTokenAmount;\n return new BigNumber(outputAmount).dividedBy(10 ** usdtDecimal);\n}\n\nexport async function fetchPriceFromKyberSwap(\n address: string,\n provider: providers.Provider,\n onAurora = true\n): Promise<BigNumber> {\n if (address == networkAddresses.tokens.STADER) {\n const ETH_PROVIDER = new ethers.providers.JsonRpcProvider('https://rpc.ankr.com/eth');\n\n return fetchPriceFromKyberSwap(STADER_ETH, ETH_PROVIDER, false);\n }\n let { tokenInQuantity, usdtAddress, usdtDecimal } = await prepareParamsAggregator(\n address,\n provider\n );\n if (!onAurora) {\n usdtAddress = USDT_ETH;\n }\n const info = await getSwapInfo(address, usdtAddress, tokenInQuantity, onAurora);\n const outputAmount = info.outputAmount;\n return new BigNumber(outputAmount).dividedBy(10 ** usdtDecimal);\n}\n\nexport async function fetchPriceFromDefiLlamaAPI(id: string): Promise<BigNumber> {\n const price = await axios\n .get(`https://coins.llama.fi/prices/current/${id}`)\n .then((res: any) => {\n return res.data.coins[id].price;\n })\n .catch((err: any) => {\n console.log(`unable to fetch price from DefiLlama API: ${err}`);\n console.error(err);\n return 0;\n });\n return new BigNumber(price);\n}\n\nexport async function fetchPriceFromCoingeckoAPI(id: string): Promise<BigNumber> {\n const price = await axios\n .get(`https://api.coingecko.com/api/v3/simple/price?ids=${id}&vs_currencies=usd`)\n .then((res: any) => {\n return res.data[id];\n })\n .catch((err: any) => {\n console.log(`Unable to fetch price from Coingecko API for ${id}`);\n console.error(err);\n return { usd: 0 };\n });\n\n return new BigNumber(price.usd);\n}\n\nexport async function fetchPriceFromDefiLlamaAndCoingecko(id: Address): Promise<BigNumber> {\n if (\n id.toLowerCase() == networkAddresses.tokens.AURORA ||\n id.toLowerCase() == networkAddresses.tokens.TRI ||\n id.toLowerCase() == networkAddresses.tokens.META\n ) {\n return fetchPriceFromDefiLlamaAPI(`aurora:${id.toLowerCase()}`).catch((e) =>\n fetchPriceFromCoingecko(id)\n );\n } else if (id.toLowerCase() == networkAddresses.tokens.STADER) {\n return fetchPriceFromCoingecko(id);\n }\n throw Error(`Unknown token ${id} in fetchPriceFromDefiLlama`);\n}\n\nexport async function fetchPriceFromCoingecko(id: Address): Promise<BigNumber> {\n switch (id.toLowerCase()) {\n case networkAddresses.tokens.AURORA:\n return fetchPriceFromCoingeckoAPI('aurora-near');\n\n case networkAddresses.tokens.TRI:\n return fetchPriceFromCoingeckoAPI('trisolaris');\n\n case networkAddresses.tokens.META:\n return fetchPriceFromCoingeckoAPI('meta-pool');\n\n case networkAddresses.tokens.STADER:\n return fetchPriceFromCoingeckoAPI('stader');\n\n default:\n throw Error(`Unknown token ${id} in fetchPriceFromCoingecko`);\n }\n}\n\nexport async function fetchLPPositions(\n LPAddress: Address,\n provider: providers.Provider\n): Promise<{\n token0: Address;\n token1: Address;\n reserve0: BN;\n reserve1: BN;\n totalSupply: BN;\n}> {\n const LPContract = new Contract(LPAddress, IUniswapV2PairABI.abi, provider) as IUniswapV2Pair;\n const [token0, token1, reserves, totalSupply] = await Promise.all([\n LPContract.token0(),\n LPContract.token1(),\n LPContract.getReserves(),\n LPContract.totalSupply(),\n ]);\n\n return {\n token0: token0,\n token1: token1,\n reserve0: reserves.reserve0,\n reserve1: reserves.reserve1,\n totalSupply: totalSupply,\n };\n}\n\nexport async function fetchLPPrice(\n address: Address,\n provider: providers.Provider\n): Promise<BigNumber> {\n var LPInfo = await fetchLPPositions(address, provider);\n const LPDecimal = getDecimal(address);\n\n async function fetchLPPriceBy(tokenReverse: {\n address: string;\n reserve: BN;\n }): Promise<BigNumber> {\n if (tokenReverse.reserve.isZero()) return new BigNumber(0);\n\n // Should NOT call `fetchPrice`, it will cause an infinite loop\n // because the token can be PLY. To calculate PLY price, we need to\n // call `fetchPrice` again...\n const tokenPrice: BigNumber = await _fetchPrice(tokenReverse.address, provider);\n const tokenDecimal = getDecimal(tokenReverse.address);\n\n // reserveUSD will be divided by 10^tokenDecimal later for more precision\n const reserveUSD: BigNumber = tokenPrice\n .multipliedBy(tokenReverse.reserve.toString())\n .multipliedBy(2);\n return reserveUSD\n .multipliedBy(decimalFactor(LPDecimal))\n .dividedBy(new BigNumber(LPInfo.totalSupply.toString()))\n .dividedBy(decimalFactor(tokenDecimal));\n }\n\n try {\n // MUST await here\n const lpPrice = await fetchLPPriceBy({\n address: LPInfo.token0,\n reserve: LPInfo.reserve0,\n });\n if (lpPrice.isZero()) {\n throw Error(`Price is zero`);\n }\n return lpPrice;\n } catch (e) {\n devLog(`fetchLPPriceBy ${LPInfo.token0} failed`, e);\n try {\n // MUST await here\n return await fetchLPPriceBy({\n address: LPInfo.token1,\n reserve: LPInfo.reserve1,\n });\n } catch (e) {\n devLog(`fetchLPPriceBy ${LPInfo.token1} failed`, e);\n throw Error(`Unable to fetch price for both tokens of LP ${address}`);\n }\n }\n}\n\nexport async function fetchStNEARPrice(): Promise<BigNumber> {\n const ratioPromise = axios\n .get('https://validators.narwallets.com/metrics_json')\n .then((res) => res.data);\n const nearPricePromise = fetchPriceFromCoingeckoAPI('near');\n const [ratioRes, nearPrice]: [any, BigNumber] = await Promise.all([\n ratioPromise,\n nearPricePromise,\n ]);\n const ratio = new BigNumber(ratioRes.st_near_price);\n return ratio.multipliedBy(nearPrice);\n}\n\nfunction processPriceFromOracle(rawPrice: BN, underlyingDecimal: number) {\n return new BigNumber(rawPrice.toString()).div(decimalFactor(36 - underlyingDecimal));\n}\nexport async function fetchPriceFromOracle(\n auTokenAddress: Address,\n underlyingDecimal: number,\n provider: providers.Provider\n): Promise<BigNumber> {\n const oracleContract: AuriPythOracle = new Contract(\n networkAddresses.misc.PYTH_ORACLE,\n AuriOracleABI.abi,\n provider\n ) as AuriPythOracle;\n const rawPrice = await oracleContract.getUnderlyingPrice(auTokenAddress).catch((e: any) => {\n console.log(`Unable to fetch price from oracle for ${auTokenAddress}`);\n return BN.from(0);\n });\n\n // In case of error, probally it is because the underlying token is not supported\n // by the backup oracle. In that case, we will fetch from third-party.\n if (rawPrice.isZero()) {\n const matchingAuToken = networkAddresses.auTokens.find((auToken) => {\n return isSameAddress(auToken.address, auTokenAddress);\n });\n if (matchingAuToken?.name == 'auSTNEAR') {\n return fetchStNEARPrice();\n }\n }\n\n return processPriceFromOracle(rawPrice, underlyingDecimal);\n}\n\nexport async function fetchUnderlyingTokensPrices(provider: providers.Provider): Promise<\n {\n auToken: string;\n underlyingPrice: BigNumber;\n }[]\n> {\n const auriLens: Contract = new Contract(\n networkAddresses.misc.AURILENS,\n AuriLensABI.abi,\n provider\n );\n const auTokenAddresses = networkAddresses.auTokens.map((auToken) => auToken.address);\n const underlyingDecimals = networkAddresses.auTokens.map((auToken) =>\n getDecimal(auToken.underlying)\n );\n const rawPrices = await auriLens.auTokenUnderlyingPriceAll(auTokenAddresses);\n return rawPrices.map((res: any, ind: number) => {\n return {\n auToken: res.auToken,\n underlyingPrice: processPriceFromOracle(res.underlyingPrice, underlyingDecimals[ind]),\n };\n });\n}\n\nfunction shouldFetchFromKyberSwap(address: string) {\n address = address.toLowerCase();\n return (\n address == networkAddresses.tokens.AURORA ||\n address == networkAddresses.tokens.TRI ||\n address == networkAddresses.tokens.META ||\n address == networkAddresses.tokens.STADER\n );\n}\n\n/**\n * Fetch price from Oracle or Coingecko\n */\nasync function _fetchPrice(address: Address, provider: providers.Provider): Promise<BigNumber> {\n assert(\n PRICE_WHITELISTED.has(address.toLocaleLowerCase()),\n `Address ${address} is not whitelisted for price fetching`\n );\n if (address.toLowerCase() == networkAddresses.tokens.META) {\n return fetchPriceFromDefiLlamaAndCoingecko(address);\n }\n if (shouldFetchFromKyberSwap(address)) {\n return fetchPriceFromKyberSwap(address, provider).catch((e) => {\n return fetchPriceFromDefiLlamaAndCoingecko(address);\n });\n }\n const matchingAuToken = networkAddresses.auTokens.find((auToken) => {\n return isSameAddress(auToken.underlying, address);\n });\n\n if (matchingAuToken !== undefined) {\n return fetchPriceFromOracle(matchingAuToken.address, getDecimal(address), provider);\n } else {\n throw Error(`Unable to fetch price for ${address}`);\n }\n}\n\nexport async function fetchPrice(\n address: Address,\n provider: providers.Provider\n): Promise<BigNumber> {\n if (address.toLowerCase() in HARDCODE_PRICE_TOKENS) {\n return new BigNumber(HARDCODE_PRICE_TOKENS[address.toLowerCase()]);\n } else if (isSameAddress(address, networkAddresses.tokens.PLYWNEAR)) {\n return fetchLPPrice(address, provider);\n } else if (isSameAddress(address, networkAddresses.tokens.PLY)) {\n return fetchPLYPrice(provider);\n } else if (isSameAddress(address, networkAddresses.tokens.PULP)) {\n return fetchPULPPrice(provider);\n }\n return _fetchPrice(address, provider);\n}\n\nexport async function fetchPLYPrice(provider: providers.Provider): Promise<BigNumber> {\n //TODO: Fetch PLY price from CEX?\n return fetchToken0PriceByLP(networkAddresses.tokens.PLYWNEAR, provider);\n}\n\nexport async function fetchPULPPrice(provider: providers.Provider): Promise<BigNumber> {\n //TODO: Calculate PULP price\n return new BigNumber(0);\n}\n\nexport async function fetchToken0PriceByLP(\n LP: Address,\n provider: providers.Provider\n): Promise<BigNumber> {\n const LPInfo = await fetchLPPositions(LP, provider);\n\n if (LPInfo.reserve1.isZero()) {\n return new BigNumber(0);\n }\n\n const token0Decimal = getDecimal(LPInfo.token0);\n const token1Decimal = getDecimal(LPInfo.token1);\n\n // (token0Price * reserve0) / 10^decimal0 = (token1Price * reserve1) / 10^decimal1\n // token0Price = (token1Price * reserve1) * 10^decimal0 / 10^decimal1 / reserve0\n return (await fetchPrice(LPInfo.token1, provider))\n .multipliedBy(LPInfo.reserve1.toString())\n .multipliedBy(decimalFactor(token0Decimal))\n .dividedBy(decimalFactor(token1Decimal))\n .dividedBy(LPInfo.reserve0.toString());\n}\n\nexport async function fetchValuation(\n tokenAmount: TokenAmount,\n provider: providers.Provider\n): Promise<BigNumber> {\n if (tokenAmount.rawAmount() == '0') return new BigNumber(0);\n var price = await fetchPrice(tokenAmount.token.address, provider);\n return calcValuation(tokenAmount, price);\n}\n\nexport function calcValuation(tokenAmount: TokenAmount, price: BigNumber) {\n return new BigNumber(tokenAmount.formattedAmount()).multipliedBy(price);\n}\n\nexport async function valuateToken(\n tokenAmount: TokenAmount,\n provider: providers.Provider\n): Promise<TokenValuation> {\n let tokenValuation = await fetchValuation(tokenAmount, provider);\n return {\n tokenAmount: tokenAmount,\n currencyAmount: {\n currency: 'USD',\n amount: tokenValuation.toFixed(DECIMAL_PRECISION),\n },\n };\n}\n","import AuTokenABI from '@aurigami/contracts/artifacts/contracts/AuToken.sol/AuToken.json';\nimport { AuToken } from '@aurigami/contracts/typechain';\nimport { BigNumber as BN, Contract } from 'ethers';\nimport { BlockchainEntityRead } from '../entities/BlockchainEntity';\nimport { NetworkConnection } from '../types';\n\ntype SimpleTransfer = {\n from: string;\n to: string;\n amount: BN;\n blockNumber: number;\n};\n\nexport class TransferEventQuery extends BlockchainEntityRead {\n auToken: AuToken;\n\n constructor(tokenAddr: string, networkConnection: NetworkConnection) {\n super(networkConnection);\n this.auToken = new Contract(\n tokenAddr,\n AuTokenABI.abi,\n this._networkConnection.provider\n ) as AuToken;\n }\n\n /**\n * query ERC20 transfers from/to an address & auto convert them into SimpleTransfer.\n * The result will be sorted by blocknumber.\n */\n async queryERC20TransfersOf(\n address: string,\n fromBlock: number,\n toBlock: number\n ): Promise<SimpleTransfer[]> {\n const filters = [\n this.auToken.filters.Transfer(address, null),\n this.auToken.filters.Transfer(null, address),\n ];\n\n const events = (\n await Promise.all(\n filters.map((filter) => this.auToken.queryFilter(filter, fromBlock, toBlock))\n )\n ).flat();\n\n let results: SimpleTransfer[] = events.map((event) => {\n return {\n from: event.args![0],\n to: event.args![1],\n amount: event.args![2],\n blockNumber: event.blockNumber,\n };\n });\n\n results.sort((a, b) => a.blockNumber - b.blockNumber);\n\n return results;\n }\n\n /**\n * Get the balance of an address at a given block number.\n *\n * Note that this will return the balance after the block get mined.\n */\n async queryERC20BalanceAt(address: string, endBlock: number): Promise<BN> {\n return this.auToken.balanceOf(address, { blockTag: endBlock + 1 });\n }\n}\n","import { IUniswapV2Pair, PriceOracle } from '@aurigami/contracts/typechain';\nimport BigNumber from 'bignumber.js';\nimport { BigNumber as BN, Contract, providers } from 'ethers';\nimport { AuriOracleABI, IUniswapV2PairABI } from '../abis';\nimport { HARDCODE_PRICE_TOKENS, networkAddresses } from '../consts/constants';\nimport { Address } from '../types';\nimport { decimalFactor, devLog, getDecimal, isSameAddress } from './helpers';\n\nexport async function fetchHistoricalLPPositions(\n LPAddress: Address,\n provider: providers.Provider,\n block: number\n): Promise<{\n token0: Address;\n token1: Address;\n reserve0: BN;\n reserve1: BN;\n totalSupply: BN;\n}> {\n const LPContract = new Contract(LPAddress, IUniswapV2PairABI.abi, provider) as IUniswapV2Pair;\n var promises: any[] = [];\n promises.push(LPContract.token0());\n promises.push(LPContract.token1());\n promises.push(LPContract.getReserves({ blockTag: block }));\n promises.push(LPContract.totalSupply({ blockTag: block }));\n const values: any[] = await Promise.all(promises);\n\n return {\n token0: values[0] as string,\n token1: values[1] as string,\n reserve0: (values[2] as { reserve0: BN; reserve1: BN }).reserve0,\n reserve1: (values[2] as { reserve0: BN; reserve1: BN }).reserve1,\n totalSupply: values[3] as BN,\n };\n}\n\nexport async function fetchHistoricalLPPrice(\n address: Address,\n provider: providers.Provider,\n block: number\n): Promise<BigNumber> {\n var LPInfo = await fetchHistoricalLPPositions(address, provider, block);\n const LPDecimal = getDecimal(address);\n\n async function fetchLPPriceBy(\n tokenReverse: {\n address: string;\n reserve: BN;\n },\n block: number\n ): Promise<BigNumber> {\n if (tokenReverse.reserve.isZero()) return new BigNumber(0);\n\n const tokenPrice: BigNumber = await fetchHistoricalPrice(tokenReverse.address, provider, block);\n const tokenDecimal = getDecimal(tokenReverse.address);\n\n // reserveUSD will be divided by 10^tokenDecimal later for more precision\n const reserveUSD: BigNumber = tokenPrice\n .multipliedBy(tokenReverse.reserve.toString())\n .multipliedBy(2);\n return reserveUSD\n .multipliedBy(decimalFactor(LPDecimal))\n .dividedBy(new BigNumber(LPInfo.totalSupply.toString()))\n .dividedBy(decimalFactor(tokenDecimal));\n }\n\n try {\n // MUST await here\n const lpPrice = await fetchLPPriceBy(\n {\n address: LPInfo.token0,\n reserve: LPInfo.reserve0,\n },\n block\n );\n if (lpPrice.isZero()) {\n throw Error(`Price is zero`);\n }\n return lpPrice;\n } catch (e) {\n devLog(`fetchLPPriceBy ${LPInfo.token0} failed`, e);\n try {\n // MUST await here\n return await fetchLPPriceBy(\n {\n address: LPInfo.token1,\n reserve: LPInfo.reserve1,\n },\n block\n );\n } catch (e) {\n devLog(`fetchLPPriceBy ${LPInfo.token1} failed`, e);\n throw Error(`Unable to fetch price for both tokens of LP ${address}`);\n }\n }\n}\n\nfunction processPriceFromOracle(rawPrice: BN, underlyingDecimal: number) {\n return new BigNumber(rawPrice.toString()).div(decimalFactor(36 - underlyingDecimal));\n}\nexport async function fetchHistoricalPriceFromOracle(\n auTokenAddress: Address,\n underlyingDecimal: number,\n provider: providers.Provider,\n block: number\n): Promise<BigNumber> {\n // from this block, we switch to use pyth\n // TODO: add to consts\n const oracleAddress =\n block < 102438637\n ? networkAddresses.misc.DEPRECATED_OLD_ORACLE\n : networkAddresses.misc.PYTH_ORACLE;\n\n const oracleContract: PriceOracle = new Contract(\n oracleAddress,\n AuriOracleABI.abi,\n provider\n ) as PriceOracle;\n const rawPrice = await oracleContract\n .getUnderlyingPrice(auTokenAddress, { blockTag: block })\n .catch((e: any) => {\n console.log(`Unable to fetch price from oracle for ${auTokenAddress}`);\n return BN.from(0);\n });\n\n return processPriceFromOracle(rawPrice, underlyingDecimal);\n}\n\nexport async function fetchHistoricalPrice(\n address: Address,\n provider: providers.Provider,\n block: number\n): Promise<BigNumber> {\n if (address.toLowerCase() in HARDCODE_PRICE_TOKENS) {\n return new BigNumber(HARDCODE_PRICE_TOKENS[address.toLowerCase()]);\n } else if (\n isSameAddress(address, networkAddresses.tokens.PLY_WNEAR) ||\n isSameAddress(address, networkAddresses.tokens.WNEAR_TRI) ||\n isSameAddress(address, networkAddresses.tokens.AURORA_WNEAR)\n ) {\n return fetchHistoricalLPPrice(address, provider, block);\n } else if (isSameAddress(address, networkAddresses.tokens.PLY)) {\n return fetchHistoricalPriceByLP(networkAddresses.tokens.PLY_WNEAR, provider, block);\n } else if (isSameAddress(address, networkAddresses.tokens.TRI)) {\n return fetchHistoricalPriceByLP(networkAddresses.tokens.WNEAR_TRI, provider, block, 1);\n } else if (isSameAddress(address, networkAddresses.tokens.AURORA)) {\n return fetchHistoricalPriceByLP(networkAddresses.tokens.AURORA_WNEAR, provider, block);\n }\n\n const matchingAuToken = networkAddresses.auTokens.find((auToken) => {\n return isSameAddress(auToken.underlying, address);\n });\n\n if (matchingAuToken !== undefined) {\n return fetchHistoricalPriceFromOracle(\n matchingAuToken.address,\n getDecimal(address),\n provider,\n block\n );\n } else {\n throw Error(`Unable to fetch price for ${address}`);\n }\n}\n\nexport async function fetchHistoricalPULPPrice(provider: providers.Provider): Promise<BigNumber> {\n //TODO: Calculate PULP price\n return new BigNumber(0);\n}\n\nexport async function fetchHistoricalPriceByLP(\n LP: Address,\n provider: providers.Provider,\n block: number,\n tokenNumber: 0 | 1 = 0\n): Promise<BigNumber> {\n let LPInfo = await fetchHistoricalLPPositions(LP, provider, block);\n\n if (tokenNumber === 1) {\n LPInfo = {\n token0: LPInfo.token1,\n token1: LPInfo.token0,\n reserve0: LPInfo.reserve1,\n reserve1: LPInfo.reserve0,\n totalSupply: LPInfo.totalSupply,\n };\n }\n\n if (LPInfo.reserve1.isZero()) {\n return new BigNumber(0);\n }\n\n const token0Decimal = getDecimal(LPInfo.token0);\n const token1Decimal = getDecimal(LPInfo.token1);\n\n // (token0Price * reserve0) / 10^decimal0 = (token1Price * reserve1) / 10^decimal1\n // token0Price = (token1Price * reserve1) * 10^decimal0 / 10^decimal1 / reserve0\n return (await fetchHistoricalPrice(LPInfo.token1, provider, block))\n .multipliedBy(LPInfo.reserve1.toString())\n .multipliedBy(decimalFactor(token0Decimal))\n .dividedBy(decimalFactor(token1Decimal))\n .dividedBy(LPInfo.reserve0.toString());\n}\n","import { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { BigNumber as BN, utils } from 'ethers';\nimport { AuriEnv, BlockchainEntity, BlockchainEntityRead, Token, TokenAmount } from '../entities';\nimport * as helpers from '../helpers';\nimport { Address, NetworkConnection } from '../types';\n\nexport class AirdropRead extends BlockchainEntityRead {\n public readonly env: AuriEnv;\n\n public constructor(networkConnection: NetworkConnection) {\n super(networkConnection);\n this.env = new AuriEnv(networkConnection);\n }\n\n /**\n * Get redeemable rewards amount of user\n */\n public async getRedeemableReward(\n campaign: string,\n token: Address,\n user: Address\n ): Promise<TokenAmount> {\n let tokenInstance: Token = new Token(token, helpers.getDecimal(token));\n\n let rewards: BN = await this.env.auriAirdrop.getRedeemableReward(\n utils.formatBytes32String(campaign),\n token,\n user\n );\n\n return new TokenAmount(tokenInstance, rewards.toString());\n }\n}\n\nexport class AirdropReadWrite extends AirdropRead {\n /**\n * Transfer rewards from multiple campaigns to msg.sender\n */\n public async redeemMultiple(\n campaigns: string[],\n tokens: Address[]\n ): Promise<TransactionResponse> {\n helpers.assert(\n campaigns.length == tokens.length,\n 'campaigns and tokens must have the same length'\n );\n return this.env.auriAirdrop.connect(this._networkConnection.signer!).redeem(\n campaigns.map((e) => utils.formatBytes32String(e)),\n tokens,\n await this._networkConnection.signer!.getAddress()\n );\n }\n\n /**\n * Redeem reward from a single campaign\n */\n public async redeemSingle(campaign: string, token: Address): Promise<TransactionResponse> {\n return this.redeemMultiple([campaign], [token]);\n }\n}\n\nexport class Airdrop extends BlockchainEntity {\n constructor() {\n super();\n }\n public read(networkConnection: NetworkConnection): AirdropRead {\n return new AirdropRead(networkConnection);\n }\n public readWrite(networkConnection: NetworkConnection): AirdropReadWrite {\n return new AirdropReadWrite(networkConnection);\n }\n}\n","import { AuETH, AuErc20, EthRepayHelper } from '@aurigami/contracts/typechain';\nimport { TransactionResponse } from '@ethersproject/abstract-provider';\nimport BigNumber from 'bignumber.js';\nimport { CacheType, cache } from 'cache-decorator';\nimport { BigNumber as BN, Contract } from 'ethers';\nimport * as abis from '../abis';\nimport * as consts from '../consts';\nimport { CACHE_TIMEOUT, ONE_DAY } from '../consts';\nimport {\n AuriEnv,\n BlockchainEntity,\n BlockchainEntityRead,\n PLYToken,\n Token,\n TokenAmount,\n} from '../entities';\nimport * as helpers from '../helpers';\nimport { calcValuation, fetchPrice, fetchValuation } from '../helpers/priceFetcher';\nimport { Address, Apy, MoneyMarketDetails, NetworkConnection } from '../types';\n\ntype RewardSpeeds = {\n plyRewardSupplySpeed: BN;\n plyRewardBorrowSpeed: BN;\n auroraRewardSupplySpeed: BN;\n auroraRewardBorrowSpeed: BN;\n};\n\nexport class MoneyMarketRead extends BlockchainEntityRead {\n public underlying: Token;\n public auToken: AuErc20 | AuETH;\n public readonly env: AuriEnv;\n constructor(networkConnection: NetworkConnection, auToken: Address, underlyingAsset: Address) {\n super(networkConnection);\n this.env = new AuriEnv(networkConnection);\n if (helpers.isSameAddress(underlyingAsset, consts.ETHAddress)) {\n this.auToken = new Contract(auToken, abis.AuETHABI.abi, networkConnection.provider) as AuETH;\n } else {\n this.auToken = new Contract(\n auToken,\n abis.AuErc20ABI.abi,\n networkConnection.provider\n ) as AuErc20;\n }\n this.underlying = new Token(underlyingAsset, helpers.getDecimal(underlyingAsset));\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getUnderlyingPrice(): Promise<BigNumber> {\n return fetchPrice(this.underlying.address, this._networkConnection.provider);\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getPlyPrice(): Promise<BigNumber> {\n return fetchPrice(consts.networkAddresses.tokens.PLY, this._networkConnection.provider);\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n protected async getRewardSpeeds(): Promise<RewardSpeeds> {\n var speeds = await this.env.auriLens.getRewardSpeeds(\n this.env.comptroller.address,\n this.auToken.address\n );\n return speeds;\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getTotalTokenBorrowed(): Promise<TokenAmount> {\n return new TokenAmount(this.underlying, (await this.auToken.totalBorrows()).toString());\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getTotalTokenDeposited(): Promise<TokenAmount> {\n const [totalBorrow, totalCash] = await Promise.all([\n this.getTotalTokenBorrowed(),\n this.auToken.getCash(),\n ]);\n return new TokenAmount(\n this.underlying,\n BN.from(new TokenAmount(this.underlying, totalCash.toString()).rawAmount())\n .add(totalBorrow.rawAmount())\n .toString()\n );\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getDepositAPY(): Promise<BigNumber> {\n const supplyRatePerTimestamp = await this.auToken.supplyRatePerTimestamp();\n const supplyRatePerDay = new BigNumber(supplyRatePerTimestamp.toString())\n .multipliedBy(ONE_DAY)\n .div(helpers.decimalFactor(18));\n\n return new BigNumber(supplyRatePerDay.plus(1)).pow(365).minus(1);\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getBorrowAPY(): Promise<BigNumber> {\n const borrowRatePerTimestamp = await this.auToken.borrowRatePerTimestamp();\n const borrowRatePerDay = new BigNumber(borrowRatePerTimestamp.toString())\n .multipliedBy(ONE_DAY)\n .div(helpers.decimalFactor(18));\n return new BigNumber(borrowRatePerDay.plus(1)).pow(365).minus(1);\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getCollateralRatio(): Promise<BigNumber> {\n return this.env.comptroller.markets(this.auToken.address).then((res: any) => {\n return new BigNumber(res.collateralFactorMantissa.toString()).div(helpers.decimalFactor(18));\n });\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getBorrowPlyAPY(): Promise<BigNumber> {\n const [totalBorrowed, rewardSpeeds, plyPrice, underlyingPrice] = await Promise.all([\n this.getTotalTokenBorrowed(),\n this.getRewardSpeeds(),\n this.getPlyPrice(),\n this.getUnderlyingPrice(),\n ]);\n return helpers.calcLMRewardApr(\n calcValuation(\n new TokenAmount(PLYToken, rewardSpeeds.plyRewardBorrowSpeed.toString()),\n plyPrice\n ),\n underlyingPrice.multipliedBy(totalBorrowed.formattedAmount()),\n consts.ONE_YEAR\n );\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getDepositPlyAPY(): Promise<BigNumber> {\n const [totalDeposited, rewardSpeeds, plyPrice, underlyingPrice] = await Promise.all([\n this.getTotalTokenDeposited(),\n this.getRewardSpeeds(),\n this.getPlyPrice(),\n this.getUnderlyingPrice(),\n ]);\n return helpers.calcLMRewardApr(\n calcValuation(\n new TokenAmount(PLYToken, rewardSpeeds.plyRewardSupplySpeed.toString()),\n plyPrice\n ),\n underlyingPrice.multipliedBy(totalDeposited.formattedAmount()),\n consts.ONE_YEAR\n );\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getDepositNearAPY(): Promise<BigNumber> {\n const [totalDeposited, underlyingPrice] = await Promise.all([\n this.getTotalTokenDeposited(),\n this.getUnderlyingPrice(),\n ]);\n let depositNEARApy = helpers.calcLMRewardApr(\n await fetchValuation(this.getDepositNEARRewardPerWeek(), this._networkConnection.provider),\n underlyingPrice.multipliedBy(totalDeposited.formattedAmount()),\n 52\n );\n return depositNEARApy;\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getBorrowNearAPY(): Promise<BigNumber> {\n const [totalBorrowed, underlyingPrice] = await Promise.all([\n this.getTotalTokenBorrowed(),\n this.getUnderlyingPrice(),\n ]);\n let borrowNEARApy = helpers.calcLMRewardApr(\n await fetchValuation(this.getBorrowNEARRewardPerWeek(), this._networkConnection.provider),\n underlyingPrice.multipliedBy(totalBorrowed.formattedAmount()),\n 52\n );\n return borrowNEARApy;\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getDepositMetaAPY(): Promise<BigNumber> {\n return new BigNumber(0);\n // const [totalDeposited, underlyingPrice] = await Promise.all([\n // this.getTotalTokenDeposited(),\n // fetchPrice(this.underlying.address, this._networkConnection.provider),\n // ]);\n // let depositMETAApy;\n // if (helpers.isSameAddress(this.underlying.address, consts.networkAddresses.tokens.stNEAR)) {\n // depositMETAApy = helpers.calcLMRewardApr(\n // await fetchValuation(\n // TokenAmount.fromAddressAndAmount(consts.networkAddresses.tokens.META, '250000', false),\n // this._networkConnection.provider\n // ),\n // underlyingPrice.multipliedBy(totalDeposited.formattedAmount()),\n // 12\n // );\n // } else {\n // depositMETAApy = new BigNumber(0);\n // }\n // return depositMETAApy;\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getDepositStaderAPY(): Promise<BigNumber> {\n return new BigNumber(0);\n // const rewardStartTime = 1675346400;\n // const currentTime = helpers.getCurrentTimestamp();\n // if (currentTime < rewardStartTime) {\n // return new BigNumber(0);\n // }\n // const [totalDeposited, underlyingPrice] = await Promise.all([\n // this.getTotalTokenDeposited(),\n // fetchPrice(this.underlying.address, this._networkConnection.provider),\n // ]);\n // let depositStaderApy;\n // if (helpers.isSameAddress(this.underlying.address, consts.networkAddresses.tokens.NEARX)) {\n // depositStaderApy = helpers.calcLMRewardApr(\n // await fetchValuation(\n // TokenAmount.fromAddressAndAmount(consts.networkAddresses.tokens.STADER, '40', false),\n // this._networkConnection.provider\n // ),\n // underlyingPrice.multipliedBy(totalDeposited.formattedAmount()),\n // 365\n // );\n // } else {\n // depositStaderApy = new BigNumber(0);\n // }\n // return depositStaderApy;\n }\n\n public async getDetails(): Promise<MoneyMarketDetails> {\n const [totalDeposited, totalBorrowed, depositAPY, borrowAPY, collateralRatio, rewardSpeeds] =\n await Promise.all([\n this.getTotalTokenDeposited(),\n this.getTotalTokenBorrowed(),\n this.getDepositAPY(),\n this.getBorrowAPY(),\n this.getCollateralRatio(),\n this.getRewardSpeeds(),\n ]);\n const [\n depositPlyAPY,\n borrowPlyAPY,\n depositNearAPY,\n borrowNearAPY,\n depositMetaAPY,\n staderDepositApy,\n ] = await Promise.all([\n this.getDepositPlyAPY(),\n this.getBorrowPlyAPY(),\n this.getDepositNearAPY(),\n this.getBorrowNearAPY(),\n this.getDepositMetaAPY(),\n this.getDepositStaderAPY(),\n ]);\n return {\n auTokenAddress: this.auToken.address,\n totalTokenDeposited: totalDeposited,\n totalTokenBorrowed: totalBorrowed,\n depositApy: depositAPY.toNumber(),\n depositPlyApy: depositPlyAPY.toNumber(),\n borrowApy: borrowAPY.toNumber(),\n borrowPlyApy: borrowPlyAPY.toNumber() * -1,\n collateralRatio: collateralRatio.toNumber(),\n depositPlyPerWeek: new TokenAmount(\n PLYToken,\n rewardSpeeds.plyRewardSupplySpeed.mul(consts.ONE_DAY).mul(7).toString()\n ),\n borrowPlyPerWeek: new TokenAmount(\n PLYToken,\n rewardSpeeds.plyRewardBorrowSpeed.mul(consts.ONE_DAY).mul(7).toString()\n ),\n depositNEARApy: depositNearAPY.toNumber(),\n borrowNEARApy: borrowNearAPY.toNumber() * -1,\n depositMETAApy: depositMetaAPY.toNumber(),\n staderDepositApy: staderDepositApy.toNumber(),\n };\n }\n\n public async getUserBorrowBalance(userAddress: string): Promise<TokenAmount> {\n const totalBorrow: BN = await this.auToken.callStatic.borrowBalanceCurrent(userAddress);\n return new TokenAmount(this.underlying, totalBorrow.toString());\n }\n\n public async getUserDepositBalance(userAddress: string): Promise<TokenAmount> {\n const totalDeposit: BN = await this.auToken.callStatic.balanceOfUnderlying(userAddress);\n return new TokenAmount(this.underlying, totalDeposit.toString());\n }\n\n private getDepositNEARRewardPerWeek(): TokenAmount {\n const NEARToken = new Token(\n consts.networkAddresses.tokens.WNEAR,\n helpers.getDecimal(consts.networkAddresses.tokens.WNEAR)\n );\n const rewardStartTime = 1650636000;\n const rewardStopTime = 1651845600; // May 06, 2022 2 PM GMT\n const currentTime = helpers.getCurrentTimestamp();\n if (currentTime <= rewardStopTime && currentTime > rewardStartTime) {\n const reward =\n consts.DEPOSIT_NEAR_REWARDS_PER_WEEK[this.underlying.address.toLocaleLowerCase()] ?? '0';\n return new TokenAmount(NEARToken, reward, false);\n } else {\n return new TokenAmount(NEARToken, '0');\n }\n }\n\n private getBorrowNEARRewardPerWeek(): TokenAmount {\n const NEARToken = new Token(\n consts.networkAddresses.tokens.WNEAR,\n helpers.getDecimal(consts.networkAddresses.tokens.WNEAR)\n );\n const rewardStartTime = 1650636000;\n const rewardStopTime = 1651845600; // May 06, 2022 2 PM GMT\n const currentTime = helpers.getCurrentTimestamp();\n if (currentTime <= rewardStopTime && currentTime > rewardStartTime) {\n const reward =\n consts.BORROW_NEAR_REWARDS_PER_WEEK[this.underlying.address.toLocaleLowerCase()] ?? '0';\n return new TokenAmount(NEARToken, reward, false);\n } else {\n return new TokenAmount(NEARToken, '0');\n }\n }\n public async mintCap(): Promise<TokenAmount> {\n return new TokenAmount(\n this.underlying,\n (await this.env.comptroller.mintCaps(this.auToken.address)).toString()\n );\n }\n public async borrowCap(): Promise<TokenAmount> {\n return new TokenAmount(\n this.underlying,\n (await this.env.comptroller.borrowCaps(this.auToken.address)).toString()\n );\n }\n\n public async getDepositBorrowValue(userAddress: Address) {\n const [price, depositBalance, borrowBalance] = await Promise.all([\n this.getUnderlyingPrice(),\n this.getUserDepositBalance(userAddress),\n this.getUserBorrowBalance(userAddress),\n ]);\n const suppliedValue = price.multipliedBy(depositBalance.formattedAmount());\n const borrowedValue = price.multipliedBy(borrowBalance.formattedAmount());\n return {\n suppliedValue,\n borrowedValue,\n };\n }\n\n public async getApyWithoutIncentive(userAddress: Address): Promise<Apy> {\n const [price, depositApy, borrowApy, depositBalance, borrowBalance] = await Promise.all([\n this.getUnderlyingPrice(),\n this.getDepositAPY(),\n this.getBorrowAPY(),\n this.getUserDepositBalance(userAddress),\n this.getUserBorrowBalance(userAddress),\n ]);\n const suppliedValue = price.multipliedBy(depositBalance.formattedAmount());\n const borrowedValue = price.multipliedBy(borrowBalance.formattedAmount());\n const sum = helpers.calcNetApy(suppliedValue, depositApy, borrowedValue, borrowApy);\n return {\n sum,\n suppliedValue,\n borrowedValue,\n };\n }\n\n public async getApyWithIncentive(userAddress: Address): Promise<Apy> {\n const [\n price,\n depositApy,\n borrowApy,\n depositBalance,\n borrowBalance,\n nearDepositApy,\n plyDepositApy,\n metaDepositApy,\n nearBorrowApy,\n plyBorrowApy,\n ] = await Promise.all([\n this.getUnderlyingPrice(),\n this.getDepositAPY(),\n this.getBorrowAPY(),\n this.getUserDepositBalance(userAddress),\n this.getUserBorrowBalance(userAddress),\n this.getDepositNearAPY(),\n this.getDepositPlyAPY(),\n this.getDepositMetaAPY(),\n this.getBorrowNearAPY(),\n this.getBorrowPlyAPY(),\n ]);\n // idk why i cannot put this to promise.all, txds keep getting error\n const staderDepositApy = await this.getDepositStaderAPY();\n const suppliedValue = price.multipliedBy(depositBalance.formattedAmount());\n const borrowedValue = price.multipliedBy(borrowBalance.formattedAmount());\n const totalDepositApy = depositApy\n .plus(nearDepositApy)\n .plus(plyDepositApy)\n .plus(metaDepositApy)\n .plus(staderDepositApy);\n const totalBorrowApy = borrowApy.plus(nearBorrowApy).plus(plyBorrowApy);\n const sum = helpers.calcNetApy(suppliedValue, totalDepositApy, borrowedValue, totalBorrowApy);\n return {\n sum,\n suppliedValue,\n borrowedValue,\n };\n }\n}\n\nexport class MoneyMarketReadWrite extends MoneyMarketRead {\n protected _EthRepayHelper: EthRepayHelper;\n constructor(networkConnection: NetworkConnection, auToken: Address, underlyingAsset: Address) {\n super(networkConnection, auToken, underlyingAsset);\n this._EthRepayHelper = new Contract(\n consts.networkAddresses.misc.ETHREPAYHELPER,\n abis.EthRepayHelperABI.abi,\n networkConnection.provider\n ) as EthRepayHelper;\n }\n\n public async deposit(amount: TokenAmount): Promise<TransactionResponse> {\n if (helpers.isSameAddress(amount.token.address, consts.ETHAddress)) {\n return (this.auToken as AuETH)\n .connect(this._networkConnection.signer!)\n .mint({ value: amount.rawAmount() });\n } else {\n return (this.auToken as AuErc20)\n .connect(this._networkConnection.signer!)\n .mint(amount.rawAmount());\n }\n }\n public async borrow(amount: TokenAmount): Promise<TransactionResponse> {\n return this.auToken.connect(this._networkConnection.signer!).borrow(amount.rawAmount());\n }\n public async withdraw(amount: TokenAmount): Promise<TransactionResponse> {\n if (new BigNumber(amount.rawAmount()).lt(0)) {\n return this.auToken.connect(this._networkConnection.signer!).redeemUnderlying(consts.INF);\n }\n return this.auToken\n .connect(this._networkConnection.signer!)\n .redeemUnderlying(amount.rawAmount());\n }\n public async repay(amount: TokenAmount): Promise<TransactionResponse> {\n if (helpers.isSameAddress(amount.token.address, consts.ETHAddress)) {\n return this._EthRepayHelper\n .connect(this._networkConnection.signer!)\n .repayBorrow({ value: amount.rawAmount() });\n } else {\n if (new BigNumber(amount.rawAmount()).lt(0)) {\n return this.auToken.connect(this._networkConnection.signer!).repayBorrow(consts.INF);\n } else {\n return this.auToken\n .connect(this._networkConnection.signer!)\n .repayBorrow(amount.rawAmount());\n }\n }\n }\n public async enableCollateral(): Promise<TransactionResponse> {\n return this.env.comptroller\n .connect(this._networkConnection.signer!)\n .enterMarkets([this.auToken.address]);\n }\n public async disableCollateral(): Promise<TransactionResponse> {\n return this.env.comptroller\n .connect(this._networkConnection.signer!)\n .exitMarket(this.auToken.address);\n }\n}\n\nexport class MoneyMarket extends BlockchainEntity {\n protected address: Address;\n\n protected underlying: Address;\n constructor(address: string, underlying: string) {\n super();\n this.address = helpers.validateAndParseAddress(address);\n this.underlying = helpers.validateAndParseAddress(underlying);\n }\n public read(networkConnection: NetworkConnection): MoneyMarketRead {\n return new MoneyMarketRead(networkConnection, this.address, this.underlying);\n }\n\n public readWrite(networkConnection: NetworkConnection): MoneyMarketReadWrite {\n return new MoneyMarketReadWrite(networkConnection, this.address, this.underlying);\n }\n}\n","import { TransactionResponse } from '@ethersproject/abstract-provider';\nimport BigNumber from 'bignumber.js';\nimport { BigNumber as BN } from 'ethers';\nimport * as consts from '../consts';\nimport { AuriEnv, BlockchainEntity, BlockchainEntityRead, Token, TokenAmount } from '../entities';\nimport * as helpers from '../helpers';\nimport { Address, NetworkConnection, UserLockingDetails } from '../types';\n\nconst LOCKING_DENOMINATOR = BN.from(10000);\nexport class PapermillRead extends BlockchainEntityRead {\n public readonly plyToken: Token;\n public readonly pulpToken: Token;\n public readonly env: AuriEnv;\n\n constructor(networkConnection: NetworkConnection) {\n super(networkConnection);\n this.env = new AuriEnv(networkConnection);\n\n let plyAddress = consts.networkAddresses.tokens.PLY;\n let pulpAddress = consts.networkAddresses.tokens.PULP;\n\n this.plyToken = new Token(plyAddress, helpers.getDecimal(plyAddress));\n this.pulpToken = new Token(pulpAddress, helpers.getDecimal(pulpAddress));\n }\n\n public async getPlyBalance(userAddress: Address): Promise<TokenAmount> {\n const plyBalance = await this.env.ply.balanceOf(userAddress);\n return new TokenAmount(this.plyToken, plyBalance.toString());\n }\n\n public async getPulpBalance(userAddress: Address): Promise<TokenAmount> {\n const pulpBalance = await this.env.pulp.balanceOf(userAddress);\n return new TokenAmount(this.pulpToken, pulpBalance.toString());\n }\n\n /**\n * Get all unclaimed PLY reward of the user in all markets + all staking pools\n */\n public async getUnclaimedPlyReward(userAddress: Address): Promise<TokenAmount> {\n let rewardBalancesMetadata = await this.env.auriLens.callStatic.claimRewards(\n this.env.comptroller.address,\n this.env.auriFairLaunch.address,\n consts.ALL_STAKING_POOLS,\n { from: userAddress }\n );\n\n return new TokenAmount(this.plyToken, rewardBalancesMetadata.plyAccrured.toString());\n }\n\n public getWeek(timestamp: number): number {\n return BN.from(timestamp - consts.REWARD_CLAIM_START)\n .div(consts.ONE_WEEK)\n .toNumber();\n }\n\n /**\n * Get all locking details of the user in all markets + all staking pools\n */\n public async getLockingDetails(userAddress: Address): Promise<UserLockingDetails> {\n const currentWeek = this.getWeek(helpers.getCurrentTimestamp());\n\n const values = await Promise.all([\n this.env.auriLens.getPercentLock(this.env.pulp.address, userAddress, currentWeek),\n this.env.auriLens.getPercentLock(this.env.pulp.address, userAddress, currentWeek + 1),\n this.getUnclaimedPlyReward(userAddress),\n ]);\n\n let percentLockCurrentWeek = BN.from(values[0]);\n let percentLockNextWeek = BN.from(values[1]);\n let totalRewards = values[2] as TokenAmount;\n\n let [pulpAmountCurrentWeek, plyAmountCurrentWeek] = await this.env.pulp.calcLockAmount(\n userAddress,\n totalRewards.rawAmount()\n );\n\n // Predict next week lock amount = totalRewards * percentLock next week\n // This doesn't take (the reward that user might earn in the next week) into account\n let plyAmountNextWeek = percentLockNextWeek\n .mul(totalRewards.rawAmount())\n .div(LOCKING_DENOMINATOR);\n let pulpAmountNextWeek = BN.from(totalRewards.rawAmount()).sub(plyAmountNextWeek);\n\n // we need to divide these two number by 10000 and multiple by 100 to get the percentage\n // I need to use BigNumber to do this because BN of ethers.js doesn't support floating point\n let currentUnlockPortion = LOCKING_DENOMINATOR.sub(percentLockCurrentWeek).toString();\n let nextUnlockPortion = LOCKING_DENOMINATOR.sub(percentLockNextWeek).toString();\n\n return {\n vestingStart: consts.REWARD_CLAIM_START,\n currentUnlockPortion: new BigNumber(currentUnlockPortion).dividedBy(100).toNumber(),\n accruedPly: totalRewards,\n currentPly: new TokenAmount(this.plyToken, plyAmountCurrentWeek.toString()),\n currentPulp: new TokenAmount(this.pulpToken, pulpAmountCurrentWeek.toString()),\n //\n nextUnlockPortion: new BigNumber(nextUnlockPortion).dividedBy(100).toNumber(),\n nextPly: new TokenAmount(this.plyToken, plyAmountNextWeek.toString()),\n nextPulp: new TokenAmount(this.pulpToken, pulpAmountNextWeek.toString()),\n };\n }\n\n /**\n * Get the first timestamp that the unlockPortion reach the target\n *\n * @param userAddress currently doesn't matter\n * @param targetUnlockPortion unlockPortion target\n */\n public async getTimestampToUnlock(\n userAddress: Address,\n targetUnlockPortion: number\n ): Promise<number> {\n let weekId = await this.env.auriLens.getWeekToUnlock(\n this.env.pulp.address,\n userAddress,\n targetUnlockPortion * 100\n );\n\n return consts.REWARD_CLAIM_START + consts.ONE_WEEK * weekId.toNumber();\n }\n\n /**\n * Get the start timestamp of next week of the papermill contract.\n *\n * This is a sync function!\n *\n * @returns the timestamp in seconds\n */\n public getNextWeekTimestamp(): number {\n const nextWeek = this.getWeek(helpers.getCurrentTimestamp()) + 1;\n return consts.REWARD_CLAIM_START + consts.ONE_WEEK * nextWeek;\n }\n\n public async getUnlockPortionAt(userAddress: Address, timestamp: number): Promise<number> {\n let lockPortion = await this.env.auriLens.getPercentLock(\n this.env.pulp.address,\n userAddress,\n this.getWeek(timestamp)\n );\n\n let unlockPortion = LOCKING_DENOMINATOR.sub(lockPortion);\n\n return unlockPortion.toNumber() / 100;\n }\n}\n\nexport class PapermillReadWrite extends PapermillRead {\n constructor(networkConnection: NetworkConnection) {\n super(networkConnection);\n }\n\n /**\n * Redeem PLY from PULP and transfer PLY to another address\n * @param recipient Address that will receive the PLY.\n * @param amount Amount of PULP to be converted to PLY.\n * Set to ethers.constants.MaxUint256 for max redeem.\n */\n public async redeem(recipient: Address, amount: TokenAmount): Promise<TransactionResponse> {\n return this.env.pulp\n .connect(this._networkConnection.signer!)\n .redeem(recipient, amount.rawAmount());\n }\n\n /**\n * Redeem PLY from PULP and transfer PLY to msg.sender\n * @param amount Amount of PULP to be converted to PLY.\n * Set to ethers.constants.MaxUint256 for max redeem.\n */\n public async selfRedeem(amount: TokenAmount): Promise<TransactionResponse> {\n let msgSender: string = await this._networkConnection.signer!.getAddress();\n return this.redeem(msgSender, amount);\n }\n}\n\nexport class Papermill extends BlockchainEntity {\n constructor() {\n super();\n }\n public read(networkConnection: NetworkConnection): PapermillRead {\n return new PapermillRead(networkConnection);\n }\n\n public readWrite(networkConnection: NetworkConnection): PapermillReadWrite {\n return new PapermillReadWrite(networkConnection);\n }\n}\n","import { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { BigNumber as BN } from 'ethers';\nimport * as consts from '../consts';\nimport { AuriEnv, BlockchainEntity, BlockchainEntityRead, Token, TokenAmount } from '../entities';\nimport * as helpers from '../helpers';\nimport { getBlocksTimestamp, isSameAddress, sleep, sortEvents } from '../helpers';\nimport * as AuriAPI from '../helpers/aurigami-api';\nimport {\n Address,\n NetworkConnection,\n PlyBetMadeEvent,\n PlyGameBetResult,\n PlyGameLeaderboardItem,\n} from '../types';\n\nexport class PlyGameRead extends BlockchainEntityRead {\n public readonly plyToken: Token;\n public readonly pulpToken: Token;\n public readonly env: AuriEnv;\n\n public constructor(networkConnection: NetworkConnection) {\n super(networkConnection);\n this.env = new AuriEnv(networkConnection);\n\n let plyAddress = consts.networkAddresses.tokens.PLY;\n let pulpAddress = consts.networkAddresses.tokens.PULP;\n this.plyToken = new Token(plyAddress, helpers.getDecimal(plyAddress));\n this.pulpToken = new Token(pulpAddress, helpers.getDecimal(pulpAddress));\n }\n\n private parseBetMakeEvent(event: PlyBetMadeEvent): PlyGameBetResult {\n let outcome = ['bigWin', 'win', 'lose', 'noImpact'][event.args.outcome];\n let betAmount = event.args.amount;\n // 0%, 0%, 100%, 2%\n // big win, win, lose, no impact\n let lostAmount = betAmount.mul([0, 0, 100, 2][event.args.outcome]).div(100);\n let unlock = betAmount.mul([10, 1, 0, 0][event.args.outcome]);\n return {\n player: event.args.player,\n lostAmount: new TokenAmount(this.plyToken, lostAmount.toString()),\n unlockedPulpAmount: new TokenAmount(this.pulpToken, unlock.toString()),\n outcome: outcome,\n transactionHash: event.transactionHash,\n block: event.blockNumber,\n timestamp: 0, // will be filled later\n };\n }\n\n private async attachTimestamp(results: PlyGameBetResult[]): Promise<PlyGameBetResult[]> {\n let blockNumbers = results.map((e) => e.block);\n let blockstimestamp = await getBlocksTimestamp(this._networkConnection.provider, blockNumbers);\n return results.map((e, i) => ({ ...e, timestamp: blockstimestamp[i] }));\n }\n\n /**\n * Get 100 most recent bets of the market users\n */\n public async getUserPlyGameHistory(user: Address): Promise<PlyGameBetResult[]> {\n let block100 = await this.env.plygame.getLastBlock(user, 100);\n\n if (block100.eq(0)) {\n return [];\n }\n\n let filter = this.env.plygame.filters.BetMade(user);\n let events = await this.env.plygame.queryFilter(filter, block100.toNumber());\n // Sort descending by block number\n sortEvents(events).reverse();\n return this.attachTimestamp(events.map((event) => this.parseBetMakeEvent(event)));\n }\n\n /**\n * Get current jackpot amount\n */\n public async currentJackpotAmount(): Promise<TokenAmount> {\n let jackpot = await this.env.plygame.currentJackpotAmount();\n return new TokenAmount(this.plyToken, jackpot.toString());\n }\n\n public async earlyUnlockedPulpAmount(user: Address): Promise<TokenAmount> {\n let earlyUnlockedPulpAmount = await this.env.plygame.totalPlyUnlockedEarly(user);\n return new TokenAmount(this.pulpToken, earlyUnlockedPulpAmount.toString());\n }\n\n public async getPlyGameResultsInTransaction(txHash: Address): Promise<PlyGameBetResult[]> {\n // wait for the tx to be mined if needed.\n // Don't use `waitForTransaction` because it will wait for longer than needed.\n let tx = await this._networkConnection.provider.getTransactionReceipt(txHash);\n\n for (let i = 0; i < 100 && !tx; i++) {\n await sleep(1000); // Sleep for 1 second before retrying\n tx = await this._networkConnection.provider.getTransactionReceipt(txHash);\n }\n\n if (!tx) {\n throw new Error(`Transaction ${txHash} takes too long to be mined`);\n }\n\n let filter = this.env.plygame.filters.BetMade();\n let betMadeEvents: PlyBetMadeEvent[] = tx.logs\n .filter((log) => isSameAddress(log.topics[0], filter.topics![0] as string))\n .map((log) => ({\n ...this.env.plygame.interface.parseLog(log),\n blockNumber: tx.blockNumber,\n transactionHash: txHash,\n })) as unknown as PlyBetMadeEvent[];\n\n return this.attachTimestamp(betMadeEvents.map((e) => this.parseBetMakeEvent(e)));\n }\n\n /**\n * Top 100 users by amount of PULP unlocked\n */\n public async leaderboard(): Promise<PlyGameLeaderboardItem[]> {\n const result = await AuriAPI.getPaginatedApi('/plygame/leaderboard');\n return result.items.map((item, i) => ({\n player: item.user!,\n unlockedPulpAmount: new TokenAmount(this.pulpToken, item.unlockedAmount!),\n gamesPlayed: item.count!,\n }));\n }\n\n public async getLastJackpotResult(): Promise<{ winner: Address; amount: TokenAmount }> {\n // 158 is the storage slot of the jackpot length\n let round = BN.from(\n await this._networkConnection.provider.getStorageAt(this.env.plygame.address, 158)\n );\n let result = await this.env.plygame.jackpotHistory(round.sub(1));\n return {\n winner: result.winner.slice(0, 5) + '...' + result.winner.slice(-3),\n amount: new TokenAmount(this.plyToken, result.amount.toString()),\n };\n }\n\n public async overallLeaderboard(): Promise<PlyGameLeaderboardItem[]> {\n const result = await AuriAPI.getPaginatedApi('/plygame/overallLeaderboard');\n return result.items.map((item) => ({\n player: item.user,\n unlockedPulpAmount: new TokenAmount(this.pulpToken, item.unlockedAmount!),\n gamesPlayed: item.count!,\n }));\n }\n}\n\nexport class PlyGameReadWrite extends PlyGameRead {\n /**\n * Make a single bet\n */\n public async makeBetOnce(amount: TokenAmount): Promise<TransactionResponse> {\n return this.env.plygame\n .connect(this._networkConnection.signer!)\n .makeBetOnce(amount.rawAmount());\n }\n\n public async approve(amount: TokenAmount): Promise<TransactionResponse> {\n return this.env.ply\n .connect(this._networkConnection.signer!)\n .approve(this.env.plygame.address, amount.rawAmount());\n }\n}\n\nexport class PlyGame extends BlockchainEntity {\n constructor() {\n super();\n }\n public read(networkConnection: NetworkConnection): PlyGameRead {\n return new PlyGameRead(networkConnection);\n }\n public readWrite(networkConnection: NetworkConnection): PlyGameReadWrite {\n return new PlyGameReadWrite(networkConnection);\n }\n}\n","import { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { BigNumber as BN } from 'ethers';\nimport { AuriEnv, BlockchainEntity, BlockchainEntityRead, TokenAmount } from '../entities';\nimport { Address, NetworkConnection } from '../types';\n\nexport class PulpRead extends BlockchainEntityRead {\n public readonly env: AuriEnv;\n\n public constructor(networkConnection: NetworkConnection) {\n super(networkConnection);\n this.env = new AuriEnv(networkConnection);\n }\n\n public async remainingEarlyUnlockPulp(user: Address): Promise<BN> {\n return this.env.pulp.earlyRedeems(user);\n }\n}\n\nexport class PulpReadWrite extends PulpRead {\n public async convertEarlyPulp(\n recipient: Address,\n amount: TokenAmount\n ): Promise<TransactionResponse> {\n const amountToRedeem = BN.from(amount.rawAmount());\n return this.env.pulp.connect(this._networkConnection.signer!).redeem(recipient, amountToRedeem);\n }\n}\n\nexport class Pulp extends BlockchainEntity {\n constructor() {\n super();\n }\n public read(networkConnection: NetworkConnection): PulpRead {\n return new PulpRead(networkConnection);\n }\n public readWrite(networkConnection: NetworkConnection): PulpReadWrite {\n return new PulpReadWrite(networkConnection);\n }\n}\n","import { TransactionResponse } from '@ethersproject/abstract-provider';\nimport axios from 'axios';\nimport { ethers } from 'ethers';\nimport { AURORA_PLUS_API_PREFIX, REFERRAL_CAMPAIGNS } from '../consts';\nimport { AuriEnv, BlockchainEntity, BlockchainEntityRead, TokenAmount } from '../entities';\nimport { getBlocksTimestamp } from '../helpers';\nimport * as AuriAPI from '../helpers/aurigami-api';\nimport { Address, NetworkConnection, ReferralReward } from '../types';\nimport { AirdropReadWrite } from './Airdrop';\n\nexport class ReferralRead extends BlockchainEntityRead {\n public readonly env: AuriEnv;\n constructor(networkConnection: NetworkConnection) {\n super(networkConnection);\n this.env = new AuriEnv(networkConnection);\n }\n\n /**\n * Generate a 10-character referral code\n * containing alphanumeric characters.\n */\n protected generateReferralCode(): string {\n let letters = 'abcdefghijklmnopqrstuvwxyz';\n let numbers = '1234567890';\n let charset = letters + letters.toUpperCase() + numbers;\n let R = '';\n for (var i = 0; i < 10; i++) R += charset[Math.floor(Math.random() * charset.length)];\n return R;\n }\n\n /**\n * Get the referral code for a given address, returns empty string if not found.\n *\n * Called to check if a user has a referral code.\n */\n public async getUserReferralCode(userAddr: Address): Promise<string> {\n const result = await this.env.referralDirectoryV2.userReferralCode(userAddr);\n return ethers.utils.parseBytes32String(result);\n }\n\n /**\n * Get referral code that a user was referred by, returns empty string if not found.\n */\n public async getReferralCodeUsed(userAddr: Address): Promise<string> {\n const result = await this.env.referralDirectoryV2.referralCodeUsed(userAddr);\n return ethers.utils.parseBytes32String(result);\n }\n\n /**\n * Get owner of a referral code, returns zero address if not found.\n */\n public async getReferralCodeOwner(code: string): Promise<Address> {\n const referralCode = ethers.utils.formatBytes32String(code);\n return this.env.referralDirectoryV2.referralCodeOwner(referralCode);\n }\n\n /**\n * Get referrals of a user, sorted descending by timestamp.\n */\n public async getReferralsList(userAddr: Address): Promise<{ user: string; timestamp: number }[]> {\n const result = await AuriAPI.getPaginatedApi('/referral/list', { address: userAddr });\n const blocks = result.items.map((item) => item.blockNumber!);\n const blocksTimestamp = await getBlocksTimestamp(this._networkConnection.provider, blocks);\n const items = result.items.map((item, i) => ({\n user: item.user!,\n timestamp: blocksTimestamp[i],\n }));\n return items;\n }\n\n /**\n * Array of rewards, sorted by time of the referral period (from latest to oldest)\n */\n public async referralRewards(userAddr: Address): Promise<ReferralReward[]> {\n const result = await AuriAPI.getPaginatedApi('/referral/rewards', { address: userAddr });\n let items: ReferralReward[] = result.items.map((item, i) => ({\n campaign: item.campaign!,\n userAddr: userAddr,\n isReferrer: (item.campaign as string).includes('referrer'),\n rewardTokenAmount: TokenAmount.fromAddressAndAmount(item.token, item.amount),\n startTime: REFERRAL_CAMPAIGNS[item.campaign].start,\n endTime: REFERRAL_CAMPAIGNS[item.campaign].end,\n transactionHash: item.transactionHash ?? null,\n refereeAddress: null,\n }));\n\n return items;\n }\n\n /**\n * Top 50 reward earners from the last round, sorted by token amount\n */\n public async leaderboard(campaign: string): Promise<ReferralReward[]> {\n const result = await AuriAPI.getPaginatedApi('/referral/leaderboard', { campaign: campaign });\n const items: ReferralReward[] = result.items.map((item, i) => ({\n campaign: campaign,\n userAddr: item.user!,\n isReferrer: (item.campaign as string).includes('referrer'),\n rewardTokenAmount: TokenAmount.fromAddressAndAmount(item.token, item.amount),\n startTime: REFERRAL_CAMPAIGNS[item.campaign].start,\n endTime: REFERRAL_CAMPAIGNS[item.campaign].end,\n transactionHash: null,\n refereeAddress: null,\n }));\n items.sort((a, b) => b.rewardTokenAmount.compare(a.rewardTokenAmount));\n return items;\n }\n\n /**\n * current number of slots under a referral code being used that exceed minimum deposit amount\n */\n public async slotsInUse(): Promise<number> {\n let result = await AuriAPI.getApi('/referral/slotsInUse');\n return result;\n }\n\n public totalReferralSlots() {\n return 500;\n }\n\n public async queuePosition(address: Address): Promise<number> {\n let result = await AuriAPI.getApi('/referral/queuePosition', { address: address });\n return result;\n }\n\n /**\n * a way to determine qualification status of a user. null if not referred yet,\n * qualified if referred + min deposit, notQualified if referred + min deposit\n * not reached or withdrew too early\n */\n public async userReferralStatus(userAddr: Address): Promise<string> {\n let result: number = await AuriAPI.getApi('/referral/referralStatus', { address: userAddr });\n switch (result) {\n case -1:\n return 'notReferred';\n case 0:\n return 'notQualified';\n case 1:\n return 'Qualified';\n default:\n return 'Withdrawn';\n }\n }\n\n public async isWhitelistedAddress(address: Address): Promise<boolean> {\n let result = await this.env.referralDirectoryV2.isUserWhitelisted(address);\n return result.eq(1);\n }\n\n public async isOnAuroraPlus(address: Address): Promise<boolean> {\n let resp = await axios.get(AURORA_PLUS_API_PREFIX + address);\n\n return resp.data.status == 'active';\n }\n\n public async isNewUserAtReferralTime(address: Address): Promise<boolean> {\n let result: boolean = await AuriAPI.getApi('/referral/isNewUser', { address: address });\n return result;\n }\n\n public async depositedMoreThanMinimumAmount(address: Address): Promise<boolean> {\n let result: boolean = await AuriAPI.getApi('/referral/depositedEnough', { address: address });\n return result;\n }\n}\n\nexport class ReferralReadWrite extends ReferralRead {\n /**\n * Generate a referral code for a given address.\n *\n * Called when an user want to creates his own referral code\n */\n public async registerNewReferralCode(): Promise<TransactionResponse> {\n const referralCode = ethers.utils.formatBytes32String(this.generateReferralCode());\n return this.env.referralDirectoryV2\n .connect(this._networkConnection.signer!)\n .registerNewUserReferralCode(referralCode);\n }\n\n /**\n * Called when an user confirms he is referred by a specified code\n */\n public async useReferralCode(code: string): Promise<TransactionResponse> {\n const referralCode = ethers.utils.formatBytes32String(code);\n return this.env.referralDirectoryV2\n .connect(this._networkConnection.signer!)\n .registerReferralCodeUsed(referralCode);\n }\n\n /**\n * Claim all unclaimed rewards for a given user\n */\n public async claimReferralRewards(): Promise<TransactionResponse> {\n const unclaimedRewards = (\n await this.referralRewards(await this._networkConnection.signer!.getAddress())\n ).filter((reward) => reward.transactionHash == null);\n const campaigns = unclaimedRewards.map((reward) => reward.campaign);\n const tokens = unclaimedRewards.map((reward) => reward.rewardTokenAmount.token.address);\n return new AirdropReadWrite(this._networkConnection).redeemMultiple(campaigns, tokens);\n }\n}\n\nexport class Referral extends BlockchainEntity {\n constructor() {\n super();\n }\n public read(networkConnection: NetworkConnection): ReferralRead {\n return new ReferralRead(networkConnection);\n }\n\n public readWrite(networkConnection: NetworkConnection): ReferralReadWrite {\n return new ReferralReadWrite(networkConnection);\n }\n}\n","import { IERC20 } from '@aurigami/contracts/typechain';\nimport { TransactionResponse } from '@ethersproject/abstract-provider';\nimport BigNumber from 'bignumber.js';\nimport { BigNumber as BN, Contract } from 'ethers';\nimport { EIP20InterfaceABI } from '../abis';\nimport * as consts from '../consts';\nimport {\n AuriEnv,\n BlockchainEntity,\n BlockchainEntityRead,\n PLYWNEARToken,\n Token,\n TokenAmount,\n} from '../entities';\nimport { calcLMRewardApr, getDecimal } from '../helpers';\nimport { fetchValuation } from '../helpers/priceFetcher';\nimport { NetworkConnection, PLYWNEARPoolDetails, TokenAPY } from '../types';\n\nexport class StakingRead extends BlockchainEntityRead {\n public readonly env: AuriEnv;\n constructor(networkConnection: NetworkConnection) {\n super(networkConnection);\n this.env = new AuriEnv(networkConnection);\n }\n\n public async getPLYWNEARPoolDetails(): Promise<PLYWNEARPoolDetails> {\n const { stakedLiquidity, rewardPerSeconds } = await this.env.auriFairLaunch\n .getPoolInfo(consts.PLYWNEAR_POOL_ID)\n .then((res) => {\n const endedTime = res.endTime;\n const startTime = res.startTime;\n const now = Date.now() / 1000;\n // If the pool has ended or not started, return 0 reward per second\n if (endedTime < now || startTime > now) {\n return {\n stakedLiquidity: res.totalStake,\n rewardPerSeconds: res.rewardPerSeconds.map((_) => BN.from(0)),\n };\n }\n return { stakedLiquidity: res.totalStake, rewardPerSeconds: res.rewardPerSeconds };\n });\n\n let stakedLiquidityAmount = new TokenAmount(PLYWNEARToken, stakedLiquidity!.toString());\n\n var totalStakeValuation: BigNumber = await fetchValuation(\n stakedLiquidityAmount,\n this._networkConnection.provider\n );\n\n var promises = [];\n\n // Calculate the reward per second in USD\n for (let i = 0; i < rewardPerSeconds!.length; i++) {\n let rewardTokenAddress = consts.PLYWNEAR_REWARD_TOKENS[i];\n let rewardToken = new Token(rewardTokenAddress, getDecimal(rewardTokenAddress));\n let rewardPerSecond = rewardPerSeconds![i];\n promises.push(\n fetchValuation(\n new TokenAmount(rewardToken, rewardPerSecond!.toString()),\n this._networkConnection.provider\n )\n );\n }\n\n let APYs: TokenAPY[] = [];\n (await Promise.all(promises)).forEach((rewardPerSecondValuation, i) => {\n let rewardTokenAddress = consts.PLYWNEAR_REWARD_TOKENS[i];\n let apy = calcLMRewardApr(\n rewardPerSecondValuation,\n totalStakeValuation,\n consts.ONE_DAY * 365\n ).toFixed(consts.DECIMAL_PRECISION);\n\n APYs.push({\n address: rewardTokenAddress,\n apy: apy,\n });\n });\n\n return {\n totalStakedLiquidity: stakedLiquidityAmount,\n APYs: APYs,\n };\n }\n\n /**\n * Get amount of staked LP tokens\n */\n public async stakeBalanceOf(user: string): Promise<TokenAmount> {\n const userInfo = await this.env.auriFairLaunch.getUserInfo(consts.PLYWNEAR_POOL_ID, user);\n return new TokenAmount(PLYWNEARToken, userInfo.amount.toString());\n }\n\n /**\n * Get amount of LP token in user wallet\n */\n public async LpBalanceOf(user: string): Promise<TokenAmount> {\n let lpContract = new Contract(\n consts.networkAddresses.tokens.PLYWNEAR,\n EIP20InterfaceABI.abi,\n this._networkConnection.provider\n ) as IERC20;\n let balance = await lpContract.balanceOf(user);\n\n return new TokenAmount(PLYWNEARToken, balance.toString());\n }\n\n public async unclaimedRewardsOf(user: string): Promise<TokenAmount[]> {\n let userInfo = await this.env.auriFairLaunch.callStatic.updateAndGetUserInfo(\n consts.PLYWNEAR_POOL_ID,\n user,\n { from: user }\n );\n\n let rewards = userInfo.unclaimedRewards;\n return rewards.map((reward, i) =>\n TokenAmount.fromAddressAndAmount(consts.PLYWNEAR_REWARD_TOKENS[i], reward.toString())\n );\n }\n}\n\nexport class StakingReadWrite extends StakingRead {\n public async stake(amount: TokenAmount): Promise<TransactionResponse> {\n return this.env.auriFairLaunch\n .connect(this._networkConnection.signer!)\n .deposit(consts.PLYWNEAR_POOL_ID, amount.rawAmount());\n }\n\n public async unstake(amount: TokenAmount): Promise<TransactionResponse> {\n const msgSender = await this._networkConnection.signer!.getAddress();\n const amountInput = BN.from(amount.rawAmount());\n const stakedAmount = BN.from((await this.stakeBalanceOf(msgSender)).rawAmount());\n // unstakeAmount = min(amountInput, stakedAmount - 1)\n const unstakeAmount = amountInput.lt(stakedAmount) ? amountInput : stakedAmount.sub(1);\n return this.env.auriFairLaunch\n .connect(this._networkConnection.signer!)\n .withdraw(consts.PLYWNEAR_POOL_ID, unstakeAmount);\n }\n}\n\nexport class Staking extends BlockchainEntity {\n constructor() {\n super();\n }\n public read(networkConnection: NetworkConnection): StakingRead {\n return new StakingRead(networkConnection);\n }\n\n public readWrite(networkConnection: NetworkConnection): StakingReadWrite {\n return new StakingReadWrite(networkConnection);\n }\n}\n","import { AuToken } from '@aurigami/contracts/typechain';\nimport { TypedEvent } from '@aurigami/contracts/typechain/common';\nimport BigNumber from 'bignumber.js';\nimport type { providers, Signer } from 'ethers';\nimport { BigNumber as BN } from 'ethers';\nimport { TokenAmount } from '../entities/tokenAmount';\n\nexport enum ComptrollerRewardType {\n PLY = 0,\n AURORA,\n}\nexport type NetworkConnection = {\n provider: providers.Provider;\n signer?: Signer;\n};\n\nexport type Address = string;\n\nexport type CurrencyAmount = {\n currency: string;\n amount: string;\n};\n\nexport type TokenValuation = {\n tokenAmount: TokenAmount;\n currencyAmount: CurrencyAmount;\n};\n\nexport type MoneyMarketDetails = {\n auTokenAddress: string;\n totalTokenDeposited: TokenAmount;\n totalTokenBorrowed: TokenAmount;\n depositApy: number;\n depositPlyApy: number;\n borrowApy: number;\n borrowPlyApy: number;\n collateralRatio: number;\n depositPlyPerWeek: TokenAmount;\n borrowPlyPerWeek: TokenAmount;\n depositMETAApy: number;\n depositNEARApy: number;\n borrowNEARApy: number;\n staderDepositApy: number;\n};\n\nexport type UserDetails = {\n markets: UserMarketDetails[];\n borrowLimit: CurrencyAmount;\n borrowableAmount: CurrencyAmount;\n};\n\nexport type UserLockingDetails = {\n vestingStart: number;\n /** % of reward they will receive in PLY, if they claim this week */\n currentUnlockPortion: number;\n //** Amount of PLY rewards that a user has. Equal to currentPly + currentPulp */\n accruedPly: TokenAmount;\n /** Amount of PLY they will receive, if they claim this week */\n currentPly: TokenAmount;\n /** Amount of PULP they will receive, if they claim this week */\n currentPulp: TokenAmount;\n /** % of reward they will receive in PLY, if they claim next week */\n nextUnlockPortion: number;\n /**\n * Amount of PLY they will receive, if they claim next week.\n * This doesn't include the additional reward that they will earn\n * in the next week.\n */\n nextPly: TokenAmount;\n /**\n * Amount of PULP they will receive, if they claim next week.\n * This doesn't include the additional reward that they will earn\n * in the next week.\n */\n nextPulp: TokenAmount;\n};\n\nexport type UserMarketDetails = {\n market: string;\n depositBalance: TokenAmount;\n borrowBalance: TokenAmount;\n isCollateral: boolean;\n maxWithdrawableAmount: TokenAmount;\n collateralRatio: number;\n underlyingPrice: string;\n};\n\nexport type TokenAPY = {\n address: string;\n apy: string;\n};\n\nexport type PLYWNEARPoolDetails = {\n totalStakedLiquidity: TokenAmount;\n APYs: TokenAPY[];\n};\n\nexport enum MarketAction {\n Deposit = 0,\n Borrow,\n Withdraw,\n Repay,\n EnableCollateral,\n DisableCollateral,\n}\n\nexport type HypotheticalStats = {\n newBorrowLimit: CurrencyAmount;\n newBorrowUtilization: number;\n};\n\nexport type AccountAuTokenInfo = {\n token: string;\n deposit: BigNumber;\n borrow: BigNumber;\n};\n\nexport type AccountAuTokensInfo = {\n address: string;\n tokens: AccountAuTokenInfo[];\n};\n\nexport type AuTokenWithUnderlying = AuToken & {\n underlying: string;\n};\n\nexport type ReferralReward = {\n campaign: string;\n /**\n * Truncated user address.\n */\n userAddr: string;\n /**\n * start timetamp of the referral round\n */\n startTime: number;\n /**\n * end timetamp of the referral round\n */\n endTime: number;\n /**\n * referrer's rewards\n */\n isReferrer: boolean;\n /**\n * reward amount\n */\n rewardTokenAmount: TokenAmount;\n /**\n * hash of the transaction on aurorascan (if no, return null)\n */\n transactionHash: string | null;\n\n refereeAddress: string | null;\n};\n\nexport type PlyGameBetResult = {\n player: string;\n /**\n * Bet outcome result\n */\n outcome: string;\n /**\n * ply lost amount\n */\n lostAmount: TokenAmount;\n unlockedPulpAmount: TokenAmount;\n\n block: number;\n timestamp: number;\n /**\n * hash of the transaction on aurorascan (if no, return null)\n */\n transactionHash: string;\n};\n\nexport type PlyGameLeaderboardItem = {\n player: string;\n gamesPlayed: number;\n unlockedPulpAmount: TokenAmount;\n};\n\nexport type PlyBetMadeEvent = TypedEvent<\n [string, BN, number] & { player: string; amount: BN; outcome: number }\n>;\n\nexport type Apy = {\n sum: BigNumber;\n suppliedValue: BigNumber;\n borrowedValue: BigNumber;\n};\n\nexport type UserNotification = {\n message: string;\n userSetting: {\n address: Address;\n mail: string;\n utilisation: number;\n liquidation: boolean;\n }[];\n};\n\nexport type LiquidationEventEntity = {\n liquidator: string;\n borrower: string;\n /** bigint string */\n repayAmount: string;\n marketRepayToken: string;\n /** bigint string */\n seizeTokens: string;\n auTokenCollateral: string;\n txnHash: string;\n blockNumber: number;\n};\n\nexport type LiquidationDetail = {\n liquidationTime: Timestamp;\n tokenAmount: TokenAmount;\n transactionId: string;\n};\n\nexport type Timestamp = number;\n","import { Multicall2 } from '@aurigami/contracts/typechain';\nimport { Contract, ethers } from 'ethers';\nimport { Result } from 'ethers/lib/utils';\nimport * as abis from '../abis';\nimport * as consts from '../consts';\nimport { BlockchainEntityRead } from '../entities';\nimport { NetworkConnection } from '../types';\n\nexport class MulticallRead extends BlockchainEntityRead {\n public readonly multicall: Multicall2;\n constructor(networkConnection: NetworkConnection) {\n super(networkConnection);\n this.multicall = new Contract(\n consts.networkAddresses.misc.MULTICALL,\n abis.Multicall2ABI.abi,\n networkConnection.provider\n ) as Multicall2;\n }\n\n /**\n * Run multiple calls via multicall contract\n */\n public async aggregate(\n calls: {\n contract: Contract;\n method: string;\n args: any[];\n returnTypes: string[];\n }[]\n ): Promise<Result[]> {\n const txns = [];\n // prepare transactions\n for (let i = 0; i < calls.length; i++) {\n const call = calls[i];\n let txn = await call.contract.populateTransaction[call.method](...call.args);\n txns.push({ target: txn.to!, callData: txn.data! });\n }\n\n const response = await this.multicall.callStatic.aggregate(txns);\n\n // parse results\n const decodedReturn = [];\n for (let i = 0; i < calls.length; i++) {\n decodedReturn.push(\n ethers.utils.defaultAbiCoder.decode(calls[i].returnTypes, response.returnData[i])\n );\n }\n return decodedReturn;\n }\n}\n","import { AuToken } from '@aurigami/contracts/typechain';\nimport BigNumber from 'bignumber.js';\nimport { BigNumber as BN } from 'ethers';\nimport * as abis from '../abis';\nimport * as consts from '../consts';\nimport { AuriEnv, BlockchainEntityRead, PLYToken, Token, TokenAmount } from '../entities';\nimport { decimalFactor, getDecimal, getSymbol, isSameAddress } from '../helpers/helpers';\nimport { calcValuation, fetchPrice } from '../helpers/priceFetcher';\nimport * as types from '../types';\nimport { MoneyMarketRead } from './MoneyMarket';\nimport { MulticallRead } from './Multicall';\nimport { StakingRead } from './Staking';\n\nexport class MiscRead extends BlockchainEntityRead {\n public readonly env: AuriEnv;\n public readonly stakingRead: StakingRead;\n constructor(networkConnection: types.NetworkConnection) {\n super(networkConnection);\n this.stakingRead = new StakingRead(networkConnection);\n this.env = new AuriEnv(networkConnection);\n }\n\n public async getUserDetails(userAddress: string): Promise<types.UserDetails> {\n const marketCount = consts.networkAddresses.auTokens.length;\n var userMarketDetails: types.UserMarketDetails[] = [],\n assetsIn: string[];\n var totalBorrowLimit = new BigNumber(0);\n for (const auToken of consts.networkAddresses.auTokens) {\n const userMarketDetail: types.UserMarketDetails = {} as types.UserMarketDetails;\n userMarketDetails.push(userMarketDetail);\n userMarketDetail.market = auToken.underlying;\n const moneyMarket: MoneyMarketRead = new MoneyMarketRead(\n this._networkConnection,\n auToken.address,\n auToken.underlying\n );\n const [depositBalance, borrowBalance, collateralRatio, underlyingPrice] = await Promise.all([\n moneyMarket.getUserDepositBalance(userAddress),\n moneyMarket.getUserBorrowBalance(userAddress),\n moneyMarket.getCollateralRatio(),\n fetchPrice(moneyMarket.underlying.address, this._networkConnection.provider),\n ]);\n\n userMarketDetail.depositBalance = depositBalance;\n userMarketDetail.borrowBalance = borrowBalance;\n userMarketDetail.collateralRatio = collateralRatio.toNumber();\n userMarketDetail.underlyingPrice = underlyingPrice.toString();\n }\n\n assetsIn = await this.env.comptroller.getAssetsIn(userAddress);\n\n var depositValues = [];\n for (var i = 0; i < marketCount; i++) {\n const auToken = consts.networkAddresses.auTokens[i];\n if (\n assetsIn!.find((auAddress: types.Address) => isSameAddress(auToken.address, auAddress)) !==\n undefined\n ) {\n userMarketDetails[i].isCollateral = true;\n } else {\n userMarketDetails[i].isCollateral = false;\n }\n depositValues.push(\n calcValuation(\n userMarketDetails[i].depositBalance,\n new BigNumber(userMarketDetails[i].underlyingPrice)\n )\n );\n }\n\n totalBorrowLimit = depositValues.reduce((p: BigNumber, v: BigNumber, index: number) => {\n if (userMarketDetails[index].isCollateral)\n return p.plus(v.multipliedBy(userMarketDetails[index].collateralRatio));\n return p;\n }, new BigNumber(0));\n\n var accountLiquidity: [BN, BN] = await this.env.comptroller.getAccountLiquidity(userAddress);\n\n var borrowedvaluation: BigNumber = totalBorrowLimit.minus(\n new BigNumber(accountLiquidity[0].toString()).div(decimalFactor(18))\n );\n\n if (borrowedvaluation.lt('0.00001')) {\n // Igore dust, dust could be the result of network delay causing collateral valuation calc to be different on vs off chain\n borrowedvaluation = new BigNumber(0);\n }\n\n const bufferedBorrowLimit: BigNumber = totalBorrowLimit.multipliedBy(\n consts.BORROW_LIMIT_BUFFER\n );\n const minimumBorrowLimitAllowed = borrowedvaluation.div(consts.BORROW_LIMIT_BUFFER);\n\n var borrowableAmount: BigNumber;\n if (bufferedBorrowLimit.lte(borrowedvaluation)) {\n borrowableAmount = new BigNumber(0);\n } else {\n borrowableAmount = bufferedBorrowLimit.minus(borrowedvaluation);\n }\n\n for (var i = 0; i < marketCount; i++) {\n const auToken = consts.networkAddresses.auTokens[i];\n const moneyMarket: MoneyMarketRead = new MoneyMarketRead(\n this._networkConnection,\n auToken.address,\n auToken.underlying\n );\n const borrowLimitMargin = totalBorrowLimit.minus(minimumBorrowLimitAllowed).gt(0)\n ? totalBorrowLimit.minus(minimumBorrowLimitAllowed)\n : new BigNumber(0);\n const maxWithdrawCap: BigNumber = borrowLimitMargin\n .div(userMarketDetails[i].collateralRatio)\n .div(userMarketDetails[i].underlyingPrice);\n userMarketDetails[i].maxWithdrawableAmount =\n userMarketDetails[i].isCollateral &&\n maxWithdrawCap.lt(userMarketDetails[i].depositBalance.formattedAmount())\n ? new TokenAmount(moneyMarket.underlying, maxWithdrawCap.toFixed(24), false)\n : new TokenAmount(\n moneyMarket.underlying,\n userMarketDetails[i].depositBalance.rawAmount()\n );\n }\n\n return {\n markets: userMarketDetails,\n borrowLimit: {\n currency: 'USD',\n amount: bufferedBorrowLimit.toFixed(consts.DECIMAL_PRECISION),\n },\n borrowableAmount: {\n currency: 'USD',\n amount: borrowableAmount.toFixed(consts.DECIMAL_PRECISION),\n },\n };\n }\n\n public async getTokenPrice(token: Token): Promise<types.CurrencyAmount> {\n const price = await fetchPrice(token.address, this._networkConnection.provider);\n return {\n currency: 'USD',\n amount: price.toFixed(consts.DECIMAL_PRECISION),\n };\n }\n\n public async calcBorrowPower(tokenAmount: TokenAmount) {\n const autoken = consts.networkAddresses.auTokens.find((auToken) =>\n isSameAddress(auToken.underlying, tokenAmount.token.address)\n )!;\n const moneyMarket: MoneyMarketRead = new MoneyMarketRead(\n this._networkConnection,\n autoken.address,\n autoken.underlying\n );\n const collateralRatio = await moneyMarket.getCollateralRatio();\n const underlyingPrice = await fetchPrice(\n tokenAmount.token.address,\n this._networkConnection.provider\n );\n const borrowPower = calcValuation(tokenAmount!, new BigNumber(underlyingPrice))\n .multipliedBy(collateralRatio)\n .multipliedBy(consts.BORROW_LIMIT_BUFFER);\n return {\n currency: 'USD',\n amount: borrowPower.toFixed(consts.DECIMAL_PRECISION),\n };\n }\n\n public calcHypotheticalStats({\n userMarketDetail,\n currentBorrowLimit,\n currentBorrowValuation,\n action,\n tokenAmount,\n }: {\n userMarketDetail: types.UserMarketDetails;\n currentBorrowLimit: types.CurrencyAmount;\n currentBorrowValuation: types.CurrencyAmount;\n action: types.MarketAction;\n tokenAmount?: TokenAmount;\n }): types.HypotheticalStats {\n var newBorrowLimit = new BigNumber(currentBorrowLimit.amount),\n newBorrowValuation = new BigNumber(currentBorrowValuation.amount);\n switch (action) {\n case types.MarketAction.EnableCollateral:\n case types.MarketAction.DisableCollateral:\n var deltaBorrowLimit = calcValuation(\n userMarketDetail.depositBalance,\n new BigNumber(userMarketDetail.underlyingPrice)\n )\n .multipliedBy(userMarketDetail.collateralRatio)\n .multipliedBy(consts.BORROW_LIMIT_BUFFER);\n newBorrowLimit =\n action == types.MarketAction.EnableCollateral\n ? newBorrowLimit.plus(deltaBorrowLimit)\n : newBorrowLimit.minus(deltaBorrowLimit);\n break;\n\n case types.MarketAction.Deposit:\n case types.MarketAction.Withdraw:\n deltaBorrowLimit = calcValuation(\n tokenAmount!,\n new BigNumber(userMarketDetail.underlyingPrice)\n )\n .multipliedBy(userMarketDetail.collateralRatio)\n .multipliedBy(consts.BORROW_LIMIT_BUFFER);\n newBorrowLimit =\n action == types.MarketAction.Deposit\n ? newBorrowLimit.plus(deltaBorrowLimit)\n : newBorrowLimit.minus(deltaBorrowLimit);\n break;\n\n case types.MarketAction.Borrow:\n case types.MarketAction.Repay:\n var deltaBorrowValuation = calcValuation(\n tokenAmount!,\n new BigNumber(userMarketDetail.underlyingPrice)\n );\n newBorrowValuation =\n action == types.MarketAction.Borrow\n ? newBorrowValuation.plus(deltaBorrowValuation)\n : newBorrowValuation.minus(deltaBorrowValuation);\n break;\n }\n return {\n newBorrowLimit: {\n amount: newBorrowLimit!.toFixed(consts.DECIMAL_PRECISION),\n currency: 'USD',\n },\n newBorrowUtilization: newBorrowLimit.eq(0)\n ? newBorrowValuation.eq(0)\n ? 0\n : 9999.99\n : newBorrowValuation!.div(newBorrowLimit!).toNumber(),\n };\n }\n\n /**\n * Get ply circulating supply.\n * It is calculated by the total supply, minus:\n * - Ply in team multisig contract\n * - Ply in comptroller contract\n * - Ply in fairlaunch contract\n * - Ply in vesting contract\n */\n public async getPlyCirculatingSupply(): Promise<TokenAmount> {\n const multicallRead = new MulticallRead(this._networkConnection);\n const baseBalanceOfCall = {\n contract: this.env.ply,\n method: 'balanceOf',\n returnTypes: ['uint256'],\n };\n\n const listAddrs = [\n consts.networkAddresses.misc.TEAM_MULTISIG,\n consts.networkAddresses.misc.COMPTROLLER,\n consts.networkAddresses.misc.AURIFAIRLAUNCH,\n consts.networkAddresses.misc.PLY_TOKEN_LOCK,\n consts.networkAddresses.misc.TEAM_MULTISIG_AURORA_PLUS,\n consts.networkAddresses.misc.AURORA_PLUS,\n consts.networkAddresses.misc.PULP_CONTRACT,\n ];\n\n const calls = listAddrs.map((addr) => ({\n ...baseBalanceOfCall,\n args: [addr],\n }));\n\n const callResults = (await multicallRead.aggregate(calls)) as BN[][];\n\n let circulatingSupply: BN = BN.from(\n '1' + '0'.repeat(10) + '0'.repeat(getDecimal(this.env.ply.address))\n );\n callResults.forEach((result, i) => {\n circulatingSupply = circulatingSupply.sub(result[0]);\n });\n\n return new TokenAmount(PLYToken, circulatingSupply.toString());\n }\n\n public async getUtilisation(userAddr: types.Address): Promise<BigNumber> {\n let accountDetail =\n await this.env.auriInternalLens.callStatic.getAccountLiquidityAccrueInterest(userAddr);\n let sumBorrow = new BigNumber(accountDetail.sumBorrowPlusEffects.toString());\n let sumCol = new BigNumber(accountDetail.sumCollateral.toString());\n return sumBorrow.dividedBy(sumCol);\n }\n\n public async sneakAccounts(\n accounts: string[],\n tokenAddresses: string[],\n dust: BigNumber = new BigNumber(0.1)\n ): Promise<types.AccountAuTokensInfo[]> {\n const _1E18 = BN.from(10).pow(18);\n const oracle = this.env.oracle;\n const tokens = tokenAddresses.map((addr) =>\n this.env.getContract<AuToken>(addr, abis.AuTokenABI.abi)\n );\n const prices = await oracle.getUnderlyingPrices(tokenAddresses);\n const exrate = await this.env.auriInternalLens.callStatic.getExchangeRates(tokenAddresses);\n\n const res: types.AccountAuTokensInfo[] = [];\n\n for (let addr of accounts) {\n const infos: types.AccountAuTokenInfo[] = [];\n for (let i = 0; i < tokens.length; ++i) {\n const snapshot = await tokens[i].getAccountSnapshot(addr);\n const bal = snapshot[0].mul(exrate[i]).div(_1E18).mul(prices[i]).div(_1E18);\n const bor = snapshot[1].mul(prices[i]).div(_1E18);\n\n let balR = new BigNumber(bal.toString()).dividedBy(_1E18.toString());\n let borR = new BigNumber(bor.toString()).dividedBy(_1E18.toString());\n\n if (balR.lte(dust) && borR.lte(dust)) continue;\n\n infos.push({\n token: getSymbol(tokenAddresses[i]),\n deposit: balR,\n borrow: borR,\n });\n }\n res.push({\n address: addr,\n tokens: infos,\n });\n }\n return res;\n }\n\n public async getLTVAndLiquidationThreshold(userAddr: types.Address) {\n let totalSuppliedValue = new BigNumber(0);\n let totalBorrowedValue = new BigNumber(0);\n let collateralValue = new BigNumber(0);\n const assetsIn = await this.env.comptroller.getAssetsIn(userAddr);\n const marketValues = await Promise.all(\n consts.networkAddresses.auTokens.map(async (auToken) => {\n const moneyMarket: MoneyMarketRead = new MoneyMarketRead(\n this._networkConnection,\n auToken.address,\n auToken.underlying\n );\n return Promise.all([\n moneyMarket.getCollateralRatio(),\n moneyMarket.getDepositBorrowValue(userAddr),\n ]);\n })\n );\n consts.networkAddresses.auTokens.forEach(async (auToken, i) => {});\n for (var i = 0; i < marketValues.length; i++) {\n const auToken = consts.networkAddresses.auTokens[i];\n const [collateralRatio, depositBorrowValue] = marketValues[i];\n if (\n assetsIn!.find((auAddress: types.Address) => isSameAddress(auToken.address, auAddress)) !==\n undefined\n ) {\n totalSuppliedValue = totalSuppliedValue.plus(depositBorrowValue.suppliedValue);\n collateralValue = collateralValue.plus(\n depositBorrowValue.suppliedValue.times(collateralRatio)\n );\n }\n totalBorrowedValue = totalBorrowedValue.plus(depositBorrowValue.borrowedValue);\n }\n const ltv = totalBorrowedValue.div(totalSuppliedValue);\n const liquidationThreshold = collateralValue.div(totalSuppliedValue);\n return {\n ltv,\n liquidationThreshold,\n };\n }\n\n public async getNetApyWithoutIncentive(userAddress: types.Address): Promise<BigNumber> {\n let sum = new BigNumber(0);\n let totalSuppliedValue = new BigNumber(0);\n let totalBorrowedValue = new BigNumber(0);\n let netApy = new BigNumber(0);\n\n const apys = await Promise.all(\n consts.networkAddresses.auTokens.map((auToken) => {\n const moneyMarket: MoneyMarketRead = new MoneyMarketRead(\n this._networkConnection,\n auToken.address,\n auToken.underlying\n );\n const apyWithoutIncentive = moneyMarket.getApyWithoutIncentive(userAddress);\n return apyWithoutIncentive;\n })\n );\n\n for (const apy of apys) {\n sum = sum.plus(apy.sum);\n totalSuppliedValue = totalSuppliedValue.plus(apy.suppliedValue);\n totalBorrowedValue = totalBorrowedValue.plus(apy.borrowedValue);\n }\n\n if (sum.gt(0)) {\n netApy = sum.div(totalSuppliedValue);\n } else if (sum.lt(0)) {\n netApy = sum.div(totalBorrowedValue);\n }\n return netApy;\n }\n\n public async getNetApyWithIncentive(userAddress: types.Address): Promise<BigNumber> {\n let sum = new BigNumber(0);\n let totalSuppliedValue = new BigNumber(0);\n let totalBorrowedValue = new BigNumber(0);\n let netApy = new BigNumber(0);\n const apys = await Promise.all(\n consts.networkAddresses.auTokens.map((auToken) => {\n const moneyMarket: MoneyMarketRead = new MoneyMarketRead(\n this._networkConnection,\n auToken.address,\n auToken.underlying\n );\n const apyWithIncentive = moneyMarket.getApyWithIncentive(userAddress);\n return apyWithIncentive;\n })\n );\n\n for (const apy of apys) {\n sum = sum.plus(apy.sum);\n totalSuppliedValue = totalSuppliedValue.plus(apy.suppliedValue);\n totalBorrowedValue = totalBorrowedValue.plus(apy.borrowedValue);\n }\n\n if (sum.gt(0)) {\n netApy = sum.div(totalSuppliedValue);\n } else if (sum.lt(0)) {\n netApy = sum.div(totalBorrowedValue);\n }\n return netApy;\n }\n}\n","import { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { BigNumber as BN, utils } from 'ethers';\nimport {\n AuriEnv,\n BlockchainEntity,\n BlockchainEntityRead,\n PLYToken,\n Token,\n TokenAmount,\n} from '../entities';\nimport * as helpers from '../helpers';\nimport { Address, NetworkConnection } from '../types';\n\nexport class PlyTokenLockRead extends BlockchainEntityRead {\n public readonly env: AuriEnv;\n\n public constructor(networkConnection: NetworkConnection) {\n super(networkConnection);\n this.env = new AuriEnv(networkConnection);\n }\n\n public async getClaimableAmount(recipient: Address): Promise<TokenAmount> {\n const claimableAmount = await this.env.plyTokenLock.callStatic.claimableBalance(recipient);\n return new TokenAmount(new Token(PLYToken.address, 18), claimableAmount.toString(), true);\n }\n}\n\nexport class PlyTokenLockReadWrite extends PlyTokenLockRead {\n public async claim(recipient: Address, amount: TokenAmount): Promise<TransactionResponse> {\n const amountToClaim = BN.from(amount.rawAmount());\n return await this.env.plyTokenLock\n .connect(this._networkConnection.signer!)\n .claim(recipient, amountToClaim);\n }\n}\n\nexport class PlyTokenLock extends BlockchainEntity {\n constructor() {\n super();\n }\n public read(networkConnection: NetworkConnection): PlyTokenLockRead {\n return new PlyTokenLockRead(networkConnection);\n }\n public readWrite(networkConnection: NetworkConnection): PlyTokenLockReadWrite {\n return new PlyTokenLockReadWrite(networkConnection);\n }\n}\n","import axios from 'axios';\n\nconst NOTIFICATION_API_END_POINT = 'https://api.aurigami.finance/notification/';\n\nexport async function getApi(url: string, params: Record<string, any> = {}): Promise<any> {\n const resp = await axios.get(\n NOTIFICATION_API_END_POINT + url + '?' + new URLSearchParams(params),\n {\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n return resp.data;\n}\n\nexport async function postApi(url: string, body: Record<string, any>): Promise<any> {\n const resp = await axios.post(NOTIFICATION_API_END_POINT + url, body, {\n headers: { 'Content-Type': 'application/json' },\n });\n\n return resp.data;\n}\n","import { TransactionResponse } from '@ethersproject/abstract-provider';\nimport BigNumber from 'bignumber.js';\nimport { ALL_STAKING_POOLS, networkAddresses } from './consts';\nimport { AuriEnv, BlockchainEntity, BlockchainEntityRead, Token, TokenAmount } from './entities';\nimport { getBlocksTimestamp, getDecimal } from './helpers';\nimport * as AuriAPI from './helpers/aurigami-api';\nimport * as NotificationApi from './helpers/notification-api';\nimport { MiscRead, StakingRead, StakingReadWrite } from './interactors';\nimport * as types from './types';\n\nexport class SdkRead extends BlockchainEntityRead {\n protected env: AuriEnv;\n protected _stakingRead: StakingRead;\n protected _misc: MiscRead;\n constructor(networkConnection: types.NetworkConnection) {\n super(networkConnection);\n this.env = new AuriEnv(networkConnection);\n this._stakingRead = new StakingRead(networkConnection);\n this._misc = new MiscRead(networkConnection);\n }\n\n public async getUserDetails(userAddress: string): Promise<types.UserDetails> {\n return this._misc.getUserDetails(userAddress);\n }\n\n public async getPLYWNEARPoolDetails(): Promise<types.PLYWNEARPoolDetails> {\n return this._stakingRead.getPLYWNEARPoolDetails();\n }\n\n public async getTokenPrice(token: Token): Promise<types.CurrencyAmount> {\n return this._misc.getTokenPrice(token);\n }\n\n /**\n * Get amount of staked LP tokens\n */\n public async stakeBalanceOf(user: string): Promise<TokenAmount> {\n return this._stakingRead.stakeBalanceOf(user);\n }\n\n /**\n * Get amount of LP token in user wallet\n */\n public async LpBalanceOf(user: string): Promise<TokenAmount> {\n return this._stakingRead.LpBalanceOf(user);\n }\n\n public async unclaimedRewardsOf(user: string): Promise<TokenAmount[]> {\n return this._stakingRead.unclaimedRewardsOf(user);\n }\n\n public calcHypotheticalStats({\n userMarketDetail,\n currentBorrowLimit,\n currentBorrowValuation,\n action,\n tokenAmount,\n }: {\n userMarketDetail: types.UserMarketDetails;\n currentBorrowLimit: types.CurrencyAmount;\n currentBorrowValuation: types.CurrencyAmount;\n action: types.MarketAction;\n tokenAmount?: TokenAmount;\n }): types.HypotheticalStats {\n return this._misc.calcHypotheticalStats({\n userMarketDetail,\n currentBorrowLimit,\n currentBorrowValuation,\n action,\n tokenAmount,\n });\n }\n\n /**\n * Get ply circulating supply.\n * It is calculated by the total supply, minus:\n * - Ply in team multisig contract\n * - Ply in comptroller contract\n * - Ply in fairlaunch contract\n * - Ply in vesting contract\n */\n public async getPlyCirculatingSupply(): Promise<TokenAmount> {\n return this._misc.getPlyCirculatingSupply();\n }\n\n public async getUtilisation(userAddr: types.Address): Promise<BigNumber> {\n return this._misc.getUtilisation(userAddr);\n }\n\n public async sneakAccounts(\n accounts: string[],\n tokenAddresses: string[],\n dust: BigNumber = new BigNumber(0.1)\n ): Promise<types.AccountAuTokensInfo[]> {\n return this._misc.sneakAccounts(accounts, tokenAddresses, dust);\n }\n\n public async getLTVAndLiquidationThreshold(userAddr: types.Address) {\n return this._misc.getLTVAndLiquidationThreshold(userAddr);\n }\n\n public async getNetApyWithoutIncentive(userAddress: types.Address): Promise<BigNumber> {\n return this._misc.getNetApyWithoutIncentive(userAddress);\n }\n\n public async getNetApyWithIncentive(userAddress: types.Address): Promise<BigNumber> {\n return this._misc.getNetApyWithIncentive(userAddress);\n }\n\n public async setUserNotificationSettings(\n address: types.Address,\n mail: string,\n utilisation: number,\n liquidation: boolean,\n captchaResponse: string\n ) {\n const body = {\n address,\n mail,\n setting: {\n utilisation,\n liquidation,\n },\n captchaResponse,\n };\n const response = await NotificationApi.postApi('alert-setting/set', body);\n return response;\n }\n\n public async unsetUserNotificationSettings(address: types.Address, captchaResponse: string) {\n const body = {\n address,\n mail: '',\n setting: {\n utilisation: null,\n liquidation: false,\n },\n captchaResponse,\n };\n const response = await NotificationApi.postApi('alert-setting/set', body);\n return response;\n }\n\n public async getUserNotificationSettings(\n addresses: types.Address[]\n ): Promise<types.UserNotification> {\n const body = {\n addresses,\n };\n const response = await NotificationApi.postApi('alert-setting/get-user-setting', body);\n return response;\n }\n\n public async getLiquidationHistory(address: string): Promise<types.LiquidationDetail[]> {\n const liquidationHistoryResp = await AuriAPI.getPaginatedApi<types.LiquidationEventEntity>(\n '/liquidate/history',\n {\n user: address,\n }\n );\n const blocks = liquidationHistoryResp.items.map((event) => event.blockNumber);\n const blocksTimestamp = await getBlocksTimestamp(this._networkConnection.provider, blocks);\n\n const liquidationEvents = liquidationHistoryResp.items.map((event, idx) => {\n const underlyingAddress = networkAddresses.auTokens.find(\n (auToken) => auToken.address.toLowerCase() === event.marketRepayToken.toLowerCase()\n )!.underlying;\n const decimal = getDecimal(underlyingAddress);\n const token = new Token(underlyingAddress, decimal);\n const tokenAmount = new TokenAmount(token, event.repayAmount.toString(), true);\n return {\n liquidationTime: blocksTimestamp[idx],\n tokenAmount,\n transactionId: event.txnHash,\n };\n }) as types.LiquidationDetail[];\n return liquidationEvents;\n }\n\n public calculateBorrowPower(tokenAmount: TokenAmount): Promise<types.CurrencyAmount> {\n return this._misc.calcBorrowPower(tokenAmount);\n }\n}\n\nexport class SdkReadWrite extends SdkRead {\n /**\n * Claim rewards in all markets + staking pools\n */\n public async claim(): Promise<TransactionResponse> {\n return this.env.auriLens\n .connect(this._networkConnection.signer!)\n .claimRewards(\n this.env.comptroller.address,\n this.env.auriFairLaunch.address,\n ALL_STAKING_POOLS\n );\n }\n\n public async stake(amount: TokenAmount): Promise<TransactionResponse> {\n return new StakingReadWrite(this._networkConnection).stake(amount);\n }\n\n public async unstake(amount: TokenAmount): Promise<TransactionResponse> {\n return new StakingReadWrite(this._networkConnection).unstake(amount);\n }\n\n // public async faucetDrip(): Promise<TransactionResponse> {\n // return this.env.faucet.connect(this._networkConnection.signer!).drip();\n // }\n}\n\nexport class SDK extends BlockchainEntity {\n constructor() {\n super();\n }\n public read(networkConnection: types.NetworkConnection): SdkRead {\n return new SdkRead(networkConnection);\n }\n\n public readWrite(networkConnection: types.NetworkConnection): SdkReadWrite {\n return new SdkReadWrite(networkConnection);\n }\n}\n","import BigNumber from 'bignumber.js';\nimport { ethers } from 'ethers';\nimport { Logger } from 'ethers/lib/utils';\n\nethers.utils.Logger.setLogLevel(Logger.levels.ERROR);\nBigNumber.config({ DECIMAL_PLACES: 50 });\n\nexport * as abis from './abis';\nexport * from './consts';\nexport * from './entities';\nexport * from './helpers';\nexport * from './interactors';\nexport * from './SDK';\nexport * from './types';\n"],"names":["dummyAddress","ETHAddress","AURORA_CHAINID","DECIMAL_PRECISION","AURORA_PLUS_API_PREFIX","networkAddresses","auTokens","name","address","MAINNET_ADDRESSES","USDC","toLowerCase","underlying","ETH","WBTC","USDT","DAI","WNEAR","STNEAR","AURORA","TRI","PLY","USN","NEARX","misc","COMPTROLLER","comptroller","DEPRECATED_OLD_ORACLE","oracle","PYTH_ORACLE","pythOracle","AURIFAIRLAUNCH","fairLaunch","AURILENS","auriLens","ETHREPAYHELPER","ethRepayHelper","AURI_AIRDROP","auriAirdropMultipleRedeem","MULTICALL","multicall","TEAM_MULTISIG","TEAM_MULTISIG_AURORA_PLUS","AURORA_PLUS","PULP_CONTRACT","PLY_TOKEN_LOCK","plyTokenLock","REFERRAL","referralDirectory","REFERRAL_V2","AURI_INTERNAL_LENS","auriInternalLens","PLYGAME","plyGame","tokens","stNEAR","META","PULP","PLYWNEAR","ply_wnear_lp","PLY_WNEAR","WNEAR_TRI","AURORA_WNEAR","STADER","DEPOSIT_ONLY_TOKENS","PRICE_WHITELISTED","Set","map","t","REWARD_CLAIM_START","BORROW_LIMIT_BUFFER","BigNumber","ONE_DAY","ONE_WEEK","ONE_YEAR","PLYWNEAR_POOL_ID","PLYWNEAR_REWARD_TOKENS","ALL_STAKING_POOLS","INF","BN","from","pow","sub","AIRDROP_START_TIMESTAMP","AIRDROP_END_TIMESTAMP","AIRDROP_KEEP_THRESHOLD","DEPOSIT_NEAR_REWARDS_PER_WEEK","Object","fromEntries","entries","k","v","BORROW_NEAR_REWARDS_PER_WEEK","HARDCODE_PRICE_TOKENS","REFERRAL_CAMPAIGNS","start","end","CACHE_TIMEOUT","SD_INCENTIVE_IN_SD","STADER_ETH","USDT_ETH","AURIGAMI_SUBGRAPH_URL","GRAPHQL_URL","decimalRecords","symbolRecords","e","concat","slice","AURORA_API_BASE_URL","getQuery","module","action","params","axios","get","URLSearchParams","headers","resp","data","result","queryGraphQL","query","graphqlUrl","post","assert","condition","message","Error","formatObject","object","JSON","stringify","decimalFactor","decimal","toString","isSameAddress","address1","address2","getCurrentTimestamp","Math","trunc","Date","now","sleep","duration","Promise","resolve","setTimeout","validateAndParseAddress","utils","getAddress","error","getDecimal","addressLowercase","undefined","getSymbol","getUnderlying","matching","filter","length","calcLMRewardApr","rewardsValue","totalStakeValue","frequencyPerYear","isZero","lte","multipliedBy","dividedBy","calcNetApy","suppliedValue","supplyApy","borrowedValue","borrowApy","minus","getBlockTimestamp","provider","blockNumber","getBlock","block","timestamp","getBlocksTimestampViaRPC","blocksNumber","CHUNK_SIZE","results","i","promises","all","getBlocksTimestamp","blockNumbers","lines","x","join","push","reduce","acc","cur","missingBlocks","devLog","missingBlocksTimestamps","forEach","index","toISOString","getTime","getBlockBeforeTimestamp","getAuroraAPIQuery","closest","parseInt","getBlockNumber","process","env","NODE_ENV","optionalParams","console","log","sortEvents","events","sort","a","b","logIndex","BlockchainEntityRead","networkConnection","_networkConnection","BlockchainEntityReadWrite","signer","Signer","BlockchainEntity","read","readWrite","AuriEnv","getContract","abi","Contract","getAuTokenContracts","auToken","contract","abis","getAuErc20Contract","underlyingName","find","_comptroller","_auriFairLaunch","_auriLens","_ply","_pulp","_auriInternalLens","_auriAirdrop","_referralDirectoryV2","_oracle","_plygame","_plyTokenLock","Token","decimals","PLYToken","PLYWNEARToken","TokenAmount","token","amount","isRaw","rawAmnt","times","toFixed","formattedAmount","fmt","div","toFormat","formattedAmountWithSymbol","rawAmount","compare","other","comparedTo","fromAddressAndAmount","tokenAddress","dummyToken","dummyPly","dummyPlyAurora","dummyTokenAmount","dummyZeroTokenAmount","dummyTokenAmount2","dummyTokenAmount3","dummyMarketAddress","dummyUserMarketDetails","market","depositBalance","borrowBalance","isCollateral","maxWithdrawableAmount","collateralRatio","underlyingPrice","referralRewardDummy1","campaign","startTime","endTime","isReferrer","rewardTokenAmount","transactionHash","userAddr","refereeAddress","referralRewardDummy2","AURIGAMI_API_END_POINT","getApi","url","getPaginatedApi","page","pageSize","limit","KYBER_AGGREGATOR_AURORA_API_END_POINT","KYBER_AGGREGATOR_ETH_API_END_POINT","getSwapInfo","tokenIn","tokenOut","amountIn","onAurora","to","useMeta","saveGas","gasInclude","endpoint","ONEINCH_AGGREGATOR_API_END_POINT","getQuoteOneInch","fromTokenAddress","toTokenAddress","prepareParamsAggregator","tokenInErc20","EIP20InterfaceABI","tokenInDecimal","tokenInQuantity","usdtAddress","autoken","usdtDecimal","fetchPriceFromOneInch","info","outputAmount","toTokenAmount","fetchPriceFromKyberSwap","ETH_PROVIDER","ethers","providers","JsonRpcProvider","fetchPriceFromDefiLlamaAPI","id","then","res","coins","price","err","fetchPriceFromCoingeckoAPI","usd","fetchPriceFromDefiLlamaAndCoingecko","fetchPriceFromCoingecko","fetchLPPositions","LPAddress","LPContract","IUniswapV2PairABI","token0","token1","getReserves","totalSupply","reserves","reserve0","reserve1","fetchLPPrice","fetchLPPriceBy","tokenReverse","reserve","_fetchPrice","tokenPrice","tokenDecimal","reserveUSD","LPDecimal","LPInfo","lpPrice","fetchStNEARPrice","ratioPromise","nearPricePromise","ratioRes","nearPrice","ratio","st_near_price","processPriceFromOracle","rawPrice","underlyingDecimal","fetchPriceFromOracle","auTokenAddress","oracleContract","AuriOracleABI","getUnderlyingPrice","matchingAuToken","fetchUnderlyingTokensPrices","AuriLensABI","auTokenAddresses","underlyingDecimals","auTokenUnderlyingPriceAll","rawPrices","ind","shouldFetchFromKyberSwap","has","toLocaleLowerCase","fetchPrice","fetchPLYPrice","fetchPULPPrice","fetchToken0PriceByLP","LP","token0Decimal","token1Decimal","fetchValuation","tokenAmount","calcValuation","valuateToken","tokenValuation","currencyAmount","currency","TransferEventQuery","tokenAddr","AuTokenABI","queryERC20TransfersOf","fromBlock","toBlock","filters","Transfer","queryFilter","flat","event","args","queryERC20BalanceAt","endBlock","balanceOf","blockTag","fetchHistoricalLPPositions","values","fetchHistoricalLPPrice","fetchHistoricalPrice","fetchHistoricalPriceFromOracle","oracleAddress","fetchHistoricalPriceByLP","fetchHistoricalPULPPrice","tokenNumber","AirdropRead","getRedeemableReward","user","tokenInstance","helpers","auriAirdrop","formatBytes32String","rewards","AirdropReadWrite","redeemMultiple","campaigns","connect","redeem","redeemSingle","Airdrop","MoneyMarketRead","underlyingAsset","consts","getPlyPrice","getRewardSpeeds","speeds","getTotalTokenBorrowed","totalBorrows","getTotalTokenDeposited","getCash","totalBorrow","totalCash","add","getDepositAPY","supplyRatePerTimestamp","supplyRatePerDay","plus","getBorrowAPY","borrowRatePerTimestamp","borrowRatePerDay","getCollateralRatio","markets","collateralFactorMantissa","getBorrowPlyAPY","totalBorrowed","rewardSpeeds","plyPrice","plyRewardBorrowSpeed","getDepositPlyAPY","totalDeposited","plyRewardSupplySpeed","getDepositNearAPY","getDepositNEARRewardPerWeek","depositNEARApy","getBorrowNearAPY","getBorrowNEARRewardPerWeek","borrowNEARApy","getDepositMetaAPY","getDepositStaderAPY","getDetails","depositAPY","borrowAPY","depositPlyAPY","borrowPlyAPY","depositNearAPY","borrowNearAPY","depositMetaAPY","staderDepositApy","totalTokenDeposited","totalTokenBorrowed","depositApy","toNumber","depositPlyApy","borrowPlyApy","depositPlyPerWeek","mul","borrowPlyPerWeek","depositMETAApy","getUserBorrowBalance","userAddress","callStatic","borrowBalanceCurrent","getUserDepositBalance","balanceOfUnderlying","totalDeposit","NEARToken","rewardStartTime","rewardStopTime","currentTime","reward","mintCap","mintCaps","borrowCap","borrowCaps","getDepositBorrowValue","getApyWithoutIncentive","sum","getApyWithIncentive","nearDepositApy","plyDepositApy","metaDepositApy","nearBorrowApy","plyBorrowApy","totalDepositApy","totalBorrowApy","__decorate","cache","ttl","type","CacheType","MEMO","MoneyMarketReadWrite","_EthRepayHelper","deposit","mint","value","borrow","withdraw","lt","redeemUnderlying","repay","repayBorrow","enableCollateral","enterMarkets","disableCollateral","exitMarket","MoneyMarket","LOCKING_DENOMINATOR","PapermillRead","plyAddress","pulpAddress","plyToken","pulpToken","getPlyBalance","ply","plyBalance","getPulpBalance","pulp","pulpBalance","getUnclaimedPlyReward","claimRewards","auriFairLaunch","rewardBalancesMetadata","plyAccrured","getWeek","getLockingDetails","currentWeek","getPercentLock","percentLockCurrentWeek","percentLockNextWeek","totalRewards","calcLockAmount","pulpAmountCurrentWeek","plyAmountCurrentWeek","plyAmountNextWeek","pulpAmountNextWeek","currentUnlockPortion","nextUnlockPortion","vestingStart","accruedPly","currentPly","currentPulp","nextPly","nextPulp","getTimestampToUnlock","targetUnlockPortion","getWeekToUnlock","weekId","getNextWeekTimestamp","nextWeek","getUnlockPortionAt","lockPortion","unlockPortion","PapermillReadWrite","recipient","selfRedeem","msgSender","Papermill","PlyGameRead","parseBetMakeEvent","outcome","betAmount","lostAmount","unlock","player","unlockedPulpAmount","attachTimestamp","blockstimestamp","getUserPlyGameHistory","plygame","getLastBlock","block100","eq","BetMade","reverse","currentJackpotAmount","jackpot","earlyUnlockedPulpAmount","totalPlyUnlockedEarly","getPlyGameResultsInTransaction","txHash","getTransactionReceipt","tx","betMadeEvents","logs","topics","parseLog","leaderboard","AuriAPI","items","item","unlockedAmount","gamesPlayed","count","getLastJackpotResult","getStorageAt","round","jackpotHistory","winner","overallLeaderboard","PlyGameReadWrite","makeBetOnce","approve","PlyGame","PulpRead","remainingEarlyUnlockPulp","earlyRedeems","PulpReadWrite","convertEarlyPulp","amountToRedeem","Pulp","ReferralRead","generateReferralCode","letters","numbers","charset","toUpperCase","R","floor","random","getUserReferralCode","referralDirectoryV2","userReferralCode","parseBytes32String","getReferralCodeUsed","referralCodeUsed","getReferralCodeOwner","code","referralCode","referralCodeOwner","getReferralsList","blocks","blocksTimestamp","referralRewards","includes","slotsInUse","totalReferralSlots","queuePosition","userReferralStatus","isWhitelistedAddress","isUserWhitelisted","isOnAuroraPlus","status","isNewUserAtReferralTime","depositedMoreThanMinimumAmount","ReferralReadWrite","registerNewReferralCode","registerNewUserReferralCode","useReferralCode","registerReferralCodeUsed","claimReferralRewards","unclaimedRewards","Referral","StakingRead","getPLYWNEARPoolDetails","getPoolInfo","endedTime","stakedLiquidity","totalStake","rewardPerSeconds","_","stakedLiquidityAmount","totalStakeValuation","rewardTokenAddress","rewardToken","rewardPerSecond","APYs","rewardPerSecondValuation","apy","totalStakedLiquidity","stakeBalanceOf","getUserInfo","userInfo","LpBalanceOf","lpContract","balance","unclaimedRewardsOf","updateAndGetUserInfo","StakingReadWrite","stake","unstake","amountInput","stakedAmount","unstakeAmount","Staking","ComptrollerRewardType","MarketAction","MulticallRead","aggregate","calls","txns","call","populateTransaction","method","txn","target","callData","response","decodedReturn","defaultAbiCoder","decode","returnTypes","returnData","MiscRead","stakingRead","getUserDetails","marketCount","userMarketDetails","totalBorrowLimit","userMarketDetail","moneyMarket","getAssetsIn","assetsIn","depositValues","auAddress","p","getAccountLiquidity","accountLiquidity","borrowedvaluation","bufferedBorrowLimit","minimumBorrowLimitAllowed","borrowableAmount","borrowLimitMargin","gt","maxWithdrawCap","borrowLimit","getTokenPrice","calcBorrowPower","borrowPower","calcHypotheticalStats","currentBorrowLimit","currentBorrowValuation","newBorrowLimit","newBorrowValuation","types","EnableCollateral","DisableCollateral","deltaBorrowLimit","Deposit","Withdraw","Borrow","Repay","deltaBorrowValuation","newBorrowUtilization","getPlyCirculatingSupply","multicallRead","baseBalanceOfCall","listAddrs","addr","callResults","circulatingSupply","repeat","getUtilisation","getAccountLiquidityAccrueInterest","accountDetail","sumBorrow","sumBorrowPlusEffects","sumCol","sumCollateral","sneakAccounts","accounts","tokenAddresses","dust","_1E18","getUnderlyingPrices","prices","getExchangeRates","exrate","infos","getAccountSnapshot","snapshot","bal","bor","balR","borR","getLTVAndLiquidationThreshold","totalSuppliedValue","totalBorrowedValue","collateralValue","marketValues","depositBorrowValue","ltv","liquidationThreshold","getNetApyWithoutIncentive","netApy","apyWithoutIncentive","apys","getNetApyWithIncentive","apyWithIncentive","PlyTokenLockRead","getClaimableAmount","claimableBalance","claimableAmount","PlyTokenLockReadWrite","claim","amountToClaim","PlyTokenLock","NOTIFICATION_API_END_POINT","postApi","body","SdkRead","_stakingRead","_misc","setUserNotificationSettings","mail","utilisation","liquidation","captchaResponse","setting","NotificationApi","unsetUserNotificationSettings","getUserNotificationSettings","addresses","getLiquidationHistory","liquidationHistoryResp","liquidationEvents","idx","underlyingAddress","marketRepayToken","repayAmount","liquidationTime","transactionId","txnHash","calculateBorrowPower","SdkReadWrite","SDK","Logger","setLogLevel","levels","ERROR","config","DECIMAL_PLACES"],"mappings":"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"}
1
+ {"version":3,"file":"sdk.esm.js","sources":["../src/consts/constants.ts","../src/consts/decimals.ts","../src/consts/symbols.ts","../src/helpers/aurora-api-helpers.ts","../src/helpers/graphql-helpers.ts","../src/helpers/helpers.ts","../src/entities/BlockchainEntity.ts","../src/entities/auriEnv.ts","../src/entities/token.ts","../src/entities/tokenAmount.ts","../src/consts/dummy.ts","../src/helpers/aurigami-api.ts","../src/helpers/kyber-aggregator-api.ts","../src/helpers/one-inch-aggregator-api.ts","../src/helpers/priceFetcher.ts","../src/helpers/transfer-event-query.ts","../src/helpers/historicalPriceFetcher.ts","../src/interactors/Airdrop.ts","../src/interactors/MoneyMarket.ts","../src/interactors/Papermill.ts","../src/interactors/PlyGame.ts","../src/interactors/Pulp.ts","../src/interactors/Referral.ts","../src/interactors/Staking.ts","../src/types/index.ts","../src/interactors/Multicall.ts","../src/interactors/misc.ts","../src/interactors/PlyTokenLock.ts","../src/helpers/notification-api.ts","../src/SDK.ts","../src/index.ts"],"sourcesContent":["import BigNumber from 'bignumber.js';\nimport { BigNumber as BN } from 'ethers';\nimport { MAINNET_ADDRESSES } from './deployments';\nexport const dummyAddress: string = '0xDEADbeEfEEeEEEeEEEeEEeeeeeEeEEeeeeEEEEeE';\nexport const ETHAddress: string = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE';\n\nexport const AURORA_CHAINID = 1313161554;\n\nexport const DECIMAL_PRECISION = 10;\n\nexport const AURORA_PLUS_API_PREFIX = 'https://aurora.plus/api/wallet/';\n\nexport const networkAddresses = {\n auTokens: [\n {\n name: 'auUSDC',\n address: MAINNET_ADDRESSES.auTokens.USDC.toLowerCase(),\n underlying: '0xb12bfca5a55806aaf64e99521918a4bf0fc40802'.toLowerCase(),\n },\n {\n name: 'auETH',\n address: MAINNET_ADDRESSES.auTokens.ETH.toLowerCase(),\n underlying: ETHAddress.toLowerCase(),\n },\n {\n name: 'auWBTC',\n address: MAINNET_ADDRESSES.auTokens.WBTC.toLowerCase(),\n underlying: '0xf4eb217ba2454613b15dbdea6e5f22276410e89e'.toLowerCase(),\n },\n {\n name: 'auUSDT',\n address: MAINNET_ADDRESSES.auTokens.USDT.toLowerCase(),\n underlying: '0x4988a896b1227218e4a686fde5eabdcabd91571f'.toLowerCase(),\n },\n {\n name: 'auDAI',\n address: MAINNET_ADDRESSES.auTokens.DAI.toLowerCase(),\n underlying: '0xe3520349f477a5f6eb06107066048508498a291b'.toLowerCase(),\n },\n {\n name: 'auWNEAR',\n address: MAINNET_ADDRESSES.auTokens.WNEAR.toLowerCase(),\n underlying: '0xC42C30aC6Cc15faC9bD938618BcaA1a1FaE8501d'.toLowerCase(),\n },\n {\n name: 'auSTNEAR',\n address: MAINNET_ADDRESSES.auTokens.STNEAR.toLowerCase(),\n underlying: '0x07F9F7f963C5cD2BBFFd30CcfB964Be114332E30'.toLowerCase(),\n },\n {\n name: 'auAURORA',\n address: MAINNET_ADDRESSES.auTokens.AURORA.toLowerCase(),\n underlying: '0x8bec47865ade3b172a928df8f990bc7f2a3b9f79'.toLowerCase(),\n },\n {\n name: 'auTRI',\n address: MAINNET_ADDRESSES.auTokens.TRI.toLowerCase(),\n underlying: '0xFa94348467f64D5A457F75F8bc40495D33c65aBB'.toLowerCase(),\n },\n {\n name: 'auPLY',\n address: MAINNET_ADDRESSES.auTokens.PLY.toLowerCase(),\n underlying: '0x09c9d464b58d96837f8d8b6f4d9fe4ad408d3a4f'.toLowerCase(),\n },\n {\n name: 'auUSN',\n address: MAINNET_ADDRESSES.auTokens.USN.toLowerCase(),\n underlying: '0x5183e1b1091804bc2602586919e6880ac1cf2896'.toLowerCase(),\n },\n {\n name: 'auNEARX',\n address: MAINNET_ADDRESSES.auTokens.NEARX.toLowerCase(),\n underlying: '0xb39eeb9e168ef6c639f5e282fef1f6bc4dcae375'.toLowerCase(),\n },\n {\n name: 'auUSDCNative',\n address: MAINNET_ADDRESSES.auTokens.USDC_NATIVE.toLowerCase(),\n underlying: '0x368ebb46aca6b8d0787c96b2b20bd3cc3f2c45f7'.toLowerCase(),\n },\n {\n name: 'auUSDTNative',\n address: MAINNET_ADDRESSES.auTokens.USDT_NATIVE.toLowerCase(),\n underlying: '0x80da25da4d783e57d2fcda0436873a193a4beccf'.toLowerCase(),\n },\n ],\n misc: {\n COMPTROLLER: MAINNET_ADDRESSES.comptroller.toLowerCase(),\n DEPRECATED_OLD_ORACLE: MAINNET_ADDRESSES.oracle.toLowerCase(),\n PYTH_ORACLE: MAINNET_ADDRESSES.pythOracle.toLowerCase(),\n AURIFAIRLAUNCH: MAINNET_ADDRESSES.fairLaunch.toLowerCase(),\n AURILENS: MAINNET_ADDRESSES.auriLens.toLowerCase(),\n ETHREPAYHELPER: MAINNET_ADDRESSES.ethRepayHelper.toLowerCase(),\n AURI_AIRDROP: MAINNET_ADDRESSES.auriAirdropMultipleRedeem.toLowerCase(),\n MULTICALL: MAINNET_ADDRESSES.multicall.toLowerCase(),\n TEAM_MULTISIG: '0x2D05FfFE70CE64c5954710D4C308dB31C8dBd8dE'.toLowerCase(),\n TEAM_MULTISIG_AURORA_PLUS: '0x31f501589c7a090bf68f2fe2687744bf9130e1ab'.toLowerCase(),\n AURORA_PLUS: '0xf075c896cbbb625e7911e284cd23ee19bdccf299'.toLowerCase(),\n PULP_CONTRACT: '0x04ac48711bcdc45b4d223fb021e09da73c71095e'.toLowerCase(),\n PLY_TOKEN_LOCK: MAINNET_ADDRESSES.plyTokenLock.toLowerCase(),\n REFERRAL: MAINNET_ADDRESSES.referralDirectory.toLowerCase(),\n REFERRAL_V2: '0xCECd147409B2d64A9A2E5418e3E471E8af19E0bd'.toLowerCase(),\n AURI_INTERNAL_LENS: MAINNET_ADDRESSES.auriInternalLens.toLowerCase(),\n PLYGAME: MAINNET_ADDRESSES.plyGame.toLowerCase(),\n },\n tokens: {\n AURORA: '0x8bec47865ade3b172a928df8f990bc7f2a3b9f79'.toLowerCase(),\n PLY: '0x09c9d464b58d96837f8d8b6f4d9fe4ad408d3a4f'.toLowerCase(),\n stNEAR: '0x07f9f7f963c5cd2bbffd30ccfb964be114332e30'.toLowerCase(),\n USDC: '0xb12bfca5a55806aaf64e99521918a4bf0fc40802'.toLowerCase(),\n WNEAR: '0xC42C30aC6Cc15faC9bD938618BcaA1a1FaE8501d'.toLowerCase(),\n TRI: '0xFa94348467f64D5A457F75F8bc40495D33c65aBB'.toLowerCase(),\n META: '0xc21ff01229e982d7c8b8691163b0a3cb8f357453'.toLowerCase(),\n PULP: MAINNET_ADDRESSES.PULP.toLowerCase(),\n PLYWNEAR: MAINNET_ADDRESSES.ply_wnear_lp.toLowerCase(),\n USN: '0x5183e1b1091804bc2602586919e6880ac1cf2896'.toLowerCase(),\n PLY_WNEAR: '0x044b6b0cd3bb13d2b9057781df4459c66781dce7'.toLowerCase(),\n WNEAR_TRI: '0x84b123875f0f36b966d0b6ca14b31121bd9676ad'.toLowerCase(),\n AURORA_WNEAR: '0x1e0e812fbcd3eb75d8562ad6f310ed94d258d008'.toLowerCase(),\n NEARX: '0xb39eeb9e168ef6c639f5e282fef1f6bc4dcae375'.toLowerCase(),\n STADER: '0x078e103d5f9629ac48b8563fa2bfcd2f6d5fde84'.toLowerCase(),\n USDC_NATIVE: '0x368ebb46aca6b8d0787c96b2b20bd3cc3f2c45f7'.toLowerCase(),\n USDT_NATIVE: '0x80da25da4d783e57d2fcda0436873a193a4beccf'.toLowerCase(),\n },\n} as const;\n\nexport const DEPOSIT_ONLY_TOKENS = [\n MAINNET_ADDRESSES.auTokens.AURORA.toLowerCase(),\n MAINNET_ADDRESSES.auTokens.TRI.toLowerCase(),\n MAINNET_ADDRESSES.auTokens.PLY.toLowerCase(),\n MAINNET_ADDRESSES.auTokens.USN.toLowerCase(),\n];\n\n// All token that we can calculate the price via oracle + coingecko\nexport const PRICE_WHITELISTED = new Set([\n ...networkAddresses.auTokens.map((t) => t.underlying),\n networkAddresses.tokens.AURORA,\n networkAddresses.tokens.TRI,\n networkAddresses.tokens.META,\n networkAddresses.tokens.stNEAR,\n networkAddresses.tokens.STADER,\n]);\n\nexport const REWARD_CLAIM_START = 1651759200; // Thursday, 5 May 2022 14:00:00 UTC\n\nexport const BORROW_LIMIT_BUFFER = new BigNumber(1);\n\nexport const ONE_DAY = 86400;\nexport const ONE_WEEK = ONE_DAY * 7;\nexport const ONE_YEAR = ONE_DAY * 365;\n\nexport const PLYWNEAR_POOL_ID = 0;\nexport const PLYWNEAR_REWARD_TOKENS = [\n '0x09C9D464b58d96837f8d8b6f4d9fE4aD408d3A4f', // PLY\n '0x04Ac48711BCdc45b4d223fb021E09DA73c71095e', // PULP\n '0xC42C30aC6Cc15faC9bD938618BcaA1a1FaE8501d', // WNEAR\n '0x07F9F7f963C5cD2BBFFd30CcfB964Be114332E30', // STNEAR\n '0x8BEc47865aDe3B172A928df8f990Bc7f2A3b9f79', // AURORA\n '0xFa94348467f64D5A457F75F8bc40495D33c65aBB', // TRI\n];\n// could call RPC to get all the staking pools but it's not necessary for now\nexport const ALL_STAKING_POOLS: number[] = [PLYWNEAR_POOL_ID];\nexport const INF = BN.from(2).pow(256).sub(1);\n\nexport const AIRDROP_START_TIMESTAMP = 1649858400;\nexport const AIRDROP_END_TIMESTAMP = 1651068000;\nexport const AIRDROP_KEEP_THRESHOLD = 7 * 86400;\n\nexport const DEPOSIT_NEAR_REWARDS_PER_WEEK: { [k: string]: string } = Object.fromEntries(\n // lower case all addresses\n Object.entries({\n '0xb12bfca5a55806aaf64e99521918a4bf0fc40802': '36375', // USDC\n '0x4988a896b1227218e4a686fde5eabdcabd91571f': '14550', // USDT\n '0xf4eb217ba2454613b15dbdea6e5f22276410e89e': '3638', // WBTC\n '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE': '14550', // ETH\n '0xc42c30ac6cc15fac9bd938618bcaa1a1fae8501d': '3638', // WNEAR\n }).map(([k, v]) => [k.toLowerCase(), v])\n);\n\nexport const BORROW_NEAR_REWARDS_PER_WEEK: { [k: string]: string } = {\n // currently 0 for all markets\n};\n\nexport const HARDCODE_PRICE_TOKENS: { [k: string]: string } = Object.fromEntries([\n [networkAddresses.tokens.USN.toLowerCase(), '1'],\n]);\n\nexport const REFERRAL_CAMPAIGNS: { [k: string]: { start: number; end: number } } =\n Object.fromEntries([\n ['referral-2505', { start: 1652882400, end: 1653487199 }],\n ['referrer-2505', { start: 1652882400, end: 1653487199 }],\n ['referral-0106', { start: 1653487200, end: 1654091999 }],\n ['referrer-0106', { start: 1653487200, end: 1654091999 }],\n ['referral-0806', { start: 1654092000, end: 1654696799 }],\n ['referrer-0806', { start: 1654092000, end: 1654696799 }],\n ['referral-1506', { start: 1654696800, end: 1655301599 }],\n ['referrer-1506', { start: 1654696800, end: 1655301599 }],\n ]);\n\nexport const CACHE_TIMEOUT = 10 * 1000; // 10 seconds\n\nexport const SD_INCENTIVE_IN_SD = 83.35;\n\nexport const STADER_ETH = '0x30D20208d987713f46DFD34EF128Bb16C404D10f'.toLowerCase();\n\nexport const USDT_ETH = '0xdAC17F958D2ee523a2206206994597C13D831ec7'.toLowerCase();\n\nexport const AURIGAMI_SUBGRAPH_URL =\n 'https://api.thegraph.com/subgraphs/name/takao-aurigami/aurigami-feb-27';\n\nexport const GRAPHQL_URL = 'https://old.explorer.aurora.dev/api/v1/graphql';\n","export const decimalRecords: Record<string, number> = {\n '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee': 18,\n '0x09c9d464b58d96837f8d8b6f4d9fe4ad408d3a4f': 18,\n '0x3195949f267702723bc614cae037cdc8d1e94786': 8,\n '0xfa94348467f64d5a457f75f8bc40495d33c65abb': 18,\n '0x07f9f7f963c5cd2bbffd30ccfb964be114332e30': 24,\n '0xc42c30ac6cc15fac9bd938618bcaa1a1fae8501d': 24,\n '0x6ea6c03061bddce23d4ec60b6e6e880c33d24dca': 8,\n '0xca9511b610ba5fc7e311fdef9ce16050ee4449e9': 8,\n '0x8bec47865ade3b172a928df8f990bc7f2a3b9f79': 18,\n '0xcfb6b0498cb7555e7e21502e0f449bf28760adbb': 8,\n '0x4f0d864b1abf4b701799a0b30b57a22dfeb5917b': 8,\n '0xad5a2437ff55ed7a8cad3b797b3ec7c5a19b1c54': 8,\n '0x4988a896b1227218e4a686fde5eabdcabd91571f': 6,\n '0xb12bfca5a55806aaf64e99521918a4bf0fc40802': 6,\n '0xe3520349f477a5f6eb06107066048508498a291b': 18,\n '0x8888682e24dd4df7b7ff2b91fccb575737e433bf': 8,\n '0xae4fac24dcdae0132c6d04f564dcf059616e9423': 8,\n '0xce4166363e3a584dac84a47bcd3414b43efcdd1c': 8,\n '0xf4eb217ba2454613b15dbdea6e5f22276410e89e': 8,\n '0xc21ff01229e982d7c8b8691163b0a3cb8f357453': 24,\n '0x04ac48711bcdc45b4d223fb021e09da73c71095e': 18, // PULP\n '0x044b6b0cd3bb13d2b9057781df4459c66781dce7': 18, // PLYWNEAR\n '0x5183e1b1091804bc2602586919e6880ac1cf2896': 18, // USN\n '0x84b123875f0f36b966d0b6ca14b31121bd9676ad': 18, // WNEAR_TRI,\n '0x1e0e812fbcd3eb75d8562ad6f310ed94d258d008': 18, // AURORA_WNEAR\n '0xb39eeb9e168ef6c639f5e282fef1f6bc4dcae375': 24, // NEARX\n '0x078e103d5f9629ac48b8563fa2bfcd2f6d5fde84': 18, // STADER\n '0x80da25da4d783e57d2fcda0436873a193a4beccf': 6, // decimals for USDT_NATIVE\n '0x368ebb46aca6b8d0787c96b2b20bd3cc3f2c45f7': 6, // decimals for USDC_NATIVE\n};\n","import { networkAddresses } from './constants';\n\nexport const symbolRecords: Record<string, string> = Object.fromEntries(\n networkAddresses.auTokens\n .map((e) => [e.address, e.name]) // AuToken\n .concat(networkAddresses.auTokens.map((e) => [e.underlying, e.name.slice(2)])) // underlying token\n .concat([['0x04ac48711bcdc45b4d223fb021e09da73c71095e', 'PULP']]) // others\n .map(([address, name]) => [address.toLowerCase(), name])\n);\n","import axios from 'axios';\n\nconst AURORA_API_BASE_URL = 'https://explorer.mainnet.aurora.dev/api';\n\nexport async function getQuery(\n module: string,\n action: string,\n params: Record<string, any> = {}\n): Promise<any> {\n params = { ...params, module: module, action: action };\n\n let resp = await axios.get(AURORA_API_BASE_URL + '?' + new URLSearchParams(params), {\n headers: { 'Content-Type': 'application/json' },\n });\n\n return resp.data.result!;\n}\n","import axios from 'axios';\n\nexport async function queryGraphQL(query: string, graphqlUrl: string): Promise<any> {\n let resp = await axios.post(graphqlUrl, {\n query: query,\n });\n return resp.data.data!;\n}\n","import { TypedEvent } from '@aurigami/contracts/typechain/common';\nimport { Provider } from '@ethersproject/abstract-provider';\nimport BigNumber from 'bignumber.js';\nimport { BigNumber as BN, utils } from 'ethers';\nimport { Result } from 'ethers/lib/utils';\nimport { GRAPHQL_URL, networkAddresses } from '../consts/constants';\nimport { decimalRecords } from '../consts/decimals';\nimport { symbolRecords } from '../consts/symbols';\nimport { Address } from '../types';\nimport { getQuery as getAuroraAPIQuery } from './aurora-api-helpers';\nimport { queryGraphQL } from './graphql-helpers';\n\nexport function assert(condition: boolean, message: string = ''): void {\n if (!condition) {\n message = 'Assertion failed' + (message ? ': ' + message : '');\n throw new Error(message);\n }\n}\n\nexport function formatObject(object: Object) {\n return JSON.stringify(object, null, ' ');\n}\n\nexport function decimalFactor(decimal: number) {\n return BN.from(10).pow(decimal).toString();\n}\n\nexport const isSameAddress = (address1: Address, address2: Address): boolean => {\n return address1.toLowerCase() == address2.toLowerCase();\n};\n\nexport const getCurrentTimestamp = (): number => {\n return Math.trunc(Date.now() / 1000);\n};\n\nexport async function sleep(duration: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, duration);\n });\n}\n\nexport function validateAndParseAddress(address: Address): Address {\n try {\n return utils.getAddress(address);\n } catch (error) {\n throw new Error('Invalid address: ' + address);\n }\n}\n\nexport function getDecimal(address: Address): number {\n let addressLowercase = address.toLowerCase();\n assert(decimalRecords[addressLowercase] != undefined, 'Decimal not found for ' + address);\n return decimalRecords[addressLowercase];\n}\n\nexport function getSymbol(address: Address): string {\n let addressLowercase = address.toLowerCase();\n assert(symbolRecords[addressLowercase] != undefined, 'Symbol not found for ' + address);\n return symbolRecords[addressLowercase];\n}\n\nexport function getUnderlying(address: Address): Address {\n let addressLowercase = address.toLowerCase();\n let matching = networkAddresses.auTokens.filter((e) => e.address == addressLowercase);\n if (matching.length == 0) {\n throw new Error('Underlying not found for ' + address);\n }\n return matching[0].underlying;\n}\n\nexport function calcLMRewardApr(\n rewardsValue: BigNumber,\n totalStakeValue: BigNumber,\n frequencyPerYear: number\n): BigNumber {\n if (rewardsValue.isZero()) {\n return new BigNumber(0);\n }\n if (totalStakeValue.lte(0)) {\n // avoid division by zero when there is no stake\n return rewardsValue;\n }\n return rewardsValue.multipliedBy(frequencyPerYear).dividedBy(totalStakeValue);\n}\n\nexport function calcNetApy(\n suppliedValue: BigNumber,\n supplyApy: BigNumber,\n borrowedValue: BigNumber,\n borrowApy: BigNumber\n) {\n return suppliedValue.multipliedBy(supplyApy).minus(borrowedValue.multipliedBy(borrowApy));\n}\n\nexport async function getBlockTimestamp(provider: Provider, blockNumber: number): Promise<number> {\n const block = await provider.getBlock(blockNumber);\n return block.timestamp;\n}\n\nexport async function getBlocksTimestampViaRPC(\n provider: Provider,\n blocksNumber: number[]\n): Promise<number[]> {\n // Promise all 200 blocks at a time, using too many blocks at once will cause the RPC call timeout.\n const CHUNK_SIZE = 200;\n let results: number[] = [];\n for (let i = 0; i < blocksNumber.length; i += CHUNK_SIZE) {\n let slice = blocksNumber.slice(i, i + CHUNK_SIZE);\n let promises = slice.map(async (blockNumber) => getBlockTimestamp(provider, blockNumber));\n results = results.concat(await Promise.all(promises));\n }\n return results;\n}\n\n/**\n * Get timestamp of multiple blocks.\n * @note the getBlockTimestamp function is too slow because of the RPC call, even with Promise.all.\n * So I use the GraphQL endpoint of Aurora instead. You can check it here: https://explorer.mainnet.aurora.dev/graphiql\n */\nexport async function getBlocksTimestamp(\n provider: Provider,\n blockNumbers: number[]\n): Promise<number[]> {\n if (blockNumbers.length == 0) return [];\n const CHUNK_SIZE = 100; // graphql query limit\n\n let promises = [];\n let lines: string[] = blockNumbers.map((x) => `b${x}: block(number: ${x}) { timestamp }`);\n\n for (let i = 0; i < lines.length; i += CHUNK_SIZE) {\n let query = `{ ${lines.slice(i, i + CHUNK_SIZE).join('\\n')} }`;\n promises.push(queryGraphQL(query, GRAPHQL_URL));\n }\n\n // merge all the json objects\n let results = (await Promise.all(promises)).reduce((acc, cur) => {\n return { ...acc, ...cur };\n }, {});\n\n let missingBlocks = blockNumbers.filter((blockNumber) => !results[`b${blockNumber}`]);\n if (missingBlocks.length > 0) {\n devLog(`These blocks are missing from Aurora GraphQL endpoint: ${missingBlocks.join(', ')}`);\n }\n\n let missingBlocksTimestamps = await getBlocksTimestampViaRPC(provider, missingBlocks);\n\n missingBlocksTimestamps.forEach((timestamp, index) => {\n results[`b${missingBlocks[index]}`] = { timestamp: new Date(timestamp * 1000).toISOString() };\n });\n\n return blockNumbers.map((blockNumber) =>\n Math.trunc(new Date(results[`b${blockNumber}`]!.timestamp).getTime() / 1000)\n );\n}\n\n/**\n * Get the block number of the last block that has a timestamp before the given timestamp\n * @param timestamp input timestamp\n * @returns return the last block that its timestamp <= the give timestamp\n * @note Check this API for more information: https://aurorascan.dev/apis#blocks\n *\n * This function is much faster than using binary search.\n */\nexport async function getBlockBeforeTimestamp(provider: Provider, timestamp: number) {\n let result = await getAuroraAPIQuery('block', 'getblocknobytime', {\n timestamp: timestamp,\n closest: 'before',\n });\n\n // In case the API return `Block timestamp too far in the future`\n // use the last block number\n return parseInt(result.blockNumber) || (await provider.getBlockNumber());\n}\n\nexport function devLog(message?: any, ...optionalParams: any[]): void {\n if ('production' !== process.env.NODE_ENV) {\n console.log('[DEV LOG]', message, ...optionalParams);\n }\n}\n\n/**\n * Sorts (in place) an array of Events by blocknumber.\n * This method mutates the array and returns a reference to the same array.\n **/\nexport function sortEvents<T extends Result>(events: TypedEvent<T>[]): TypedEvent<T>[] {\n return events.sort((a, b) => {\n if (a.blockNumber == b.blockNumber) {\n return a.logIndex - b.logIndex;\n }\n return a.blockNumber - b.blockNumber;\n });\n}\n\n// export function Cache(cacheTimeout: number) {\n// return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {\n// const originalMethod = descriptor.value;\n// let cache = new Map<string, any>();\n// descriptor.value = function (...args: any[]) {\n// let key = JSON.stringify(args);\n// if (cache.has(key)) {\n// let [timestamp, value] = cache.get(key);\n// if (Date.now() - timestamp < cacheTimeout) {\n// return value;\n// }\n// }\n// let result = originalMethod.apply(this, args);\n// cache.set(key, [Date.now(), result]);\n// return result;\n// };\n// return descriptor;\n// };\n// }\n","import { Signer } from '@ethersproject/abstract-signer';\nimport { NetworkConnection } from '../types';\n\nexport class BlockchainEntityRead {\n protected _networkConnection: NetworkConnection;\n public constructor(networkConnection: NetworkConnection) {\n this._networkConnection = networkConnection;\n }\n}\n\nexport class BlockchainEntityReadWrite extends BlockchainEntityRead {\n public constructor(networkConnection: NetworkConnection) {\n if (!(networkConnection.signer instanceof Signer)) {\n throw Error('Signer is not provided when constructing BlockchainEntityReadWrite');\n }\n super(networkConnection);\n }\n}\n\nexport class BlockchainEntity {\n constructor() {}\n public read(networkConnection: NetworkConnection): BlockchainEntityRead {\n return new BlockchainEntityRead(networkConnection);\n }\n\n public readWrite(networkConnection: NetworkConnection): BlockchainEntityReadWrite {\n return new BlockchainEntityReadWrite(networkConnection);\n }\n}\n","import {\n AuErc20,\n AuriAirdrop,\n AuriFairLaunch,\n AuriInternalLens,\n AuriLens,\n AuriOracle,\n Comptroller,\n IERC20,\n PULP,\n PlyGame,\n PlyTokenLock,\n ReferralDirectoryV2,\n} from '@aurigami/contracts/typechain';\nimport { Contract } from 'ethers';\nimport * as abis from '../abis';\nimport { networkAddresses } from '../consts/constants';\nimport { assert } from '../helpers/helpers';\nimport { AuTokenWithUnderlying } from '../types';\nimport { BlockchainEntityRead } from './BlockchainEntity';\n\nexport class AuriEnv extends BlockchainEntityRead {\n private _comptroller: Comptroller | null = null;\n private _auriFairLaunch: AuriFairLaunch | null = null;\n private _auriLens: AuriLens | null = null;\n private _ply: IERC20 | null = null;\n private _pulp: PULP | null = null;\n private _auriInternalLens: AuriInternalLens | null = null;\n private _auriAirdrop: AuriAirdrop | null = null;\n private _referralDirectoryV2: ReferralDirectoryV2 | null = null;\n private _oracle: AuriOracle | null = null;\n private _plygame: PlyGame | null = null;\n private _plyTokenLock: PlyTokenLock | null = null;\n\n public getContract<CType extends Contract>(address: string, abi: any) {\n return new Contract(address, abi, this._networkConnection.provider) as CType;\n }\n\n public getAuTokenContracts(): AuTokenWithUnderlying[] {\n return networkAddresses.auTokens.map((auToken) => {\n const contract = this.getContract<AuTokenWithUnderlying>(\n auToken.address,\n abis.AuTokenABI.abi\n );\n contract.underlying = auToken.underlying;\n return contract;\n });\n }\n\n /**\n * Get AuErc20 contract by its address or underlying name.\n *\n * Either address or underlyingName must be provided\n *\n */\n public getAuErc20Contract({\n address,\n underlyingName,\n }: {\n address?: string;\n underlyingName?: string;\n }): AuErc20 {\n assert(\n address !== undefined || underlyingName !== undefined,\n 'Either address or underlyingName must be provided'\n );\n\n if (underlyingName) {\n address = networkAddresses.auTokens.find(\n (auToken) => auToken.name == 'au' + underlyingName\n )?.address;\n assert(address !== undefined, `AuToken with underlying ${underlyingName} not found`);\n }\n\n return this.getContract<AuErc20>(address!, abis.AuErc20ABI.abi);\n }\n\n get comptroller(): Comptroller {\n if (!this._comptroller) {\n this._comptroller = this.getContract<Comptroller>(\n networkAddresses.misc.COMPTROLLER,\n abis.ComptrollerABI.abi\n );\n }\n return this._comptroller;\n }\n\n get auriFairLaunch(): AuriFairLaunch {\n if (!this._auriFairLaunch) {\n this._auriFairLaunch = this.getContract<AuriFairLaunch>(\n networkAddresses.misc.AURIFAIRLAUNCH,\n abis.AuriFairLaunchABI.abi\n );\n }\n return this._auriFairLaunch;\n }\n\n get auriLens(): AuriLens {\n if (!this._auriLens) {\n this._auriLens = this.getContract<AuriLens>(\n networkAddresses.misc.AURILENS,\n abis.AuriLensABI.abi\n );\n }\n return this._auriLens;\n }\n\n get ply(): IERC20 {\n if (!this._ply) {\n this._ply = this.getContract<IERC20>(networkAddresses.tokens.PLY, abis.EIP20InterfaceABI.abi);\n }\n return this._ply;\n }\n\n get pulp(): PULP {\n if (!this._pulp) {\n this._pulp = this.getContract<PULP>(networkAddresses.tokens.PULP, abis.PulpABI.abi);\n }\n return this._pulp;\n }\n\n get auriInternalLens(): AuriInternalLens {\n if (!this._auriInternalLens) {\n this._auriInternalLens = this.getContract<AuriInternalLens>(\n networkAddresses.misc.AURI_INTERNAL_LENS,\n abis.AuriInternalLensABI.abi\n );\n }\n return this._auriInternalLens;\n }\n\n get auriAirdrop(): AuriAirdrop {\n if (!this._auriAirdrop) {\n this._auriAirdrop = this.getContract<AuriAirdrop>(\n networkAddresses.misc.AURI_AIRDROP,\n abis.AuriAirdropABI.abi\n );\n }\n return this._auriAirdrop;\n }\n\n get referralDirectoryV2(): ReferralDirectoryV2 {\n if (!this._referralDirectoryV2) {\n this._referralDirectoryV2 = this.getContract<ReferralDirectoryV2>(\n networkAddresses.misc.REFERRAL_V2,\n abis.ReferralDirectoryV2ABI.abi\n );\n }\n return this._referralDirectoryV2;\n }\n\n get oracle(): AuriOracle {\n if (!this._oracle) {\n this._oracle = this.getContract<AuriOracle>(\n networkAddresses.misc.PYTH_ORACLE,\n abis.AuriOracleABI.abi\n );\n }\n return this._oracle;\n }\n\n get plygame(): PlyGame {\n if (!this._plygame) {\n this._plygame = this.getContract<PlyGame>(networkAddresses.misc.PLYGAME, abis.PlyGameABI.abi);\n }\n return this._plygame;\n }\n\n get plyTokenLock(): PlyTokenLock {\n if (!this._plyTokenLock) {\n this._plyTokenLock = this.getContract<PlyTokenLock>(\n networkAddresses.misc.PLY_TOKEN_LOCK,\n abis.PlyTokenLockABI.abi\n );\n }\n return this._plyTokenLock;\n }\n}\n","import { networkAddresses } from '../consts/constants';\nimport { getDecimal } from '../helpers/helpers';\n\nexport class Token {\n public readonly address: string;\n public readonly decimals: number;\n public constructor(address: string, decimals: number) {\n this.address = address.toLowerCase();\n this.decimals = decimals;\n }\n}\n\nexport const PLYToken = new Token(\n networkAddresses.tokens.PLY,\n getDecimal(networkAddresses.tokens.PLY)\n);\n\nexport const PLYWNEARToken = new Token(\n networkAddresses.tokens.PLYWNEAR,\n getDecimal(networkAddresses.tokens.PLYWNEAR)\n);\n","import BigNumber from 'bignumber.js';\nimport { decimalFactor, getDecimal, getSymbol } from '../helpers/helpers';\nimport { Address } from '../types';\nimport { Token } from './token';\n\nexport class TokenAmount {\n public readonly token: Token;\n private rawAmnt: string;\n\n public constructor(token: Token, amount: string, isRaw: boolean = true) {\n if (isRaw) {\n this.rawAmnt = amount;\n } else {\n this.rawAmnt = new BigNumber(amount).times(decimalFactor(token.decimals)).toFixed(0);\n }\n this.token = token;\n }\n\n public formattedAmount(decimal?: number, fmt?: BigNumber.Format): string {\n if (decimal !== undefined && fmt !== undefined) {\n return new BigNumber(this.rawAmnt)\n .div(decimalFactor(this.token.decimals))\n .toFormat(decimal, fmt);\n }\n\n return new BigNumber(this.rawAmnt).div(decimalFactor(this.token.decimals)).toString();\n }\n\n public formattedAmountWithSymbol(decimal?: number, fmt?: BigNumber.Format): string {\n return `${this.formattedAmount(decimal, fmt)} ${getSymbol(this.token.address)}`;\n }\n\n public rawAmount(): string {\n return this.rawAmnt;\n }\n\n public compare(other: TokenAmount): number {\n return new BigNumber(this.rawAmnt).comparedTo(new BigNumber(other.rawAmnt));\n }\n\n public static fromAddressAndAmount(\n tokenAddress: Address,\n amount: string,\n isRaw: boolean = true\n ): TokenAmount {\n return new TokenAmount(new Token(tokenAddress, getDecimal(tokenAddress)), amount, isRaw);\n }\n}\n","import { Token, TokenAmount } from '../entities';\nimport { ReferralReward, UserMarketDetails } from '../types';\nimport { networkAddresses } from './constants';\n\nexport const dummyToken = new Token(networkAddresses.tokens.WNEAR, 24);\n\nexport const dummyPly = new Token('0x8729438eb15e2c8b576fcc6aecda6a148776c0f5', 18);\n\nexport const dummyPlyAurora = new Token('0xE530dC2095Ef5653205CF5ea79F8979a7028065c', 18);\n\nexport const dummyTokenAmount = new TokenAmount(dummyToken, '123.456', false);\n\nexport const dummyZeroTokenAmount = new TokenAmount(dummyToken, '0');\n\nexport const dummyTokenAmount2 = new TokenAmount(dummyToken, '456.123', false);\n\nexport const dummyTokenAmount3 = new TokenAmount(dummyToken, '1000.123', false);\n\nexport const dummyMarketAddress = '0xbeb5d47a3f720ec0a390d04b4d41ed7d9688bc7f'; // qiUSDC\n\nexport const dummyUserMarketDetails: UserMarketDetails = {\n market: dummyMarketAddress,\n depositBalance: dummyTokenAmount2,\n borrowBalance: dummyZeroTokenAmount,\n isCollateral: true,\n maxWithdrawableAmount: dummyTokenAmount,\n collateralRatio: 0.5,\n underlyingPrice: '1',\n};\n\nexport const referralRewardDummy1: ReferralReward = {\n campaign: 'testa',\n startTime: Math.trunc(new Date(2022, 8, 1).getTime() / 1000),\n endTime: Math.trunc(new Date(2022, 9, 30).getTime() / 1000),\n isReferrer: false,\n rewardTokenAmount: dummyTokenAmount,\n transactionHash: null,\n userAddr: '0x...123',\n refereeAddress: '0x123..123',\n};\n\nexport const referralRewardDummy2: ReferralReward = {\n campaign: 'testb',\n startTime: Math.trunc(new Date(2022, 8, 1).getTime() / 1000),\n endTime: Math.trunc(new Date(2022, 8, 31).getTime() / 1000),\n isReferrer: true,\n rewardTokenAmount: dummyTokenAmount2,\n transactionHash: '0x4da9657663b46ef18d150b897b28c7b717f16421978b52e3a06d91b54ca3548b',\n userAddr: '0x...456',\n refereeAddress: '0x123..123',\n};\n","import axios from 'axios';\n\nconst AURIGAMI_API_END_POINT = 'https://api.aurigami.finance/app/';\n\nexport async function getApi(url: string, params: Record<string, any> = {}): Promise<any> {\n const resp = await axios.get(AURIGAMI_API_END_POINT + url + '?' + new URLSearchParams(params), {\n headers: { 'Content-Type': 'application/json' },\n });\n\n return resp.data;\n}\n\nexport type MetaApiResponse = {\n totalItems: number;\n itemCount: number;\n itemsPerPage: number;\n totalPages: number;\n currentPage: number;\n};\n\nexport type PaginagedApiResponse<T> = {\n items: T[];\n meta: MetaApiResponse;\n};\n\nexport async function getPaginatedApi<T = any>(\n url: string,\n params: Record<string, any> = {},\n page: number = 1,\n pageSize: number = 50\n): Promise<PaginagedApiResponse<T>> {\n params = {\n ...params,\n page,\n limit: pageSize,\n };\n const resp = await axios.get(AURIGAMI_API_END_POINT + url + '?' + new URLSearchParams(params), {\n headers: { 'Content-Type': 'application/json' },\n });\n\n return resp.data;\n}\n","import axios from 'axios';\n\nconst KYBER_AGGREGATOR_AURORA_API_END_POINT =\n 'https://aggregator-api.kyberswap.com/aurora/route/encode';\n\nconst KYBER_AGGREGATOR_ETH_API_END_POINT =\n 'https://aggregator-api.kyberswap.com/ethereum/route/encode';\n\nexport async function getSwapInfo(\n tokenIn: string,\n tokenOut: string,\n amountIn: string,\n onAurora = true\n): Promise<KyberApiResponse> {\n const params = {\n tokenIn,\n tokenOut,\n amountIn,\n to: '0x0000000000000000000000000000000000000000',\n useMeta: '1',\n saveGas: '1',\n gasInclude: '1',\n };\n const endpoint = onAurora\n ? KYBER_AGGREGATOR_AURORA_API_END_POINT\n : KYBER_AGGREGATOR_ETH_API_END_POINT;\n const resp = await axios.get(endpoint + '?' + new URLSearchParams(params), {\n headers: { 'Content-Type': 'application/json' },\n });\n\n return resp.data;\n}\n\nexport type KyberApiResponse = {\n inputAmount: string;\n outputAmount: string;\n};\n","// https://api.1inch.io/v5.0/1313161554/quote?fromTokenAddress=0x8bec47865ade3b172a928df8f990bc7f2a3b9f79&toTokenAddress=0x4988a896b1227218e4a686fde5eabdcabd91571f&amount=1000000000000000000\n\nimport axios from 'axios';\n\nconst ONEINCH_AGGREGATOR_API_END_POINT = 'https://api.1inch.io/v5.0/1313161554/quote';\n\nexport async function getQuoteOneInch(\n fromTokenAddress: string,\n toTokenAddress: string,\n amount: string\n): Promise<OneInchApiResponse> {\n const params = {\n fromTokenAddress,\n toTokenAddress,\n amount,\n };\n const resp = await axios.get(\n ONEINCH_AGGREGATOR_API_END_POINT + '?' + new URLSearchParams(params),\n {\n headers: { 'Content-Type': 'application/json' },\n }\n );\n return resp.data;\n}\n\nexport type OneInchApiResponse = {\n fromToken: {\n symbol: string;\n name: string;\n decimals: number;\n address: string;\n logoURI: string;\n tags: string[];\n };\n toToken: {\n symbol: string;\n name: string;\n decimals: number;\n address: string;\n logoURI: string;\n tags: string[];\n };\n toTokenAmount: string;\n fromTokenAmount: string;\n};\n","import AuriLensABI from '@aurigami/contracts/artifacts/contracts/AuriLens.sol/AuriLens.json';\nimport { AuriPythOracle, ERC20, IUniswapV2Pair } from '@aurigami/contracts/typechain';\nimport axios from 'axios';\nimport BigNumber from 'bignumber.js';\nimport { BigNumber as BN, Contract, ethers, providers } from 'ethers';\nimport { AuriOracleABI, EIP20InterfaceABI, IUniswapV2PairABI } from '../abis';\nimport {\n DECIMAL_PRECISION,\n HARDCODE_PRICE_TOKENS,\n PRICE_WHITELISTED,\n STADER_ETH,\n USDT_ETH,\n networkAddresses,\n} from '../consts/constants';\nimport { TokenAmount } from '../entities/tokenAmount';\nimport { Address, TokenValuation } from '../types';\nimport { assert, decimalFactor, devLog, getDecimal, isSameAddress } from './helpers';\nimport { getSwapInfo } from './kyber-aggregator-api';\nimport { getQuoteOneInch } from './one-inch-aggregator-api';\n\nexport async function prepareParamsAggregator(address: string, provider: providers.Provider) {\n const tokenInErc20 = new Contract(address, EIP20InterfaceABI.abi, provider) as ERC20;\n const tokenInDecimal = await tokenInErc20.decimals();\n const tokenInQuantity = BN.from(10).pow(tokenInDecimal).toString();\n const usdtAddress =\n networkAddresses.auTokens.find((autoken) => autoken.name == 'auUSDT')?.underlying ?? '';\n const usdtDecimal = getDecimal(usdtAddress);\n return {\n tokenInQuantity,\n usdtAddress,\n usdtDecimal,\n };\n}\n\nexport async function fetchPriceFromOneInch(address: string, provider: providers.Provider) {\n const { tokenInQuantity, usdtAddress, usdtDecimal } = await prepareParamsAggregator(\n address,\n provider\n );\n const info = await getQuoteOneInch(address, usdtAddress, tokenInQuantity);\n const outputAmount = info.toTokenAmount;\n return new BigNumber(outputAmount).dividedBy(10 ** usdtDecimal);\n}\n\nexport async function fetchPriceFromKyberSwap(\n address: string,\n provider: providers.Provider,\n onAurora = true\n): Promise<BigNumber> {\n if (address == networkAddresses.tokens.STADER) {\n const ETH_PROVIDER = new ethers.providers.JsonRpcProvider('https://rpc.ankr.com/eth');\n\n return fetchPriceFromKyberSwap(STADER_ETH, ETH_PROVIDER, false);\n }\n let { tokenInQuantity, usdtAddress, usdtDecimal } = await prepareParamsAggregator(\n address,\n provider\n );\n if (!onAurora) {\n usdtAddress = USDT_ETH;\n }\n const info = await getSwapInfo(address, usdtAddress, tokenInQuantity, onAurora);\n const outputAmount = info.outputAmount;\n return new BigNumber(outputAmount).dividedBy(10 ** usdtDecimal);\n}\n\nexport async function fetchPriceFromDefiLlamaAPI(id: string): Promise<BigNumber> {\n const price = await axios\n .get(`https://coins.llama.fi/prices/current/${id}`)\n .then((res: any) => {\n return res.data.coins[id].price;\n })\n .catch((err: any) => {\n console.log(`unable to fetch price from DefiLlama API: ${err}`);\n console.error(err);\n return 0;\n });\n return new BigNumber(price);\n}\n\nexport async function fetchPriceFromCoingeckoAPI(id: string): Promise<BigNumber> {\n const price = await axios\n .get(`https://api.coingecko.com/api/v3/simple/price?ids=${id}&vs_currencies=usd`)\n .then((res: any) => {\n return res.data[id];\n })\n .catch((err: any) => {\n console.log(`Unable to fetch price from Coingecko API for ${id}`);\n console.error(err);\n return { usd: 0 };\n });\n\n return new BigNumber(price.usd);\n}\n\nexport async function fetchPriceFromDefiLlamaAndCoingecko(id: Address): Promise<BigNumber> {\n if (\n id.toLowerCase() == networkAddresses.tokens.AURORA ||\n id.toLowerCase() == networkAddresses.tokens.TRI ||\n id.toLowerCase() == networkAddresses.tokens.META\n ) {\n return fetchPriceFromDefiLlamaAPI(`aurora:${id.toLowerCase()}`).catch((e) =>\n fetchPriceFromCoingecko(id)\n );\n } else if (id.toLowerCase() == networkAddresses.tokens.STADER) {\n return fetchPriceFromCoingecko(id);\n }\n throw Error(`Unknown token ${id} in fetchPriceFromDefiLlama`);\n}\n\nexport async function fetchPriceFromCoingecko(id: Address): Promise<BigNumber> {\n switch (id.toLowerCase()) {\n case networkAddresses.tokens.AURORA:\n return fetchPriceFromCoingeckoAPI('aurora-near');\n\n case networkAddresses.tokens.TRI:\n return fetchPriceFromCoingeckoAPI('trisolaris');\n\n case networkAddresses.tokens.META:\n return fetchPriceFromCoingeckoAPI('meta-pool');\n\n case networkAddresses.tokens.STADER:\n return fetchPriceFromCoingeckoAPI('stader');\n\n default:\n throw Error(`Unknown token ${id} in fetchPriceFromCoingecko`);\n }\n}\n\nexport async function fetchLPPositions(\n LPAddress: Address,\n provider: providers.Provider\n): Promise<{\n token0: Address;\n token1: Address;\n reserve0: BN;\n reserve1: BN;\n totalSupply: BN;\n}> {\n const LPContract = new Contract(LPAddress, IUniswapV2PairABI.abi, provider) as IUniswapV2Pair;\n const [token0, token1, reserves, totalSupply] = await Promise.all([\n LPContract.token0(),\n LPContract.token1(),\n LPContract.getReserves(),\n LPContract.totalSupply(),\n ]);\n\n return {\n token0: token0,\n token1: token1,\n reserve0: reserves.reserve0,\n reserve1: reserves.reserve1,\n totalSupply: totalSupply,\n };\n}\n\nexport async function fetchLPPrice(\n address: Address,\n provider: providers.Provider\n): Promise<BigNumber> {\n var LPInfo = await fetchLPPositions(address, provider);\n const LPDecimal = getDecimal(address);\n\n async function fetchLPPriceBy(tokenReverse: {\n address: string;\n reserve: BN;\n }): Promise<BigNumber> {\n if (tokenReverse.reserve.isZero()) return new BigNumber(0);\n\n // Should NOT call `fetchPrice`, it will cause an infinite loop\n // because the token can be PLY. To calculate PLY price, we need to\n // call `fetchPrice` again...\n const tokenPrice: BigNumber = await _fetchPrice(tokenReverse.address, provider);\n const tokenDecimal = getDecimal(tokenReverse.address);\n\n // reserveUSD will be divided by 10^tokenDecimal later for more precision\n const reserveUSD: BigNumber = tokenPrice\n .multipliedBy(tokenReverse.reserve.toString())\n .multipliedBy(2);\n return reserveUSD\n .multipliedBy(decimalFactor(LPDecimal))\n .dividedBy(new BigNumber(LPInfo.totalSupply.toString()))\n .dividedBy(decimalFactor(tokenDecimal));\n }\n\n try {\n // MUST await here\n const lpPrice = await fetchLPPriceBy({\n address: LPInfo.token0,\n reserve: LPInfo.reserve0,\n });\n if (lpPrice.isZero()) {\n throw Error(`Price is zero`);\n }\n return lpPrice;\n } catch (e) {\n devLog(`fetchLPPriceBy ${LPInfo.token0} failed`, e);\n try {\n // MUST await here\n return await fetchLPPriceBy({\n address: LPInfo.token1,\n reserve: LPInfo.reserve1,\n });\n } catch (e) {\n devLog(`fetchLPPriceBy ${LPInfo.token1} failed`, e);\n throw Error(`Unable to fetch price for both tokens of LP ${address}`);\n }\n }\n}\n\nexport async function fetchStNEARPrice(): Promise<BigNumber> {\n const ratioPromise = axios\n .get('https://validators.narwallets.com/metrics_json')\n .then((res) => res.data);\n const nearPricePromise = fetchPriceFromCoingeckoAPI('near');\n const [ratioRes, nearPrice]: [any, BigNumber] = await Promise.all([\n ratioPromise,\n nearPricePromise,\n ]);\n const ratio = new BigNumber(ratioRes.st_near_price);\n return ratio.multipliedBy(nearPrice);\n}\n\nfunction processPriceFromOracle(rawPrice: BN, underlyingDecimal: number) {\n return new BigNumber(rawPrice.toString()).div(decimalFactor(36 - underlyingDecimal));\n}\nexport async function fetchPriceFromOracle(\n auTokenAddress: Address,\n underlyingDecimal: number,\n provider: providers.Provider\n): Promise<BigNumber> {\n const oracleContract: AuriPythOracle = new Contract(\n networkAddresses.misc.PYTH_ORACLE,\n AuriOracleABI.abi,\n provider\n ) as AuriPythOracle;\n const rawPrice = await oracleContract.getUnderlyingPrice(auTokenAddress).catch((e: any) => {\n console.log(`Unable to fetch price from oracle for ${auTokenAddress}`);\n return BN.from(0);\n });\n\n // In case of error, probally it is because the underlying token is not supported\n // by the backup oracle. In that case, we will fetch from third-party.\n if (rawPrice.isZero()) {\n const matchingAuToken = networkAddresses.auTokens.find((auToken) => {\n return isSameAddress(auToken.address, auTokenAddress);\n });\n if (matchingAuToken?.name == 'auSTNEAR') {\n return fetchStNEARPrice();\n }\n }\n\n return processPriceFromOracle(rawPrice, underlyingDecimal);\n}\n\nexport async function fetchUnderlyingTokensPrices(provider: providers.Provider): Promise<\n {\n auToken: string;\n underlyingPrice: BigNumber;\n }[]\n> {\n const auriLens: Contract = new Contract(\n networkAddresses.misc.AURILENS,\n AuriLensABI.abi,\n provider\n );\n const auTokenAddresses = networkAddresses.auTokens.map((auToken) => auToken.address);\n const underlyingDecimals = networkAddresses.auTokens.map((auToken) =>\n getDecimal(auToken.underlying)\n );\n const rawPrices = await auriLens.auTokenUnderlyingPriceAll(auTokenAddresses);\n return rawPrices.map((res: any, ind: number) => {\n return {\n auToken: res.auToken,\n underlyingPrice: processPriceFromOracle(res.underlyingPrice, underlyingDecimals[ind]),\n };\n });\n}\n\nfunction shouldFetchFromKyberSwap(address: string) {\n address = address.toLowerCase();\n return (\n address == networkAddresses.tokens.TRI ||\n address == networkAddresses.tokens.META ||\n address == networkAddresses.tokens.STADER\n );\n}\n\n/**\n * Fetch price from Oracle or Coingecko\n */\nasync function _fetchPrice(address: Address, provider: providers.Provider): Promise<BigNumber> {\n assert(\n PRICE_WHITELISTED.has(address.toLocaleLowerCase()),\n `Address ${address} is not whitelisted for price fetching`\n );\n if (address.toLowerCase() == networkAddresses.tokens.META) {\n return fetchPriceFromDefiLlamaAndCoingecko(address);\n }\n if (shouldFetchFromKyberSwap(address)) {\n return fetchPriceFromKyberSwap(address, provider).catch((e) => {\n return fetchPriceFromDefiLlamaAndCoingecko(address);\n });\n }\n const matchingAuToken = networkAddresses.auTokens.find((auToken) => {\n return isSameAddress(auToken.underlying, address);\n });\n\n if (matchingAuToken !== undefined) {\n return fetchPriceFromOracle(matchingAuToken.address, getDecimal(address), provider);\n } else {\n throw Error(`Unable to fetch price for ${address}`);\n }\n}\n\nexport async function fetchPrice(\n address: Address,\n provider: providers.Provider\n): Promise<BigNumber> {\n if (address.toLowerCase() in HARDCODE_PRICE_TOKENS) {\n return new BigNumber(HARDCODE_PRICE_TOKENS[address.toLowerCase()]);\n } else if (isSameAddress(address, networkAddresses.tokens.PLYWNEAR)) {\n return fetchLPPrice(address, provider);\n } else if (isSameAddress(address, networkAddresses.tokens.PLY)) {\n return fetchPLYPrice(provider);\n } else if (isSameAddress(address, networkAddresses.tokens.PULP)) {\n return fetchPULPPrice(provider);\n }\n return _fetchPrice(address, provider);\n}\n\nexport async function fetchPLYPrice(provider: providers.Provider): Promise<BigNumber> {\n //TODO: Fetch PLY price from CEX?\n return fetchToken0PriceByLP(networkAddresses.tokens.PLYWNEAR, provider);\n}\n\nexport async function fetchPULPPrice(provider: providers.Provider): Promise<BigNumber> {\n //TODO: Calculate PULP price\n return new BigNumber(0);\n}\n\nexport async function fetchToken0PriceByLP(\n LP: Address,\n provider: providers.Provider\n): Promise<BigNumber> {\n const LPInfo = await fetchLPPositions(LP, provider);\n\n if (LPInfo.reserve1.isZero()) {\n return new BigNumber(0);\n }\n\n const token0Decimal = getDecimal(LPInfo.token0);\n const token1Decimal = getDecimal(LPInfo.token1);\n\n // (token0Price * reserve0) / 10^decimal0 = (token1Price * reserve1) / 10^decimal1\n // token0Price = (token1Price * reserve1) * 10^decimal0 / 10^decimal1 / reserve0\n return (await fetchPrice(LPInfo.token1, provider))\n .multipliedBy(LPInfo.reserve1.toString())\n .multipliedBy(decimalFactor(token0Decimal))\n .dividedBy(decimalFactor(token1Decimal))\n .dividedBy(LPInfo.reserve0.toString());\n}\n\nexport async function fetchValuation(\n tokenAmount: TokenAmount,\n provider: providers.Provider\n): Promise<BigNumber> {\n if (tokenAmount.rawAmount() == '0') return new BigNumber(0);\n var price = await fetchPrice(tokenAmount.token.address, provider);\n return calcValuation(tokenAmount, price);\n}\n\nexport function calcValuation(tokenAmount: TokenAmount, price: BigNumber) {\n return new BigNumber(tokenAmount.formattedAmount()).multipliedBy(price);\n}\n\nexport async function valuateToken(\n tokenAmount: TokenAmount,\n provider: providers.Provider\n): Promise<TokenValuation> {\n let tokenValuation = await fetchValuation(tokenAmount, provider);\n return {\n tokenAmount: tokenAmount,\n currencyAmount: {\n currency: 'USD',\n amount: tokenValuation.toFixed(DECIMAL_PRECISION),\n },\n };\n}\n","import AuTokenABI from '@aurigami/contracts/artifacts/contracts/AuToken.sol/AuToken.json';\nimport { AuToken } from '@aurigami/contracts/typechain';\nimport { BigNumber as BN, Contract } from 'ethers';\nimport { BlockchainEntityRead } from '../entities/BlockchainEntity';\nimport { NetworkConnection } from '../types';\n\ntype SimpleTransfer = {\n from: string;\n to: string;\n amount: BN;\n blockNumber: number;\n};\n\nexport class TransferEventQuery extends BlockchainEntityRead {\n auToken: AuToken;\n\n constructor(tokenAddr: string, networkConnection: NetworkConnection) {\n super(networkConnection);\n this.auToken = new Contract(\n tokenAddr,\n AuTokenABI.abi,\n this._networkConnection.provider\n ) as AuToken;\n }\n\n /**\n * query ERC20 transfers from/to an address & auto convert them into SimpleTransfer.\n * The result will be sorted by blocknumber.\n */\n async queryERC20TransfersOf(\n address: string,\n fromBlock: number,\n toBlock: number\n ): Promise<SimpleTransfer[]> {\n const filters = [\n this.auToken.filters.Transfer(address, null),\n this.auToken.filters.Transfer(null, address),\n ];\n\n const events = (\n await Promise.all(\n filters.map((filter) => this.auToken.queryFilter(filter, fromBlock, toBlock))\n )\n ).flat();\n\n let results: SimpleTransfer[] = events.map((event) => {\n return {\n from: event.args![0],\n to: event.args![1],\n amount: event.args![2],\n blockNumber: event.blockNumber,\n };\n });\n\n results.sort((a, b) => a.blockNumber - b.blockNumber);\n\n return results;\n }\n\n /**\n * Get the balance of an address at a given block number.\n *\n * Note that this will return the balance after the block get mined.\n */\n async queryERC20BalanceAt(address: string, endBlock: number): Promise<BN> {\n return this.auToken.balanceOf(address, { blockTag: endBlock + 1 });\n }\n}\n","import { IUniswapV2Pair, PriceOracle } from '@aurigami/contracts/typechain';\nimport BigNumber from 'bignumber.js';\nimport { BigNumber as BN, Contract, providers } from 'ethers';\nimport { AuriOracleABI, IUniswapV2PairABI } from '../abis';\nimport { HARDCODE_PRICE_TOKENS, networkAddresses } from '../consts/constants';\nimport { Address } from '../types';\nimport { decimalFactor, devLog, getDecimal, isSameAddress } from './helpers';\n\nexport async function fetchHistoricalLPPositions(\n LPAddress: Address,\n provider: providers.Provider,\n block: number\n): Promise<{\n token0: Address;\n token1: Address;\n reserve0: BN;\n reserve1: BN;\n totalSupply: BN;\n}> {\n const LPContract = new Contract(LPAddress, IUniswapV2PairABI.abi, provider) as IUniswapV2Pair;\n var promises: any[] = [];\n promises.push(LPContract.token0());\n promises.push(LPContract.token1());\n promises.push(LPContract.getReserves({ blockTag: block }));\n promises.push(LPContract.totalSupply({ blockTag: block }));\n const values: any[] = await Promise.all(promises);\n\n return {\n token0: values[0] as string,\n token1: values[1] as string,\n reserve0: (values[2] as { reserve0: BN; reserve1: BN }).reserve0,\n reserve1: (values[2] as { reserve0: BN; reserve1: BN }).reserve1,\n totalSupply: values[3] as BN,\n };\n}\n\nexport async function fetchHistoricalLPPrice(\n address: Address,\n provider: providers.Provider,\n block: number\n): Promise<BigNumber> {\n var LPInfo = await fetchHistoricalLPPositions(address, provider, block);\n const LPDecimal = getDecimal(address);\n\n async function fetchLPPriceBy(\n tokenReverse: {\n address: string;\n reserve: BN;\n },\n block: number\n ): Promise<BigNumber> {\n if (tokenReverse.reserve.isZero()) return new BigNumber(0);\n\n const tokenPrice: BigNumber = await fetchHistoricalPrice(tokenReverse.address, provider, block);\n const tokenDecimal = getDecimal(tokenReverse.address);\n\n // reserveUSD will be divided by 10^tokenDecimal later for more precision\n const reserveUSD: BigNumber = tokenPrice\n .multipliedBy(tokenReverse.reserve.toString())\n .multipliedBy(2);\n return reserveUSD\n .multipliedBy(decimalFactor(LPDecimal))\n .dividedBy(new BigNumber(LPInfo.totalSupply.toString()))\n .dividedBy(decimalFactor(tokenDecimal));\n }\n\n try {\n // MUST await here\n const lpPrice = await fetchLPPriceBy(\n {\n address: LPInfo.token0,\n reserve: LPInfo.reserve0,\n },\n block\n );\n if (lpPrice.isZero()) {\n throw Error(`Price is zero`);\n }\n return lpPrice;\n } catch (e) {\n devLog(`fetchLPPriceBy ${LPInfo.token0} failed`, e);\n try {\n // MUST await here\n return await fetchLPPriceBy(\n {\n address: LPInfo.token1,\n reserve: LPInfo.reserve1,\n },\n block\n );\n } catch (e) {\n devLog(`fetchLPPriceBy ${LPInfo.token1} failed`, e);\n throw Error(`Unable to fetch price for both tokens of LP ${address}`);\n }\n }\n}\n\nfunction processPriceFromOracle(rawPrice: BN, underlyingDecimal: number) {\n return new BigNumber(rawPrice.toString()).div(decimalFactor(36 - underlyingDecimal));\n}\nexport async function fetchHistoricalPriceFromOracle(\n auTokenAddress: Address,\n underlyingDecimal: number,\n provider: providers.Provider,\n block: number\n): Promise<BigNumber> {\n // from this block, we switch to use pyth\n // TODO: add to consts\n const oracleAddress =\n block < 102438637\n ? networkAddresses.misc.DEPRECATED_OLD_ORACLE\n : networkAddresses.misc.PYTH_ORACLE;\n\n const oracleContract: PriceOracle = new Contract(\n oracleAddress,\n AuriOracleABI.abi,\n provider\n ) as PriceOracle;\n const rawPrice = await oracleContract\n .getUnderlyingPrice(auTokenAddress, { blockTag: block })\n .catch((e: any) => {\n console.log(`Unable to fetch price from oracle for ${auTokenAddress}`);\n return BN.from(0);\n });\n\n return processPriceFromOracle(rawPrice, underlyingDecimal);\n}\n\nexport async function fetchHistoricalPrice(\n address: Address,\n provider: providers.Provider,\n block: number\n): Promise<BigNumber> {\n if (address.toLowerCase() in HARDCODE_PRICE_TOKENS) {\n return new BigNumber(HARDCODE_PRICE_TOKENS[address.toLowerCase()]);\n } else if (\n isSameAddress(address, networkAddresses.tokens.PLY_WNEAR) ||\n isSameAddress(address, networkAddresses.tokens.WNEAR_TRI) ||\n isSameAddress(address, networkAddresses.tokens.AURORA_WNEAR)\n ) {\n return fetchHistoricalLPPrice(address, provider, block);\n } else if (isSameAddress(address, networkAddresses.tokens.PLY)) {\n return fetchHistoricalPriceByLP(networkAddresses.tokens.PLY_WNEAR, provider, block);\n } else if (isSameAddress(address, networkAddresses.tokens.TRI)) {\n return fetchHistoricalPriceByLP(networkAddresses.tokens.WNEAR_TRI, provider, block, 1);\n } else if (isSameAddress(address, networkAddresses.tokens.AURORA)) {\n return fetchHistoricalPriceByLP(networkAddresses.tokens.AURORA_WNEAR, provider, block);\n }\n\n const matchingAuToken = networkAddresses.auTokens.find((auToken) => {\n return isSameAddress(auToken.underlying, address);\n });\n\n if (matchingAuToken !== undefined) {\n return fetchHistoricalPriceFromOracle(\n matchingAuToken.address,\n getDecimal(address),\n provider,\n block\n );\n } else {\n throw Error(`Unable to fetch price for ${address}`);\n }\n}\n\nexport async function fetchHistoricalPULPPrice(provider: providers.Provider): Promise<BigNumber> {\n //TODO: Calculate PULP price\n return new BigNumber(0);\n}\n\nexport async function fetchHistoricalPriceByLP(\n LP: Address,\n provider: providers.Provider,\n block: number,\n tokenNumber: 0 | 1 = 0\n): Promise<BigNumber> {\n let LPInfo = await fetchHistoricalLPPositions(LP, provider, block);\n\n if (tokenNumber === 1) {\n LPInfo = {\n token0: LPInfo.token1,\n token1: LPInfo.token0,\n reserve0: LPInfo.reserve1,\n reserve1: LPInfo.reserve0,\n totalSupply: LPInfo.totalSupply,\n };\n }\n\n if (LPInfo.reserve1.isZero()) {\n return new BigNumber(0);\n }\n\n const token0Decimal = getDecimal(LPInfo.token0);\n const token1Decimal = getDecimal(LPInfo.token1);\n\n // (token0Price * reserve0) / 10^decimal0 = (token1Price * reserve1) / 10^decimal1\n // token0Price = (token1Price * reserve1) * 10^decimal0 / 10^decimal1 / reserve0\n return (await fetchHistoricalPrice(LPInfo.token1, provider, block))\n .multipliedBy(LPInfo.reserve1.toString())\n .multipliedBy(decimalFactor(token0Decimal))\n .dividedBy(decimalFactor(token1Decimal))\n .dividedBy(LPInfo.reserve0.toString());\n}\n","import { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { BigNumber as BN, utils } from 'ethers';\nimport { AuriEnv, BlockchainEntity, BlockchainEntityRead, Token, TokenAmount } from '../entities';\nimport * as helpers from '../helpers';\nimport { Address, NetworkConnection } from '../types';\n\nexport class AirdropRead extends BlockchainEntityRead {\n public readonly env: AuriEnv;\n\n public constructor(networkConnection: NetworkConnection) {\n super(networkConnection);\n this.env = new AuriEnv(networkConnection);\n }\n\n /**\n * Get redeemable rewards amount of user\n */\n public async getRedeemableReward(\n campaign: string,\n token: Address,\n user: Address\n ): Promise<TokenAmount> {\n let tokenInstance: Token = new Token(token, helpers.getDecimal(token));\n\n let rewards: BN = await this.env.auriAirdrop.getRedeemableReward(\n utils.formatBytes32String(campaign),\n token,\n user\n );\n\n return new TokenAmount(tokenInstance, rewards.toString());\n }\n}\n\nexport class AirdropReadWrite extends AirdropRead {\n /**\n * Transfer rewards from multiple campaigns to msg.sender\n */\n public async redeemMultiple(\n campaigns: string[],\n tokens: Address[]\n ): Promise<TransactionResponse> {\n helpers.assert(\n campaigns.length == tokens.length,\n 'campaigns and tokens must have the same length'\n );\n return this.env.auriAirdrop.connect(this._networkConnection.signer!).redeem(\n campaigns.map((e) => utils.formatBytes32String(e)),\n tokens,\n await this._networkConnection.signer!.getAddress()\n );\n }\n\n /**\n * Redeem reward from a single campaign\n */\n public async redeemSingle(campaign: string, token: Address): Promise<TransactionResponse> {\n return this.redeemMultiple([campaign], [token]);\n }\n}\n\nexport class Airdrop extends BlockchainEntity {\n constructor() {\n super();\n }\n public read(networkConnection: NetworkConnection): AirdropRead {\n return new AirdropRead(networkConnection);\n }\n public readWrite(networkConnection: NetworkConnection): AirdropReadWrite {\n return new AirdropReadWrite(networkConnection);\n }\n}\n","import { AuETH, AuErc20, EthRepayHelper } from '@aurigami/contracts/typechain';\nimport { TransactionResponse } from '@ethersproject/abstract-provider';\nimport BigNumber from 'bignumber.js';\nimport { CacheType, cache } from 'cache-decorator';\nimport { BigNumber as BN, Contract } from 'ethers';\nimport * as abis from '../abis';\nimport * as consts from '../consts';\nimport { CACHE_TIMEOUT, ONE_DAY } from '../consts';\nimport {\n AuriEnv,\n BlockchainEntity,\n BlockchainEntityRead,\n PLYToken,\n Token,\n TokenAmount,\n} from '../entities';\nimport * as helpers from '../helpers';\nimport { calcValuation, fetchPrice, fetchValuation } from '../helpers/priceFetcher';\nimport { Address, Apy, MoneyMarketDetails, NetworkConnection } from '../types';\n\ntype RewardSpeeds = {\n plyRewardSupplySpeed: BN;\n plyRewardBorrowSpeed: BN;\n auroraRewardSupplySpeed: BN;\n auroraRewardBorrowSpeed: BN;\n};\n\nexport class MoneyMarketRead extends BlockchainEntityRead {\n public underlying: Token;\n public auToken: AuErc20 | AuETH;\n public readonly env: AuriEnv;\n constructor(networkConnection: NetworkConnection, auToken: Address, underlyingAsset: Address) {\n super(networkConnection);\n this.env = new AuriEnv(networkConnection);\n if (helpers.isSameAddress(underlyingAsset, consts.ETHAddress)) {\n this.auToken = new Contract(auToken, abis.AuETHABI.abi, networkConnection.provider) as AuETH;\n } else {\n this.auToken = new Contract(\n auToken,\n abis.AuErc20ABI.abi,\n networkConnection.provider\n ) as AuErc20;\n }\n this.underlying = new Token(underlyingAsset, helpers.getDecimal(underlyingAsset));\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getUnderlyingPrice(): Promise<BigNumber> {\n return fetchPrice(this.underlying.address, this._networkConnection.provider);\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getPlyPrice(): Promise<BigNumber> {\n return fetchPrice(consts.networkAddresses.tokens.PLY, this._networkConnection.provider);\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n protected async getRewardSpeeds(): Promise<RewardSpeeds> {\n var speeds = await this.env.auriLens.getRewardSpeeds(\n this.env.comptroller.address,\n this.auToken.address\n );\n return speeds;\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getTotalTokenBorrowed(): Promise<TokenAmount> {\n return new TokenAmount(this.underlying, (await this.auToken.totalBorrows()).toString());\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getTotalTokenDeposited(): Promise<TokenAmount> {\n const [totalBorrow, totalCash] = await Promise.all([\n this.getTotalTokenBorrowed(),\n this.auToken.getCash(),\n ]);\n return new TokenAmount(\n this.underlying,\n BN.from(new TokenAmount(this.underlying, totalCash.toString()).rawAmount())\n .add(totalBorrow.rawAmount())\n .toString()\n );\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getDepositAPY(): Promise<BigNumber> {\n const supplyRatePerTimestamp = await this.auToken.supplyRatePerTimestamp();\n const supplyRatePerDay = new BigNumber(supplyRatePerTimestamp.toString())\n .multipliedBy(ONE_DAY)\n .div(helpers.decimalFactor(18));\n\n return new BigNumber(supplyRatePerDay.plus(1)).pow(365).minus(1);\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getBorrowAPY(): Promise<BigNumber> {\n const borrowRatePerTimestamp = await this.auToken.borrowRatePerTimestamp();\n const borrowRatePerDay = new BigNumber(borrowRatePerTimestamp.toString())\n .multipliedBy(ONE_DAY)\n .div(helpers.decimalFactor(18));\n return new BigNumber(borrowRatePerDay.plus(1)).pow(365).minus(1);\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getCollateralRatio(): Promise<BigNumber> {\n return this.env.comptroller.markets(this.auToken.address).then((res: any) => {\n return new BigNumber(res.collateralFactorMantissa.toString()).div(helpers.decimalFactor(18));\n });\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getBorrowPlyAPY(): Promise<BigNumber> {\n const [totalBorrowed, rewardSpeeds, plyPrice, underlyingPrice] = await Promise.all([\n this.getTotalTokenBorrowed(),\n this.getRewardSpeeds(),\n this.getPlyPrice(),\n this.getUnderlyingPrice(),\n ]);\n return helpers.calcLMRewardApr(\n calcValuation(\n new TokenAmount(PLYToken, rewardSpeeds.plyRewardBorrowSpeed.toString()),\n plyPrice\n ),\n underlyingPrice.multipliedBy(totalBorrowed.formattedAmount()),\n consts.ONE_YEAR\n );\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getDepositPlyAPY(): Promise<BigNumber> {\n const [totalDeposited, rewardSpeeds, plyPrice, underlyingPrice] = await Promise.all([\n this.getTotalTokenDeposited(),\n this.getRewardSpeeds(),\n this.getPlyPrice(),\n this.getUnderlyingPrice(),\n ]);\n return helpers.calcLMRewardApr(\n calcValuation(\n new TokenAmount(PLYToken, rewardSpeeds.plyRewardSupplySpeed.toString()),\n plyPrice\n ),\n underlyingPrice.multipliedBy(totalDeposited.formattedAmount()),\n consts.ONE_YEAR\n );\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getDepositNearAPY(): Promise<BigNumber> {\n const [totalDeposited, underlyingPrice] = await Promise.all([\n this.getTotalTokenDeposited(),\n this.getUnderlyingPrice(),\n ]);\n let depositNEARApy = helpers.calcLMRewardApr(\n await fetchValuation(this.getDepositNEARRewardPerWeek(), this._networkConnection.provider),\n underlyingPrice.multipliedBy(totalDeposited.formattedAmount()),\n 52\n );\n return depositNEARApy;\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getBorrowNearAPY(): Promise<BigNumber> {\n const [totalBorrowed, underlyingPrice] = await Promise.all([\n this.getTotalTokenBorrowed(),\n this.getUnderlyingPrice(),\n ]);\n let borrowNEARApy = helpers.calcLMRewardApr(\n await fetchValuation(this.getBorrowNEARRewardPerWeek(), this._networkConnection.provider),\n underlyingPrice.multipliedBy(totalBorrowed.formattedAmount()),\n 52\n );\n return borrowNEARApy;\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getDepositMetaAPY(): Promise<BigNumber> {\n return new BigNumber(0);\n // const [totalDeposited, underlyingPrice] = await Promise.all([\n // this.getTotalTokenDeposited(),\n // fetchPrice(this.underlying.address, this._networkConnection.provider),\n // ]);\n // let depositMETAApy;\n // if (helpers.isSameAddress(this.underlying.address, consts.networkAddresses.tokens.stNEAR)) {\n // depositMETAApy = helpers.calcLMRewardApr(\n // await fetchValuation(\n // TokenAmount.fromAddressAndAmount(consts.networkAddresses.tokens.META, '250000', false),\n // this._networkConnection.provider\n // ),\n // underlyingPrice.multipliedBy(totalDeposited.formattedAmount()),\n // 12\n // );\n // } else {\n // depositMETAApy = new BigNumber(0);\n // }\n // return depositMETAApy;\n }\n\n @cache({ ttl: CACHE_TIMEOUT, type: CacheType.MEMO })\n public async getDepositStaderAPY(): Promise<BigNumber> {\n return new BigNumber(0);\n // const rewardStartTime = 1675346400;\n // const currentTime = helpers.getCurrentTimestamp();\n // if (currentTime < rewardStartTime) {\n // return new BigNumber(0);\n // }\n // const [totalDeposited, underlyingPrice] = await Promise.all([\n // this.getTotalTokenDeposited(),\n // fetchPrice(this.underlying.address, this._networkConnection.provider),\n // ]);\n // let depositStaderApy;\n // if (helpers.isSameAddress(this.underlying.address, consts.networkAddresses.tokens.NEARX)) {\n // depositStaderApy = helpers.calcLMRewardApr(\n // await fetchValuation(\n // TokenAmount.fromAddressAndAmount(consts.networkAddresses.tokens.STADER, '40', false),\n // this._networkConnection.provider\n // ),\n // underlyingPrice.multipliedBy(totalDeposited.formattedAmount()),\n // 365\n // );\n // } else {\n // depositStaderApy = new BigNumber(0);\n // }\n // return depositStaderApy;\n }\n\n public async getDetails(): Promise<MoneyMarketDetails> {\n const [totalDeposited, totalBorrowed, depositAPY, borrowAPY, collateralRatio, rewardSpeeds] =\n await Promise.all([\n this.getTotalTokenDeposited(),\n this.getTotalTokenBorrowed(),\n this.getDepositAPY(),\n this.getBorrowAPY(),\n this.getCollateralRatio(),\n this.getRewardSpeeds(),\n ]);\n const [\n depositPlyAPY,\n borrowPlyAPY,\n depositNearAPY,\n borrowNearAPY,\n depositMetaAPY,\n staderDepositApy,\n ] = await Promise.all([\n this.getDepositPlyAPY(),\n this.getBorrowPlyAPY(),\n this.getDepositNearAPY(),\n this.getBorrowNearAPY(),\n this.getDepositMetaAPY(),\n this.getDepositStaderAPY(),\n ]);\n return {\n auTokenAddress: this.auToken.address,\n totalTokenDeposited: totalDeposited,\n totalTokenBorrowed: totalBorrowed,\n depositApy: depositAPY.toNumber(),\n depositPlyApy: depositPlyAPY.toNumber(),\n borrowApy: borrowAPY.toNumber(),\n borrowPlyApy: borrowPlyAPY.toNumber() * -1,\n collateralRatio: collateralRatio.toNumber(),\n depositPlyPerWeek: new TokenAmount(\n PLYToken,\n rewardSpeeds.plyRewardSupplySpeed.mul(consts.ONE_DAY).mul(7).toString()\n ),\n borrowPlyPerWeek: new TokenAmount(\n PLYToken,\n rewardSpeeds.plyRewardBorrowSpeed.mul(consts.ONE_DAY).mul(7).toString()\n ),\n depositNEARApy: depositNearAPY.toNumber(),\n borrowNEARApy: borrowNearAPY.toNumber() * -1,\n depositMETAApy: depositMetaAPY.toNumber(),\n staderDepositApy: staderDepositApy.toNumber(),\n };\n }\n\n public async getUserBorrowBalance(userAddress: string): Promise<TokenAmount> {\n const totalBorrow: BN = await this.auToken.callStatic.borrowBalanceCurrent(userAddress);\n return new TokenAmount(this.underlying, totalBorrow.toString());\n }\n\n public async getUserDepositBalance(userAddress: string): Promise<TokenAmount> {\n const totalDeposit: BN = await this.auToken.callStatic.balanceOfUnderlying(userAddress);\n return new TokenAmount(this.underlying, totalDeposit.toString());\n }\n\n private getDepositNEARRewardPerWeek(): TokenAmount {\n const NEARToken = new Token(\n consts.networkAddresses.tokens.WNEAR,\n helpers.getDecimal(consts.networkAddresses.tokens.WNEAR)\n );\n const rewardStartTime = 1650636000;\n const rewardStopTime = 1651845600; // May 06, 2022 2 PM GMT\n const currentTime = helpers.getCurrentTimestamp();\n if (currentTime <= rewardStopTime && currentTime > rewardStartTime) {\n const reward =\n consts.DEPOSIT_NEAR_REWARDS_PER_WEEK[this.underlying.address.toLocaleLowerCase()] ?? '0';\n return new TokenAmount(NEARToken, reward, false);\n } else {\n return new TokenAmount(NEARToken, '0');\n }\n }\n\n private getBorrowNEARRewardPerWeek(): TokenAmount {\n const NEARToken = new Token(\n consts.networkAddresses.tokens.WNEAR,\n helpers.getDecimal(consts.networkAddresses.tokens.WNEAR)\n );\n const rewardStartTime = 1650636000;\n const rewardStopTime = 1651845600; // May 06, 2022 2 PM GMT\n const currentTime = helpers.getCurrentTimestamp();\n if (currentTime <= rewardStopTime && currentTime > rewardStartTime) {\n const reward =\n consts.BORROW_NEAR_REWARDS_PER_WEEK[this.underlying.address.toLocaleLowerCase()] ?? '0';\n return new TokenAmount(NEARToken, reward, false);\n } else {\n return new TokenAmount(NEARToken, '0');\n }\n }\n public async mintCap(): Promise<TokenAmount> {\n return new TokenAmount(\n this.underlying,\n (await this.env.comptroller.mintCaps(this.auToken.address)).toString()\n );\n }\n public async borrowCap(): Promise<TokenAmount> {\n return new TokenAmount(\n this.underlying,\n (await this.env.comptroller.borrowCaps(this.auToken.address)).toString()\n );\n }\n\n public async getDepositBorrowValue(userAddress: Address) {\n const [price, depositBalance, borrowBalance] = await Promise.all([\n this.getUnderlyingPrice(),\n this.getUserDepositBalance(userAddress),\n this.getUserBorrowBalance(userAddress),\n ]);\n const suppliedValue = price.multipliedBy(depositBalance.formattedAmount());\n const borrowedValue = price.multipliedBy(borrowBalance.formattedAmount());\n return {\n suppliedValue,\n borrowedValue,\n };\n }\n\n public async getApyWithoutIncentive(userAddress: Address): Promise<Apy> {\n const [price, depositApy, borrowApy, depositBalance, borrowBalance] = await Promise.all([\n this.getUnderlyingPrice(),\n this.getDepositAPY(),\n this.getBorrowAPY(),\n this.getUserDepositBalance(userAddress),\n this.getUserBorrowBalance(userAddress),\n ]);\n const suppliedValue = price.multipliedBy(depositBalance.formattedAmount());\n const borrowedValue = price.multipliedBy(borrowBalance.formattedAmount());\n const sum = helpers.calcNetApy(suppliedValue, depositApy, borrowedValue, borrowApy);\n return {\n sum,\n suppliedValue,\n borrowedValue,\n };\n }\n\n public async getApyWithIncentive(userAddress: Address): Promise<Apy> {\n const [\n price,\n depositApy,\n borrowApy,\n depositBalance,\n borrowBalance,\n nearDepositApy,\n plyDepositApy,\n metaDepositApy,\n nearBorrowApy,\n plyBorrowApy,\n ] = await Promise.all([\n this.getUnderlyingPrice(),\n this.getDepositAPY(),\n this.getBorrowAPY(),\n this.getUserDepositBalance(userAddress),\n this.getUserBorrowBalance(userAddress),\n this.getDepositNearAPY(),\n this.getDepositPlyAPY(),\n this.getDepositMetaAPY(),\n this.getBorrowNearAPY(),\n this.getBorrowPlyAPY(),\n ]);\n // idk why i cannot put this to promise.all, txds keep getting error\n const staderDepositApy = await this.getDepositStaderAPY();\n const suppliedValue = price.multipliedBy(depositBalance.formattedAmount());\n const borrowedValue = price.multipliedBy(borrowBalance.formattedAmount());\n const totalDepositApy = depositApy\n .plus(nearDepositApy)\n .plus(plyDepositApy)\n .plus(metaDepositApy)\n .plus(staderDepositApy);\n const totalBorrowApy = borrowApy.plus(nearBorrowApy).plus(plyBorrowApy);\n const sum = helpers.calcNetApy(suppliedValue, totalDepositApy, borrowedValue, totalBorrowApy);\n return {\n sum,\n suppliedValue,\n borrowedValue,\n };\n }\n}\n\nexport class MoneyMarketReadWrite extends MoneyMarketRead {\n protected _EthRepayHelper: EthRepayHelper;\n constructor(networkConnection: NetworkConnection, auToken: Address, underlyingAsset: Address) {\n super(networkConnection, auToken, underlyingAsset);\n this._EthRepayHelper = new Contract(\n consts.networkAddresses.misc.ETHREPAYHELPER,\n abis.EthRepayHelperABI.abi,\n networkConnection.provider\n ) as EthRepayHelper;\n }\n\n public async deposit(amount: TokenAmount): Promise<TransactionResponse> {\n if (helpers.isSameAddress(amount.token.address, consts.ETHAddress)) {\n return (this.auToken as AuETH)\n .connect(this._networkConnection.signer!)\n .mint({ value: amount.rawAmount() });\n } else {\n return (this.auToken as AuErc20)\n .connect(this._networkConnection.signer!)\n .mint(amount.rawAmount());\n }\n }\n public async borrow(amount: TokenAmount): Promise<TransactionResponse> {\n return this.auToken.connect(this._networkConnection.signer!).borrow(amount.rawAmount());\n }\n public async withdraw(amount: TokenAmount): Promise<TransactionResponse> {\n if (new BigNumber(amount.rawAmount()).lt(0)) {\n return this.auToken.connect(this._networkConnection.signer!).redeemUnderlying(consts.INF);\n }\n return this.auToken\n .connect(this._networkConnection.signer!)\n .redeemUnderlying(amount.rawAmount());\n }\n public async repay(amount: TokenAmount): Promise<TransactionResponse> {\n if (helpers.isSameAddress(amount.token.address, consts.ETHAddress)) {\n return this._EthRepayHelper\n .connect(this._networkConnection.signer!)\n .repayBorrow({ value: amount.rawAmount() });\n } else {\n if (new BigNumber(amount.rawAmount()).lt(0)) {\n return this.auToken.connect(this._networkConnection.signer!).repayBorrow(consts.INF);\n } else {\n return this.auToken\n .connect(this._networkConnection.signer!)\n .repayBorrow(amount.rawAmount());\n }\n }\n }\n public async enableCollateral(): Promise<TransactionResponse> {\n return this.env.comptroller\n .connect(this._networkConnection.signer!)\n .enterMarkets([this.auToken.address]);\n }\n public async disableCollateral(): Promise<TransactionResponse> {\n return this.env.comptroller\n .connect(this._networkConnection.signer!)\n .exitMarket(this.auToken.address);\n }\n}\n\nexport class MoneyMarket extends BlockchainEntity {\n protected address: Address;\n\n protected underlying: Address;\n constructor(address: string, underlying: string) {\n super();\n this.address = helpers.validateAndParseAddress(address);\n this.underlying = helpers.validateAndParseAddress(underlying);\n }\n public read(networkConnection: NetworkConnection): MoneyMarketRead {\n return new MoneyMarketRead(networkConnection, this.address, this.underlying);\n }\n\n public readWrite(networkConnection: NetworkConnection): MoneyMarketReadWrite {\n return new MoneyMarketReadWrite(networkConnection, this.address, this.underlying);\n }\n}\n","import { TransactionResponse } from '@ethersproject/abstract-provider';\nimport BigNumber from 'bignumber.js';\nimport { BigNumber as BN } from 'ethers';\nimport * as consts from '../consts';\nimport { AuriEnv, BlockchainEntity, BlockchainEntityRead, Token, TokenAmount } from '../entities';\nimport * as helpers from '../helpers';\nimport { Address, NetworkConnection, UserLockingDetails } from '../types';\n\nconst LOCKING_DENOMINATOR = BN.from(10000);\nexport class PapermillRead extends BlockchainEntityRead {\n public readonly plyToken: Token;\n public readonly pulpToken: Token;\n public readonly env: AuriEnv;\n\n constructor(networkConnection: NetworkConnection) {\n super(networkConnection);\n this.env = new AuriEnv(networkConnection);\n\n let plyAddress = consts.networkAddresses.tokens.PLY;\n let pulpAddress = consts.networkAddresses.tokens.PULP;\n\n this.plyToken = new Token(plyAddress, helpers.getDecimal(plyAddress));\n this.pulpToken = new Token(pulpAddress, helpers.getDecimal(pulpAddress));\n }\n\n public async getPlyBalance(userAddress: Address): Promise<TokenAmount> {\n const plyBalance = await this.env.ply.balanceOf(userAddress);\n return new TokenAmount(this.plyToken, plyBalance.toString());\n }\n\n public async getPulpBalance(userAddress: Address): Promise<TokenAmount> {\n const pulpBalance = await this.env.pulp.balanceOf(userAddress);\n return new TokenAmount(this.pulpToken, pulpBalance.toString());\n }\n\n /**\n * Get all unclaimed PLY reward of the user in all markets + all staking pools\n */\n public async getUnclaimedPlyReward(userAddress: Address): Promise<TokenAmount> {\n let rewardBalancesMetadata = await this.env.auriLens.callStatic.claimRewards(\n this.env.comptroller.address,\n this.env.auriFairLaunch.address,\n consts.ALL_STAKING_POOLS,\n { from: userAddress }\n );\n\n return new TokenAmount(this.plyToken, rewardBalancesMetadata.plyAccrured.toString());\n }\n\n public getWeek(timestamp: number): number {\n return BN.from(timestamp - consts.REWARD_CLAIM_START)\n .div(consts.ONE_WEEK)\n .toNumber();\n }\n\n /**\n * Get all locking details of the user in all markets + all staking pools\n */\n public async getLockingDetails(userAddress: Address): Promise<UserLockingDetails> {\n const currentWeek = this.getWeek(helpers.getCurrentTimestamp());\n\n const values = await Promise.all([\n this.env.auriLens.getPercentLock(this.env.pulp.address, userAddress, currentWeek),\n this.env.auriLens.getPercentLock(this.env.pulp.address, userAddress, currentWeek + 1),\n this.getUnclaimedPlyReward(userAddress),\n ]);\n\n let percentLockCurrentWeek = BN.from(values[0]);\n let percentLockNextWeek = BN.from(values[1]);\n let totalRewards = values[2] as TokenAmount;\n\n let [pulpAmountCurrentWeek, plyAmountCurrentWeek] = await this.env.pulp.calcLockAmount(\n userAddress,\n totalRewards.rawAmount()\n );\n\n // Predict next week lock amount = totalRewards * percentLock next week\n // This doesn't take (the reward that user might earn in the next week) into account\n let plyAmountNextWeek = percentLockNextWeek\n .mul(totalRewards.rawAmount())\n .div(LOCKING_DENOMINATOR);\n let pulpAmountNextWeek = BN.from(totalRewards.rawAmount()).sub(plyAmountNextWeek);\n\n // we need to divide these two number by 10000 and multiple by 100 to get the percentage\n // I need to use BigNumber to do this because BN of ethers.js doesn't support floating point\n let currentUnlockPortion = LOCKING_DENOMINATOR.sub(percentLockCurrentWeek).toString();\n let nextUnlockPortion = LOCKING_DENOMINATOR.sub(percentLockNextWeek).toString();\n\n return {\n vestingStart: consts.REWARD_CLAIM_START,\n currentUnlockPortion: new BigNumber(currentUnlockPortion).dividedBy(100).toNumber(),\n accruedPly: totalRewards,\n currentPly: new TokenAmount(this.plyToken, plyAmountCurrentWeek.toString()),\n currentPulp: new TokenAmount(this.pulpToken, pulpAmountCurrentWeek.toString()),\n //\n nextUnlockPortion: new BigNumber(nextUnlockPortion).dividedBy(100).toNumber(),\n nextPly: new TokenAmount(this.plyToken, plyAmountNextWeek.toString()),\n nextPulp: new TokenAmount(this.pulpToken, pulpAmountNextWeek.toString()),\n };\n }\n\n /**\n * Get the first timestamp that the unlockPortion reach the target\n *\n * @param userAddress currently doesn't matter\n * @param targetUnlockPortion unlockPortion target\n */\n public async getTimestampToUnlock(\n userAddress: Address,\n targetUnlockPortion: number\n ): Promise<number> {\n let weekId = await this.env.auriLens.getWeekToUnlock(\n this.env.pulp.address,\n userAddress,\n targetUnlockPortion * 100\n );\n\n return consts.REWARD_CLAIM_START + consts.ONE_WEEK * weekId.toNumber();\n }\n\n /**\n * Get the start timestamp of next week of the papermill contract.\n *\n * This is a sync function!\n *\n * @returns the timestamp in seconds\n */\n public getNextWeekTimestamp(): number {\n const nextWeek = this.getWeek(helpers.getCurrentTimestamp()) + 1;\n return consts.REWARD_CLAIM_START + consts.ONE_WEEK * nextWeek;\n }\n\n public async getUnlockPortionAt(userAddress: Address, timestamp: number): Promise<number> {\n let lockPortion = await this.env.auriLens.getPercentLock(\n this.env.pulp.address,\n userAddress,\n this.getWeek(timestamp)\n );\n\n let unlockPortion = LOCKING_DENOMINATOR.sub(lockPortion);\n\n return unlockPortion.toNumber() / 100;\n }\n}\n\nexport class PapermillReadWrite extends PapermillRead {\n constructor(networkConnection: NetworkConnection) {\n super(networkConnection);\n }\n\n /**\n * Redeem PLY from PULP and transfer PLY to another address\n * @param recipient Address that will receive the PLY.\n * @param amount Amount of PULP to be converted to PLY.\n * Set to ethers.constants.MaxUint256 for max redeem.\n */\n public async redeem(recipient: Address, amount: TokenAmount): Promise<TransactionResponse> {\n return this.env.pulp\n .connect(this._networkConnection.signer!)\n .redeem(recipient, amount.rawAmount());\n }\n\n /**\n * Redeem PLY from PULP and transfer PLY to msg.sender\n * @param amount Amount of PULP to be converted to PLY.\n * Set to ethers.constants.MaxUint256 for max redeem.\n */\n public async selfRedeem(amount: TokenAmount): Promise<TransactionResponse> {\n let msgSender: string = await this._networkConnection.signer!.getAddress();\n return this.redeem(msgSender, amount);\n }\n}\n\nexport class Papermill extends BlockchainEntity {\n constructor() {\n super();\n }\n public read(networkConnection: NetworkConnection): PapermillRead {\n return new PapermillRead(networkConnection);\n }\n\n public readWrite(networkConnection: NetworkConnection): PapermillReadWrite {\n return new PapermillReadWrite(networkConnection);\n }\n}\n","import { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { BigNumber as BN } from 'ethers';\nimport * as consts from '../consts';\nimport { AuriEnv, BlockchainEntity, BlockchainEntityRead, Token, TokenAmount } from '../entities';\nimport * as helpers from '../helpers';\nimport { getBlocksTimestamp, isSameAddress, sleep, sortEvents } from '../helpers';\nimport * as AuriAPI from '../helpers/aurigami-api';\nimport {\n Address,\n NetworkConnection,\n PlyBetMadeEvent,\n PlyGameBetResult,\n PlyGameLeaderboardItem,\n} from '../types';\n\nexport class PlyGameRead extends BlockchainEntityRead {\n public readonly plyToken: Token;\n public readonly pulpToken: Token;\n public readonly env: AuriEnv;\n\n public constructor(networkConnection: NetworkConnection) {\n super(networkConnection);\n this.env = new AuriEnv(networkConnection);\n\n let plyAddress = consts.networkAddresses.tokens.PLY;\n let pulpAddress = consts.networkAddresses.tokens.PULP;\n this.plyToken = new Token(plyAddress, helpers.getDecimal(plyAddress));\n this.pulpToken = new Token(pulpAddress, helpers.getDecimal(pulpAddress));\n }\n\n private parseBetMakeEvent(event: PlyBetMadeEvent): PlyGameBetResult {\n let outcome = ['bigWin', 'win', 'lose', 'noImpact'][event.args.outcome];\n let betAmount = event.args.amount;\n // 0%, 0%, 100%, 2%\n // big win, win, lose, no impact\n let lostAmount = betAmount.mul([0, 0, 100, 2][event.args.outcome]).div(100);\n let unlock = betAmount.mul([10, 1, 0, 0][event.args.outcome]);\n return {\n player: event.args.player,\n lostAmount: new TokenAmount(this.plyToken, lostAmount.toString()),\n unlockedPulpAmount: new TokenAmount(this.pulpToken, unlock.toString()),\n outcome: outcome,\n transactionHash: event.transactionHash,\n block: event.blockNumber,\n timestamp: 0, // will be filled later\n };\n }\n\n private async attachTimestamp(results: PlyGameBetResult[]): Promise<PlyGameBetResult[]> {\n let blockNumbers = results.map((e) => e.block);\n let blockstimestamp = await getBlocksTimestamp(this._networkConnection.provider, blockNumbers);\n return results.map((e, i) => ({ ...e, timestamp: blockstimestamp[i] }));\n }\n\n /**\n * Get 100 most recent bets of the market users\n */\n public async getUserPlyGameHistory(user: Address): Promise<PlyGameBetResult[]> {\n let block100 = await this.env.plygame.getLastBlock(user, 100);\n\n if (block100.eq(0)) {\n return [];\n }\n\n let filter = this.env.plygame.filters.BetMade(user);\n let events = await this.env.plygame.queryFilter(filter, block100.toNumber());\n // Sort descending by block number\n sortEvents(events).reverse();\n return this.attachTimestamp(events.map((event) => this.parseBetMakeEvent(event)));\n }\n\n /**\n * Get current jackpot amount\n */\n public async currentJackpotAmount(): Promise<TokenAmount> {\n let jackpot = await this.env.plygame.currentJackpotAmount();\n return new TokenAmount(this.plyToken, jackpot.toString());\n }\n\n public async earlyUnlockedPulpAmount(user: Address): Promise<TokenAmount> {\n let earlyUnlockedPulpAmount = await this.env.plygame.totalPlyUnlockedEarly(user);\n return new TokenAmount(this.pulpToken, earlyUnlockedPulpAmount.toString());\n }\n\n public async getPlyGameResultsInTransaction(txHash: Address): Promise<PlyGameBetResult[]> {\n // wait for the tx to be mined if needed.\n // Don't use `waitForTransaction` because it will wait for longer than needed.\n let tx = await this._networkConnection.provider.getTransactionReceipt(txHash);\n\n for (let i = 0; i < 100 && !tx; i++) {\n await sleep(1000); // Sleep for 1 second before retrying\n tx = await this._networkConnection.provider.getTransactionReceipt(txHash);\n }\n\n if (!tx) {\n throw new Error(`Transaction ${txHash} takes too long to be mined`);\n }\n\n let filter = this.env.plygame.filters.BetMade();\n let betMadeEvents: PlyBetMadeEvent[] = tx.logs\n .filter((log) => isSameAddress(log.topics[0], filter.topics![0] as string))\n .map((log) => ({\n ...this.env.plygame.interface.parseLog(log),\n blockNumber: tx.blockNumber,\n transactionHash: txHash,\n })) as unknown as PlyBetMadeEvent[];\n\n return this.attachTimestamp(betMadeEvents.map((e) => this.parseBetMakeEvent(e)));\n }\n\n /**\n * Top 100 users by amount of PULP unlocked\n */\n public async leaderboard(): Promise<PlyGameLeaderboardItem[]> {\n const result = await AuriAPI.getPaginatedApi('/plygame/leaderboard');\n return result.items.map((item, i) => ({\n player: item.user!,\n unlockedPulpAmount: new TokenAmount(this.pulpToken, item.unlockedAmount!),\n gamesPlayed: item.count!,\n }));\n }\n\n public async getLastJackpotResult(): Promise<{ winner: Address; amount: TokenAmount }> {\n // 158 is the storage slot of the jackpot length\n let round = BN.from(\n await this._networkConnection.provider.getStorageAt(this.env.plygame.address, 158)\n );\n let result = await this.env.plygame.jackpotHistory(round.sub(1));\n return {\n winner: result.winner.slice(0, 5) + '...' + result.winner.slice(-3),\n amount: new TokenAmount(this.plyToken, result.amount.toString()),\n };\n }\n\n public async overallLeaderboard(): Promise<PlyGameLeaderboardItem[]> {\n const result = await AuriAPI.getPaginatedApi('/plygame/overallLeaderboard');\n return result.items.map((item) => ({\n player: item.user,\n unlockedPulpAmount: new TokenAmount(this.pulpToken, item.unlockedAmount!),\n gamesPlayed: item.count!,\n }));\n }\n}\n\nexport class PlyGameReadWrite extends PlyGameRead {\n /**\n * Make a single bet\n */\n public async makeBetOnce(amount: TokenAmount): Promise<TransactionResponse> {\n return this.env.plygame\n .connect(this._networkConnection.signer!)\n .makeBetOnce(amount.rawAmount());\n }\n\n public async approve(amount: TokenAmount): Promise<TransactionResponse> {\n return this.env.ply\n .connect(this._networkConnection.signer!)\n .approve(this.env.plygame.address, amount.rawAmount());\n }\n}\n\nexport class PlyGame extends BlockchainEntity {\n constructor() {\n super();\n }\n public read(networkConnection: NetworkConnection): PlyGameRead {\n return new PlyGameRead(networkConnection);\n }\n public readWrite(networkConnection: NetworkConnection): PlyGameReadWrite {\n return new PlyGameReadWrite(networkConnection);\n }\n}\n","import { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { BigNumber as BN } from 'ethers';\nimport { AuriEnv, BlockchainEntity, BlockchainEntityRead, TokenAmount } from '../entities';\nimport { Address, NetworkConnection } from '../types';\n\nexport class PulpRead extends BlockchainEntityRead {\n public readonly env: AuriEnv;\n\n public constructor(networkConnection: NetworkConnection) {\n super(networkConnection);\n this.env = new AuriEnv(networkConnection);\n }\n\n public async remainingEarlyUnlockPulp(user: Address): Promise<BN> {\n return this.env.pulp.earlyRedeems(user);\n }\n}\n\nexport class PulpReadWrite extends PulpRead {\n public async convertEarlyPulp(\n recipient: Address,\n amount: TokenAmount\n ): Promise<TransactionResponse> {\n const amountToRedeem = BN.from(amount.rawAmount());\n return this.env.pulp.connect(this._networkConnection.signer!).redeem(recipient, amountToRedeem);\n }\n}\n\nexport class Pulp extends BlockchainEntity {\n constructor() {\n super();\n }\n public read(networkConnection: NetworkConnection): PulpRead {\n return new PulpRead(networkConnection);\n }\n public readWrite(networkConnection: NetworkConnection): PulpReadWrite {\n return new PulpReadWrite(networkConnection);\n }\n}\n","import { TransactionResponse } from '@ethersproject/abstract-provider';\nimport axios from 'axios';\nimport { ethers } from 'ethers';\nimport { AURORA_PLUS_API_PREFIX, REFERRAL_CAMPAIGNS } from '../consts';\nimport { AuriEnv, BlockchainEntity, BlockchainEntityRead, TokenAmount } from '../entities';\nimport { getBlocksTimestamp } from '../helpers';\nimport * as AuriAPI from '../helpers/aurigami-api';\nimport { Address, NetworkConnection, ReferralReward } from '../types';\nimport { AirdropReadWrite } from './Airdrop';\n\nexport class ReferralRead extends BlockchainEntityRead {\n public readonly env: AuriEnv;\n constructor(networkConnection: NetworkConnection) {\n super(networkConnection);\n this.env = new AuriEnv(networkConnection);\n }\n\n /**\n * Generate a 10-character referral code\n * containing alphanumeric characters.\n */\n protected generateReferralCode(): string {\n let letters = 'abcdefghijklmnopqrstuvwxyz';\n let numbers = '1234567890';\n let charset = letters + letters.toUpperCase() + numbers;\n let R = '';\n for (var i = 0; i < 10; i++) R += charset[Math.floor(Math.random() * charset.length)];\n return R;\n }\n\n /**\n * Get the referral code for a given address, returns empty string if not found.\n *\n * Called to check if a user has a referral code.\n */\n public async getUserReferralCode(userAddr: Address): Promise<string> {\n const result = await this.env.referralDirectoryV2.userReferralCode(userAddr);\n return ethers.utils.parseBytes32String(result);\n }\n\n /**\n * Get referral code that a user was referred by, returns empty string if not found.\n */\n public async getReferralCodeUsed(userAddr: Address): Promise<string> {\n const result = await this.env.referralDirectoryV2.referralCodeUsed(userAddr);\n return ethers.utils.parseBytes32String(result);\n }\n\n /**\n * Get owner of a referral code, returns zero address if not found.\n */\n public async getReferralCodeOwner(code: string): Promise<Address> {\n const referralCode = ethers.utils.formatBytes32String(code);\n return this.env.referralDirectoryV2.referralCodeOwner(referralCode);\n }\n\n /**\n * Get referrals of a user, sorted descending by timestamp.\n */\n public async getReferralsList(userAddr: Address): Promise<{ user: string; timestamp: number }[]> {\n const result = await AuriAPI.getPaginatedApi('/referral/list', { address: userAddr });\n const blocks = result.items.map((item) => item.blockNumber!);\n const blocksTimestamp = await getBlocksTimestamp(this._networkConnection.provider, blocks);\n const items = result.items.map((item, i) => ({\n user: item.user!,\n timestamp: blocksTimestamp[i],\n }));\n return items;\n }\n\n /**\n * Array of rewards, sorted by time of the referral period (from latest to oldest)\n */\n public async referralRewards(userAddr: Address): Promise<ReferralReward[]> {\n const result = await AuriAPI.getPaginatedApi('/referral/rewards', { address: userAddr });\n let items: ReferralReward[] = result.items.map((item, i) => ({\n campaign: item.campaign!,\n userAddr: userAddr,\n isReferrer: (item.campaign as string).includes('referrer'),\n rewardTokenAmount: TokenAmount.fromAddressAndAmount(item.token, item.amount),\n startTime: REFERRAL_CAMPAIGNS[item.campaign].start,\n endTime: REFERRAL_CAMPAIGNS[item.campaign].end,\n transactionHash: item.transactionHash ?? null,\n refereeAddress: null,\n }));\n\n return items;\n }\n\n /**\n * Top 50 reward earners from the last round, sorted by token amount\n */\n public async leaderboard(campaign: string): Promise<ReferralReward[]> {\n const result = await AuriAPI.getPaginatedApi('/referral/leaderboard', { campaign: campaign });\n const items: ReferralReward[] = result.items.map((item, i) => ({\n campaign: campaign,\n userAddr: item.user!,\n isReferrer: (item.campaign as string).includes('referrer'),\n rewardTokenAmount: TokenAmount.fromAddressAndAmount(item.token, item.amount),\n startTime: REFERRAL_CAMPAIGNS[item.campaign].start,\n endTime: REFERRAL_CAMPAIGNS[item.campaign].end,\n transactionHash: null,\n refereeAddress: null,\n }));\n items.sort((a, b) => b.rewardTokenAmount.compare(a.rewardTokenAmount));\n return items;\n }\n\n /**\n * current number of slots under a referral code being used that exceed minimum deposit amount\n */\n public async slotsInUse(): Promise<number> {\n let result = await AuriAPI.getApi('/referral/slotsInUse');\n return result;\n }\n\n public totalReferralSlots() {\n return 500;\n }\n\n public async queuePosition(address: Address): Promise<number> {\n let result = await AuriAPI.getApi('/referral/queuePosition', { address: address });\n return result;\n }\n\n /**\n * a way to determine qualification status of a user. null if not referred yet,\n * qualified if referred + min deposit, notQualified if referred + min deposit\n * not reached or withdrew too early\n */\n public async userReferralStatus(userAddr: Address): Promise<string> {\n let result: number = await AuriAPI.getApi('/referral/referralStatus', { address: userAddr });\n switch (result) {\n case -1:\n return 'notReferred';\n case 0:\n return 'notQualified';\n case 1:\n return 'Qualified';\n default:\n return 'Withdrawn';\n }\n }\n\n public async isWhitelistedAddress(address: Address): Promise<boolean> {\n let result = await this.env.referralDirectoryV2.isUserWhitelisted(address);\n return result.eq(1);\n }\n\n public async isOnAuroraPlus(address: Address): Promise<boolean> {\n let resp = await axios.get(AURORA_PLUS_API_PREFIX + address);\n\n return resp.data.status == 'active';\n }\n\n public async isNewUserAtReferralTime(address: Address): Promise<boolean> {\n let result: boolean = await AuriAPI.getApi('/referral/isNewUser', { address: address });\n return result;\n }\n\n public async depositedMoreThanMinimumAmount(address: Address): Promise<boolean> {\n let result: boolean = await AuriAPI.getApi('/referral/depositedEnough', { address: address });\n return result;\n }\n}\n\nexport class ReferralReadWrite extends ReferralRead {\n /**\n * Generate a referral code for a given address.\n *\n * Called when an user want to creates his own referral code\n */\n public async registerNewReferralCode(): Promise<TransactionResponse> {\n const referralCode = ethers.utils.formatBytes32String(this.generateReferralCode());\n return this.env.referralDirectoryV2\n .connect(this._networkConnection.signer!)\n .registerNewUserReferralCode(referralCode);\n }\n\n /**\n * Called when an user confirms he is referred by a specified code\n */\n public async useReferralCode(code: string): Promise<TransactionResponse> {\n const referralCode = ethers.utils.formatBytes32String(code);\n return this.env.referralDirectoryV2\n .connect(this._networkConnection.signer!)\n .registerReferralCodeUsed(referralCode);\n }\n\n /**\n * Claim all unclaimed rewards for a given user\n */\n public async claimReferralRewards(): Promise<TransactionResponse> {\n const unclaimedRewards = (\n await this.referralRewards(await this._networkConnection.signer!.getAddress())\n ).filter((reward) => reward.transactionHash == null);\n const campaigns = unclaimedRewards.map((reward) => reward.campaign);\n const tokens = unclaimedRewards.map((reward) => reward.rewardTokenAmount.token.address);\n return new AirdropReadWrite(this._networkConnection).redeemMultiple(campaigns, tokens);\n }\n}\n\nexport class Referral extends BlockchainEntity {\n constructor() {\n super();\n }\n public read(networkConnection: NetworkConnection): ReferralRead {\n return new ReferralRead(networkConnection);\n }\n\n public readWrite(networkConnection: NetworkConnection): ReferralReadWrite {\n return new ReferralReadWrite(networkConnection);\n }\n}\n","import { IERC20 } from '@aurigami/contracts/typechain';\nimport { TransactionResponse } from '@ethersproject/abstract-provider';\nimport BigNumber from 'bignumber.js';\nimport { BigNumber as BN, Contract } from 'ethers';\nimport { EIP20InterfaceABI } from '../abis';\nimport * as consts from '../consts';\nimport {\n AuriEnv,\n BlockchainEntity,\n BlockchainEntityRead,\n PLYWNEARToken,\n Token,\n TokenAmount,\n} from '../entities';\nimport { calcLMRewardApr, getDecimal } from '../helpers';\nimport { fetchValuation } from '../helpers/priceFetcher';\nimport { NetworkConnection, PLYWNEARPoolDetails, TokenAPY } from '../types';\n\nexport class StakingRead extends BlockchainEntityRead {\n public readonly env: AuriEnv;\n constructor(networkConnection: NetworkConnection) {\n super(networkConnection);\n this.env = new AuriEnv(networkConnection);\n }\n\n public async getPLYWNEARPoolDetails(): Promise<PLYWNEARPoolDetails> {\n const { stakedLiquidity, rewardPerSeconds } = await this.env.auriFairLaunch\n .getPoolInfo(consts.PLYWNEAR_POOL_ID)\n .then((res) => {\n const endedTime = res.endTime;\n const startTime = res.startTime;\n const now = Date.now() / 1000;\n // If the pool has ended or not started, return 0 reward per second\n if (endedTime < now || startTime > now) {\n return {\n stakedLiquidity: res.totalStake,\n rewardPerSeconds: res.rewardPerSeconds.map((_) => BN.from(0)),\n };\n }\n return { stakedLiquidity: res.totalStake, rewardPerSeconds: res.rewardPerSeconds };\n });\n\n let stakedLiquidityAmount = new TokenAmount(PLYWNEARToken, stakedLiquidity!.toString());\n\n var totalStakeValuation: BigNumber = await fetchValuation(\n stakedLiquidityAmount,\n this._networkConnection.provider\n );\n\n var promises = [];\n\n // Calculate the reward per second in USD\n for (let i = 0; i < rewardPerSeconds!.length; i++) {\n let rewardTokenAddress = consts.PLYWNEAR_REWARD_TOKENS[i];\n let rewardToken = new Token(rewardTokenAddress, getDecimal(rewardTokenAddress));\n let rewardPerSecond = rewardPerSeconds![i];\n promises.push(\n fetchValuation(\n new TokenAmount(rewardToken, rewardPerSecond!.toString()),\n this._networkConnection.provider\n )\n );\n }\n\n let APYs: TokenAPY[] = [];\n (await Promise.all(promises)).forEach((rewardPerSecondValuation, i) => {\n let rewardTokenAddress = consts.PLYWNEAR_REWARD_TOKENS[i];\n let apy = calcLMRewardApr(\n rewardPerSecondValuation,\n totalStakeValuation,\n consts.ONE_DAY * 365\n ).toFixed(consts.DECIMAL_PRECISION);\n\n APYs.push({\n address: rewardTokenAddress,\n apy: apy,\n });\n });\n\n return {\n totalStakedLiquidity: stakedLiquidityAmount,\n APYs: APYs,\n };\n }\n\n /**\n * Get amount of staked LP tokens\n */\n public async stakeBalanceOf(user: string): Promise<TokenAmount> {\n const userInfo = await this.env.auriFairLaunch.getUserInfo(consts.PLYWNEAR_POOL_ID, user);\n return new TokenAmount(PLYWNEARToken, userInfo.amount.toString());\n }\n\n /**\n * Get amount of LP token in user wallet\n */\n public async LpBalanceOf(user: string): Promise<TokenAmount> {\n let lpContract = new Contract(\n consts.networkAddresses.tokens.PLYWNEAR,\n EIP20InterfaceABI.abi,\n this._networkConnection.provider\n ) as IERC20;\n let balance = await lpContract.balanceOf(user);\n\n return new TokenAmount(PLYWNEARToken, balance.toString());\n }\n\n public async unclaimedRewardsOf(user: string): Promise<TokenAmount[]> {\n let userInfo = await this.env.auriFairLaunch.callStatic.updateAndGetUserInfo(\n consts.PLYWNEAR_POOL_ID,\n user,\n { from: user }\n );\n\n let rewards = userInfo.unclaimedRewards;\n return rewards.map((reward, i) =>\n TokenAmount.fromAddressAndAmount(consts.PLYWNEAR_REWARD_TOKENS[i], reward.toString())\n );\n }\n}\n\nexport class StakingReadWrite extends StakingRead {\n public async stake(amount: TokenAmount): Promise<TransactionResponse> {\n return this.env.auriFairLaunch\n .connect(this._networkConnection.signer!)\n .deposit(consts.PLYWNEAR_POOL_ID, amount.rawAmount());\n }\n\n public async unstake(amount: TokenAmount): Promise<TransactionResponse> {\n const msgSender = await this._networkConnection.signer!.getAddress();\n const amountInput = BN.from(amount.rawAmount());\n const stakedAmount = BN.from((await this.stakeBalanceOf(msgSender)).rawAmount());\n // unstakeAmount = min(amountInput, stakedAmount - 1)\n const unstakeAmount = amountInput.lt(stakedAmount) ? amountInput : stakedAmount.sub(1);\n return this.env.auriFairLaunch\n .connect(this._networkConnection.signer!)\n .withdraw(consts.PLYWNEAR_POOL_ID, unstakeAmount);\n }\n}\n\nexport class Staking extends BlockchainEntity {\n constructor() {\n super();\n }\n public read(networkConnection: NetworkConnection): StakingRead {\n return new StakingRead(networkConnection);\n }\n\n public readWrite(networkConnection: NetworkConnection): StakingReadWrite {\n return new StakingReadWrite(networkConnection);\n }\n}\n","import { AuToken } from '@aurigami/contracts/typechain';\nimport { TypedEvent } from '@aurigami/contracts/typechain/common';\nimport BigNumber from 'bignumber.js';\nimport type { providers, Signer } from 'ethers';\nimport { BigNumber as BN } from 'ethers';\nimport { TokenAmount } from '../entities/tokenAmount';\n\nexport enum ComptrollerRewardType {\n PLY = 0,\n AURORA,\n}\nexport type NetworkConnection = {\n provider: providers.Provider;\n signer?: Signer;\n};\n\nexport type Address = string;\n\nexport type CurrencyAmount = {\n currency: string;\n amount: string;\n};\n\nexport type TokenValuation = {\n tokenAmount: TokenAmount;\n currencyAmount: CurrencyAmount;\n};\n\nexport type MoneyMarketDetails = {\n auTokenAddress: string;\n totalTokenDeposited: TokenAmount;\n totalTokenBorrowed: TokenAmount;\n depositApy: number;\n depositPlyApy: number;\n borrowApy: number;\n borrowPlyApy: number;\n collateralRatio: number;\n depositPlyPerWeek: TokenAmount;\n borrowPlyPerWeek: TokenAmount;\n depositMETAApy: number;\n depositNEARApy: number;\n borrowNEARApy: number;\n staderDepositApy: number;\n};\n\nexport type UserDetails = {\n markets: UserMarketDetails[];\n borrowLimit: CurrencyAmount;\n borrowableAmount: CurrencyAmount;\n};\n\nexport type UserLockingDetails = {\n vestingStart: number;\n /** % of reward they will receive in PLY, if they claim this week */\n currentUnlockPortion: number;\n //** Amount of PLY rewards that a user has. Equal to currentPly + currentPulp */\n accruedPly: TokenAmount;\n /** Amount of PLY they will receive, if they claim this week */\n currentPly: TokenAmount;\n /** Amount of PULP they will receive, if they claim this week */\n currentPulp: TokenAmount;\n /** % of reward they will receive in PLY, if they claim next week */\n nextUnlockPortion: number;\n /**\n * Amount of PLY they will receive, if they claim next week.\n * This doesn't include the additional reward that they will earn\n * in the next week.\n */\n nextPly: TokenAmount;\n /**\n * Amount of PULP they will receive, if they claim next week.\n * This doesn't include the additional reward that they will earn\n * in the next week.\n */\n nextPulp: TokenAmount;\n};\n\nexport type UserMarketDetails = {\n market: string;\n depositBalance: TokenAmount;\n borrowBalance: TokenAmount;\n isCollateral: boolean;\n maxWithdrawableAmount: TokenAmount;\n collateralRatio: number;\n underlyingPrice: string;\n};\n\nexport type TokenAPY = {\n address: string;\n apy: string;\n};\n\nexport type PLYWNEARPoolDetails = {\n totalStakedLiquidity: TokenAmount;\n APYs: TokenAPY[];\n};\n\nexport enum MarketAction {\n Deposit = 0,\n Borrow,\n Withdraw,\n Repay,\n EnableCollateral,\n DisableCollateral,\n}\n\nexport type HypotheticalStats = {\n newBorrowLimit: CurrencyAmount;\n newBorrowUtilization: number;\n};\n\nexport type AccountAuTokenInfo = {\n token: string;\n deposit: BigNumber;\n borrow: BigNumber;\n};\n\nexport type AccountAuTokensInfo = {\n address: string;\n tokens: AccountAuTokenInfo[];\n};\n\nexport type AuTokenWithUnderlying = AuToken & {\n underlying: string;\n};\n\nexport type ReferralReward = {\n campaign: string;\n /**\n * Truncated user address.\n */\n userAddr: string;\n /**\n * start timetamp of the referral round\n */\n startTime: number;\n /**\n * end timetamp of the referral round\n */\n endTime: number;\n /**\n * referrer's rewards\n */\n isReferrer: boolean;\n /**\n * reward amount\n */\n rewardTokenAmount: TokenAmount;\n /**\n * hash of the transaction on aurorascan (if no, return null)\n */\n transactionHash: string | null;\n\n refereeAddress: string | null;\n};\n\nexport type PlyGameBetResult = {\n player: string;\n /**\n * Bet outcome result\n */\n outcome: string;\n /**\n * ply lost amount\n */\n lostAmount: TokenAmount;\n unlockedPulpAmount: TokenAmount;\n\n block: number;\n timestamp: number;\n /**\n * hash of the transaction on aurorascan (if no, return null)\n */\n transactionHash: string;\n};\n\nexport type PlyGameLeaderboardItem = {\n player: string;\n gamesPlayed: number;\n unlockedPulpAmount: TokenAmount;\n};\n\nexport type PlyBetMadeEvent = TypedEvent<\n [string, BN, number] & { player: string; amount: BN; outcome: number }\n>;\n\nexport type Apy = {\n sum: BigNumber;\n suppliedValue: BigNumber;\n borrowedValue: BigNumber;\n};\n\nexport type UserNotification = {\n message: string;\n userSetting: {\n address: Address;\n mail: string;\n utilisation: number;\n liquidation: boolean;\n }[];\n};\n\nexport type LiquidationEventEntity = {\n liquidator: string;\n borrower: string;\n /** bigint string */\n repayAmount: string;\n marketRepayToken: string;\n /** bigint string */\n seizeTokens: string;\n auTokenCollateral: string;\n txnHash: string;\n blockNumber: number;\n};\n\nexport type LiquidationDetail = {\n liquidationTime: Timestamp;\n tokenAmount: TokenAmount;\n transactionId: string;\n};\n\nexport type Timestamp = number;\n","import { Multicall2 } from '@aurigami/contracts/typechain';\nimport { Contract, ethers } from 'ethers';\nimport { Result } from 'ethers/lib/utils';\nimport * as abis from '../abis';\nimport * as consts from '../consts';\nimport { BlockchainEntityRead } from '../entities';\nimport { NetworkConnection } from '../types';\n\nexport class MulticallRead extends BlockchainEntityRead {\n public readonly multicall: Multicall2;\n constructor(networkConnection: NetworkConnection) {\n super(networkConnection);\n this.multicall = new Contract(\n consts.networkAddresses.misc.MULTICALL,\n abis.Multicall2ABI.abi,\n networkConnection.provider\n ) as Multicall2;\n }\n\n /**\n * Run multiple calls via multicall contract\n */\n public async aggregate(\n calls: {\n contract: Contract;\n method: string;\n args: any[];\n returnTypes: string[];\n }[]\n ): Promise<Result[]> {\n const txns = [];\n // prepare transactions\n for (let i = 0; i < calls.length; i++) {\n const call = calls[i];\n let txn = await call.contract.populateTransaction[call.method](...call.args);\n txns.push({ target: txn.to!, callData: txn.data! });\n }\n\n const response = await this.multicall.callStatic.aggregate(txns);\n\n // parse results\n const decodedReturn = [];\n for (let i = 0; i < calls.length; i++) {\n decodedReturn.push(\n ethers.utils.defaultAbiCoder.decode(calls[i].returnTypes, response.returnData[i])\n );\n }\n return decodedReturn;\n }\n}\n","import { AuToken } from '@aurigami/contracts/typechain';\nimport BigNumber from 'bignumber.js';\nimport { BigNumber as BN } from 'ethers';\nimport * as abis from '../abis';\nimport * as consts from '../consts';\nimport { AuriEnv, BlockchainEntityRead, PLYToken, Token, TokenAmount } from '../entities';\nimport { decimalFactor, getDecimal, getSymbol, isSameAddress } from '../helpers/helpers';\nimport { calcValuation, fetchPrice } from '../helpers/priceFetcher';\nimport * as types from '../types';\nimport { MoneyMarketRead } from './MoneyMarket';\nimport { MulticallRead } from './Multicall';\nimport { StakingRead } from './Staking';\n\nexport class MiscRead extends BlockchainEntityRead {\n public readonly env: AuriEnv;\n public readonly stakingRead: StakingRead;\n constructor(networkConnection: types.NetworkConnection) {\n super(networkConnection);\n this.stakingRead = new StakingRead(networkConnection);\n this.env = new AuriEnv(networkConnection);\n }\n\n public async getUserDetails(userAddress: string): Promise<types.UserDetails> {\n const marketCount = consts.networkAddresses.auTokens.length;\n var userMarketDetails: types.UserMarketDetails[] = [],\n assetsIn: string[];\n var totalBorrowLimit = new BigNumber(0);\n for (const auToken of consts.networkAddresses.auTokens) {\n const userMarketDetail: types.UserMarketDetails = {} as types.UserMarketDetails;\n userMarketDetails.push(userMarketDetail);\n userMarketDetail.market = auToken.underlying;\n const moneyMarket: MoneyMarketRead = new MoneyMarketRead(\n this._networkConnection,\n auToken.address,\n auToken.underlying\n );\n const [depositBalance, borrowBalance, collateralRatio, underlyingPrice] = await Promise.all([\n moneyMarket.getUserDepositBalance(userAddress),\n moneyMarket.getUserBorrowBalance(userAddress),\n moneyMarket.getCollateralRatio(),\n fetchPrice(moneyMarket.underlying.address, this._networkConnection.provider),\n ]);\n\n userMarketDetail.depositBalance = depositBalance;\n userMarketDetail.borrowBalance = borrowBalance;\n userMarketDetail.collateralRatio = collateralRatio.toNumber();\n userMarketDetail.underlyingPrice = underlyingPrice.toString();\n }\n\n assetsIn = await this.env.comptroller.getAssetsIn(userAddress);\n\n var depositValues = [];\n for (var i = 0; i < marketCount; i++) {\n const auToken = consts.networkAddresses.auTokens[i];\n if (\n assetsIn!.find((auAddress: types.Address) => isSameAddress(auToken.address, auAddress)) !==\n undefined\n ) {\n userMarketDetails[i].isCollateral = true;\n } else {\n userMarketDetails[i].isCollateral = false;\n }\n depositValues.push(\n calcValuation(\n userMarketDetails[i].depositBalance,\n new BigNumber(userMarketDetails[i].underlyingPrice)\n )\n );\n }\n\n totalBorrowLimit = depositValues.reduce((p: BigNumber, v: BigNumber, index: number) => {\n if (userMarketDetails[index].isCollateral)\n return p.plus(v.multipliedBy(userMarketDetails[index].collateralRatio));\n return p;\n }, new BigNumber(0));\n\n var accountLiquidity: [BN, BN] = await this.env.comptroller.getAccountLiquidity(userAddress);\n\n var borrowedvaluation: BigNumber = totalBorrowLimit.minus(\n new BigNumber(accountLiquidity[0].toString()).div(decimalFactor(18))\n );\n\n if (borrowedvaluation.lt('0.00001')) {\n // Igore dust, dust could be the result of network delay causing collateral valuation calc to be different on vs off chain\n borrowedvaluation = new BigNumber(0);\n }\n\n const bufferedBorrowLimit: BigNumber = totalBorrowLimit.multipliedBy(\n consts.BORROW_LIMIT_BUFFER\n );\n const minimumBorrowLimitAllowed = borrowedvaluation.div(consts.BORROW_LIMIT_BUFFER);\n\n var borrowableAmount: BigNumber;\n if (bufferedBorrowLimit.lte(borrowedvaluation)) {\n borrowableAmount = new BigNumber(0);\n } else {\n borrowableAmount = bufferedBorrowLimit.minus(borrowedvaluation);\n }\n\n for (var i = 0; i < marketCount; i++) {\n const auToken = consts.networkAddresses.auTokens[i];\n const moneyMarket: MoneyMarketRead = new MoneyMarketRead(\n this._networkConnection,\n auToken.address,\n auToken.underlying\n );\n const borrowLimitMargin = totalBorrowLimit.minus(minimumBorrowLimitAllowed).gt(0)\n ? totalBorrowLimit.minus(minimumBorrowLimitAllowed)\n : new BigNumber(0);\n const maxWithdrawCap: BigNumber = borrowLimitMargin\n .div(userMarketDetails[i].collateralRatio)\n .div(userMarketDetails[i].underlyingPrice);\n userMarketDetails[i].maxWithdrawableAmount =\n userMarketDetails[i].isCollateral &&\n maxWithdrawCap.lt(userMarketDetails[i].depositBalance.formattedAmount())\n ? new TokenAmount(moneyMarket.underlying, maxWithdrawCap.toFixed(24), false)\n : new TokenAmount(\n moneyMarket.underlying,\n userMarketDetails[i].depositBalance.rawAmount()\n );\n }\n\n return {\n markets: userMarketDetails,\n borrowLimit: {\n currency: 'USD',\n amount: bufferedBorrowLimit.toFixed(consts.DECIMAL_PRECISION),\n },\n borrowableAmount: {\n currency: 'USD',\n amount: borrowableAmount.toFixed(consts.DECIMAL_PRECISION),\n },\n };\n }\n\n public async getTokenPrice(token: Token): Promise<types.CurrencyAmount> {\n const price = await fetchPrice(token.address, this._networkConnection.provider);\n return {\n currency: 'USD',\n amount: price.toFixed(consts.DECIMAL_PRECISION),\n };\n }\n\n public async calcBorrowPower(tokenAmount: TokenAmount) {\n const autoken = consts.networkAddresses.auTokens.find((auToken) =>\n isSameAddress(auToken.underlying, tokenAmount.token.address)\n )!;\n const moneyMarket: MoneyMarketRead = new MoneyMarketRead(\n this._networkConnection,\n autoken.address,\n autoken.underlying\n );\n const collateralRatio = await moneyMarket.getCollateralRatio();\n const underlyingPrice = await fetchPrice(\n tokenAmount.token.address,\n this._networkConnection.provider\n );\n const borrowPower = calcValuation(tokenAmount!, new BigNumber(underlyingPrice))\n .multipliedBy(collateralRatio)\n .multipliedBy(consts.BORROW_LIMIT_BUFFER);\n return {\n currency: 'USD',\n amount: borrowPower.toFixed(consts.DECIMAL_PRECISION),\n };\n }\n\n public calcHypotheticalStats({\n userMarketDetail,\n currentBorrowLimit,\n currentBorrowValuation,\n action,\n tokenAmount,\n }: {\n userMarketDetail: types.UserMarketDetails;\n currentBorrowLimit: types.CurrencyAmount;\n currentBorrowValuation: types.CurrencyAmount;\n action: types.MarketAction;\n tokenAmount?: TokenAmount;\n }): types.HypotheticalStats {\n var newBorrowLimit = new BigNumber(currentBorrowLimit.amount),\n newBorrowValuation = new BigNumber(currentBorrowValuation.amount);\n switch (action) {\n case types.MarketAction.EnableCollateral:\n case types.MarketAction.DisableCollateral:\n var deltaBorrowLimit = calcValuation(\n userMarketDetail.depositBalance,\n new BigNumber(userMarketDetail.underlyingPrice)\n )\n .multipliedBy(userMarketDetail.collateralRatio)\n .multipliedBy(consts.BORROW_LIMIT_BUFFER);\n newBorrowLimit =\n action == types.MarketAction.EnableCollateral\n ? newBorrowLimit.plus(deltaBorrowLimit)\n : newBorrowLimit.minus(deltaBorrowLimit);\n break;\n\n case types.MarketAction.Deposit:\n case types.MarketAction.Withdraw:\n deltaBorrowLimit = calcValuation(\n tokenAmount!,\n new BigNumber(userMarketDetail.underlyingPrice)\n )\n .multipliedBy(userMarketDetail.collateralRatio)\n .multipliedBy(consts.BORROW_LIMIT_BUFFER);\n newBorrowLimit =\n action == types.MarketAction.Deposit\n ? newBorrowLimit.plus(deltaBorrowLimit)\n : newBorrowLimit.minus(deltaBorrowLimit);\n break;\n\n case types.MarketAction.Borrow:\n case types.MarketAction.Repay:\n var deltaBorrowValuation = calcValuation(\n tokenAmount!,\n new BigNumber(userMarketDetail.underlyingPrice)\n );\n newBorrowValuation =\n action == types.MarketAction.Borrow\n ? newBorrowValuation.plus(deltaBorrowValuation)\n : newBorrowValuation.minus(deltaBorrowValuation);\n break;\n }\n return {\n newBorrowLimit: {\n amount: newBorrowLimit!.toFixed(consts.DECIMAL_PRECISION),\n currency: 'USD',\n },\n newBorrowUtilization: newBorrowLimit.eq(0)\n ? newBorrowValuation.eq(0)\n ? 0\n : 9999.99\n : newBorrowValuation!.div(newBorrowLimit!).toNumber(),\n };\n }\n\n /**\n * Get ply circulating supply.\n * It is calculated by the total supply, minus:\n * - Ply in team multisig contract\n * - Ply in comptroller contract\n * - Ply in fairlaunch contract\n * - Ply in vesting contract\n */\n public async getPlyCirculatingSupply(): Promise<TokenAmount> {\n const multicallRead = new MulticallRead(this._networkConnection);\n const baseBalanceOfCall = {\n contract: this.env.ply,\n method: 'balanceOf',\n returnTypes: ['uint256'],\n };\n\n const listAddrs = [\n consts.networkAddresses.misc.TEAM_MULTISIG,\n consts.networkAddresses.misc.COMPTROLLER,\n consts.networkAddresses.misc.AURIFAIRLAUNCH,\n consts.networkAddresses.misc.PLY_TOKEN_LOCK,\n consts.networkAddresses.misc.TEAM_MULTISIG_AURORA_PLUS,\n consts.networkAddresses.misc.AURORA_PLUS,\n consts.networkAddresses.misc.PULP_CONTRACT,\n ];\n\n const calls = listAddrs.map((addr) => ({\n ...baseBalanceOfCall,\n args: [addr],\n }));\n\n const callResults = (await multicallRead.aggregate(calls)) as BN[][];\n\n let circulatingSupply: BN = BN.from(\n '1' + '0'.repeat(10) + '0'.repeat(getDecimal(this.env.ply.address))\n );\n callResults.forEach((result, i) => {\n circulatingSupply = circulatingSupply.sub(result[0]);\n });\n\n return new TokenAmount(PLYToken, circulatingSupply.toString());\n }\n\n public async getUtilisation(userAddr: types.Address): Promise<BigNumber> {\n let accountDetail =\n await this.env.auriInternalLens.callStatic.getAccountLiquidityAccrueInterest(userAddr);\n let sumBorrow = new BigNumber(accountDetail.sumBorrowPlusEffects.toString());\n let sumCol = new BigNumber(accountDetail.sumCollateral.toString());\n return sumBorrow.dividedBy(sumCol);\n }\n\n public async sneakAccounts(\n accounts: string[],\n tokenAddresses: string[],\n dust: BigNumber = new BigNumber(0.1)\n ): Promise<types.AccountAuTokensInfo[]> {\n const _1E18 = BN.from(10).pow(18);\n const oracle = this.env.oracle;\n const tokens = tokenAddresses.map((addr) =>\n this.env.getContract<AuToken>(addr, abis.AuTokenABI.abi)\n );\n const prices = await oracle.getUnderlyingPrices(tokenAddresses);\n const exrate = await this.env.auriInternalLens.callStatic.getExchangeRates(tokenAddresses);\n\n const res: types.AccountAuTokensInfo[] = [];\n\n for (let addr of accounts) {\n const infos: types.AccountAuTokenInfo[] = [];\n for (let i = 0; i < tokens.length; ++i) {\n const snapshot = await tokens[i].getAccountSnapshot(addr);\n const bal = snapshot[0].mul(exrate[i]).div(_1E18).mul(prices[i]).div(_1E18);\n const bor = snapshot[1].mul(prices[i]).div(_1E18);\n\n let balR = new BigNumber(bal.toString()).dividedBy(_1E18.toString());\n let borR = new BigNumber(bor.toString()).dividedBy(_1E18.toString());\n\n if (balR.lte(dust) && borR.lte(dust)) continue;\n\n infos.push({\n token: getSymbol(tokenAddresses[i]),\n deposit: balR,\n borrow: borR,\n });\n }\n res.push({\n address: addr,\n tokens: infos,\n });\n }\n return res;\n }\n\n public async getLTVAndLiquidationThreshold(userAddr: types.Address) {\n let totalSuppliedValue = new BigNumber(0);\n let totalBorrowedValue = new BigNumber(0);\n let collateralValue = new BigNumber(0);\n const assetsIn = await this.env.comptroller.getAssetsIn(userAddr);\n const marketValues = await Promise.all(\n consts.networkAddresses.auTokens.map(async (auToken) => {\n const moneyMarket: MoneyMarketRead = new MoneyMarketRead(\n this._networkConnection,\n auToken.address,\n auToken.underlying\n );\n return Promise.all([\n moneyMarket.getCollateralRatio(),\n moneyMarket.getDepositBorrowValue(userAddr),\n ]);\n })\n );\n consts.networkAddresses.auTokens.forEach(async (auToken, i) => {});\n for (var i = 0; i < marketValues.length; i++) {\n const auToken = consts.networkAddresses.auTokens[i];\n const [collateralRatio, depositBorrowValue] = marketValues[i];\n if (\n assetsIn!.find((auAddress: types.Address) => isSameAddress(auToken.address, auAddress)) !==\n undefined\n ) {\n totalSuppliedValue = totalSuppliedValue.plus(depositBorrowValue.suppliedValue);\n collateralValue = collateralValue.plus(\n depositBorrowValue.suppliedValue.times(collateralRatio)\n );\n }\n totalBorrowedValue = totalBorrowedValue.plus(depositBorrowValue.borrowedValue);\n }\n const ltv = totalBorrowedValue.div(totalSuppliedValue);\n const liquidationThreshold = collateralValue.div(totalSuppliedValue);\n return {\n ltv,\n liquidationThreshold,\n };\n }\n\n public async getNetApyWithoutIncentive(userAddress: types.Address): Promise<BigNumber> {\n let sum = new BigNumber(0);\n let totalSuppliedValue = new BigNumber(0);\n let totalBorrowedValue = new BigNumber(0);\n let netApy = new BigNumber(0);\n\n const apys = await Promise.all(\n consts.networkAddresses.auTokens.map((auToken) => {\n const moneyMarket: MoneyMarketRead = new MoneyMarketRead(\n this._networkConnection,\n auToken.address,\n auToken.underlying\n );\n const apyWithoutIncentive = moneyMarket.getApyWithoutIncentive(userAddress);\n return apyWithoutIncentive;\n })\n );\n\n for (const apy of apys) {\n sum = sum.plus(apy.sum);\n totalSuppliedValue = totalSuppliedValue.plus(apy.suppliedValue);\n totalBorrowedValue = totalBorrowedValue.plus(apy.borrowedValue);\n }\n\n if (sum.gt(0)) {\n netApy = sum.div(totalSuppliedValue);\n } else if (sum.lt(0)) {\n netApy = sum.div(totalBorrowedValue);\n }\n return netApy;\n }\n\n public async getNetApyWithIncentive(userAddress: types.Address): Promise<BigNumber> {\n let sum = new BigNumber(0);\n let totalSuppliedValue = new BigNumber(0);\n let totalBorrowedValue = new BigNumber(0);\n let netApy = new BigNumber(0);\n const apys = await Promise.all(\n consts.networkAddresses.auTokens.map((auToken) => {\n const moneyMarket: MoneyMarketRead = new MoneyMarketRead(\n this._networkConnection,\n auToken.address,\n auToken.underlying\n );\n const apyWithIncentive = moneyMarket.getApyWithIncentive(userAddress);\n return apyWithIncentive;\n })\n );\n\n for (const apy of apys) {\n sum = sum.plus(apy.sum);\n totalSuppliedValue = totalSuppliedValue.plus(apy.suppliedValue);\n totalBorrowedValue = totalBorrowedValue.plus(apy.borrowedValue);\n }\n\n if (sum.gt(0)) {\n netApy = sum.div(totalSuppliedValue);\n } else if (sum.lt(0)) {\n netApy = sum.div(totalBorrowedValue);\n }\n return netApy;\n }\n}\n","import { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { BigNumber as BN, utils } from 'ethers';\nimport {\n AuriEnv,\n BlockchainEntity,\n BlockchainEntityRead,\n PLYToken,\n Token,\n TokenAmount,\n} from '../entities';\nimport * as helpers from '../helpers';\nimport { Address, NetworkConnection } from '../types';\n\nexport class PlyTokenLockRead extends BlockchainEntityRead {\n public readonly env: AuriEnv;\n\n public constructor(networkConnection: NetworkConnection) {\n super(networkConnection);\n this.env = new AuriEnv(networkConnection);\n }\n\n public async getClaimableAmount(recipient: Address): Promise<TokenAmount> {\n const claimableAmount = await this.env.plyTokenLock.callStatic.claimableBalance(recipient);\n return new TokenAmount(new Token(PLYToken.address, 18), claimableAmount.toString(), true);\n }\n}\n\nexport class PlyTokenLockReadWrite extends PlyTokenLockRead {\n public async claim(recipient: Address, amount: TokenAmount): Promise<TransactionResponse> {\n const amountToClaim = BN.from(amount.rawAmount());\n return await this.env.plyTokenLock\n .connect(this._networkConnection.signer!)\n .claim(recipient, amountToClaim);\n }\n}\n\nexport class PlyTokenLock extends BlockchainEntity {\n constructor() {\n super();\n }\n public read(networkConnection: NetworkConnection): PlyTokenLockRead {\n return new PlyTokenLockRead(networkConnection);\n }\n public readWrite(networkConnection: NetworkConnection): PlyTokenLockReadWrite {\n return new PlyTokenLockReadWrite(networkConnection);\n }\n}\n","import axios from 'axios';\n\nconst NOTIFICATION_API_END_POINT = 'https://api.aurigami.finance/notification/';\n\nexport async function getApi(url: string, params: Record<string, any> = {}): Promise<any> {\n const resp = await axios.get(\n NOTIFICATION_API_END_POINT + url + '?' + new URLSearchParams(params),\n {\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n return resp.data;\n}\n\nexport async function postApi(url: string, body: Record<string, any>): Promise<any> {\n const resp = await axios.post(NOTIFICATION_API_END_POINT + url, body, {\n headers: { 'Content-Type': 'application/json' },\n });\n\n return resp.data;\n}\n","import { TransactionResponse } from '@ethersproject/abstract-provider';\nimport BigNumber from 'bignumber.js';\nimport { ALL_STAKING_POOLS, networkAddresses } from './consts';\nimport { AuriEnv, BlockchainEntity, BlockchainEntityRead, Token, TokenAmount } from './entities';\nimport { getBlocksTimestamp, getDecimal } from './helpers';\nimport * as AuriAPI from './helpers/aurigami-api';\nimport * as NotificationApi from './helpers/notification-api';\nimport { MiscRead, StakingRead, StakingReadWrite } from './interactors';\nimport * as types from './types';\n\nexport class SdkRead extends BlockchainEntityRead {\n protected env: AuriEnv;\n protected _stakingRead: StakingRead;\n protected _misc: MiscRead;\n constructor(networkConnection: types.NetworkConnection) {\n super(networkConnection);\n this.env = new AuriEnv(networkConnection);\n this._stakingRead = new StakingRead(networkConnection);\n this._misc = new MiscRead(networkConnection);\n }\n\n public async getUserDetails(userAddress: string): Promise<types.UserDetails> {\n return this._misc.getUserDetails(userAddress);\n }\n\n public async getPLYWNEARPoolDetails(): Promise<types.PLYWNEARPoolDetails> {\n return this._stakingRead.getPLYWNEARPoolDetails();\n }\n\n public async getTokenPrice(token: Token): Promise<types.CurrencyAmount> {\n return this._misc.getTokenPrice(token);\n }\n\n /**\n * Get amount of staked LP tokens\n */\n public async stakeBalanceOf(user: string): Promise<TokenAmount> {\n return this._stakingRead.stakeBalanceOf(user);\n }\n\n /**\n * Get amount of LP token in user wallet\n */\n public async LpBalanceOf(user: string): Promise<TokenAmount> {\n return this._stakingRead.LpBalanceOf(user);\n }\n\n public async unclaimedRewardsOf(user: string): Promise<TokenAmount[]> {\n return this._stakingRead.unclaimedRewardsOf(user);\n }\n\n public calcHypotheticalStats({\n userMarketDetail,\n currentBorrowLimit,\n currentBorrowValuation,\n action,\n tokenAmount,\n }: {\n userMarketDetail: types.UserMarketDetails;\n currentBorrowLimit: types.CurrencyAmount;\n currentBorrowValuation: types.CurrencyAmount;\n action: types.MarketAction;\n tokenAmount?: TokenAmount;\n }): types.HypotheticalStats {\n return this._misc.calcHypotheticalStats({\n userMarketDetail,\n currentBorrowLimit,\n currentBorrowValuation,\n action,\n tokenAmount,\n });\n }\n\n /**\n * Get ply circulating supply.\n * It is calculated by the total supply, minus:\n * - Ply in team multisig contract\n * - Ply in comptroller contract\n * - Ply in fairlaunch contract\n * - Ply in vesting contract\n */\n public async getPlyCirculatingSupply(): Promise<TokenAmount> {\n return this._misc.getPlyCirculatingSupply();\n }\n\n public async getUtilisation(userAddr: types.Address): Promise<BigNumber> {\n return this._misc.getUtilisation(userAddr);\n }\n\n public async sneakAccounts(\n accounts: string[],\n tokenAddresses: string[],\n dust: BigNumber = new BigNumber(0.1)\n ): Promise<types.AccountAuTokensInfo[]> {\n return this._misc.sneakAccounts(accounts, tokenAddresses, dust);\n }\n\n public async getLTVAndLiquidationThreshold(userAddr: types.Address) {\n return this._misc.getLTVAndLiquidationThreshold(userAddr);\n }\n\n public async getNetApyWithoutIncentive(userAddress: types.Address): Promise<BigNumber> {\n return this._misc.getNetApyWithoutIncentive(userAddress);\n }\n\n public async getNetApyWithIncentive(userAddress: types.Address): Promise<BigNumber> {\n return this._misc.getNetApyWithIncentive(userAddress);\n }\n\n public async setUserNotificationSettings(\n address: types.Address,\n mail: string,\n utilisation: number,\n liquidation: boolean,\n captchaResponse: string\n ) {\n const body = {\n address,\n mail,\n setting: {\n utilisation,\n liquidation,\n },\n captchaResponse,\n };\n const response = await NotificationApi.postApi('alert-setting/set', body);\n return response;\n }\n\n public async unsetUserNotificationSettings(address: types.Address, captchaResponse: string) {\n const body = {\n address,\n mail: '',\n setting: {\n utilisation: null,\n liquidation: false,\n },\n captchaResponse,\n };\n const response = await NotificationApi.postApi('alert-setting/set', body);\n return response;\n }\n\n public async getUserNotificationSettings(\n addresses: types.Address[]\n ): Promise<types.UserNotification> {\n const body = {\n addresses,\n };\n const response = await NotificationApi.postApi('alert-setting/get-user-setting', body);\n return response;\n }\n\n public async getLiquidationHistory(address: string): Promise<types.LiquidationDetail[]> {\n const liquidationHistoryResp = await AuriAPI.getPaginatedApi<types.LiquidationEventEntity>(\n '/liquidate/history',\n {\n user: address,\n }\n );\n const blocks = liquidationHistoryResp.items.map((event) => event.blockNumber);\n const blocksTimestamp = await getBlocksTimestamp(this._networkConnection.provider, blocks);\n\n const liquidationEvents = liquidationHistoryResp.items.map((event, idx) => {\n const underlyingAddress = networkAddresses.auTokens.find(\n (auToken) => auToken.address.toLowerCase() === event.marketRepayToken.toLowerCase()\n )!.underlying;\n const decimal = getDecimal(underlyingAddress);\n const token = new Token(underlyingAddress, decimal);\n const tokenAmount = new TokenAmount(token, event.repayAmount.toString(), true);\n return {\n liquidationTime: blocksTimestamp[idx],\n tokenAmount,\n transactionId: event.txnHash,\n };\n }) as types.LiquidationDetail[];\n return liquidationEvents;\n }\n\n public calculateBorrowPower(tokenAmount: TokenAmount): Promise<types.CurrencyAmount> {\n return this._misc.calcBorrowPower(tokenAmount);\n }\n}\n\nexport class SdkReadWrite extends SdkRead {\n /**\n * Claim rewards in all markets + staking pools\n */\n public async claim(): Promise<TransactionResponse> {\n return this.env.auriLens\n .connect(this._networkConnection.signer!)\n .claimRewards(\n this.env.comptroller.address,\n this.env.auriFairLaunch.address,\n ALL_STAKING_POOLS\n );\n }\n\n public async stake(amount: TokenAmount): Promise<TransactionResponse> {\n return new StakingReadWrite(this._networkConnection).stake(amount);\n }\n\n public async unstake(amount: TokenAmount): Promise<TransactionResponse> {\n return new StakingReadWrite(this._networkConnection).unstake(amount);\n }\n\n // public async faucetDrip(): Promise<TransactionResponse> {\n // return this.env.faucet.connect(this._networkConnection.signer!).drip();\n // }\n}\n\nexport class SDK extends BlockchainEntity {\n constructor() {\n super();\n }\n public read(networkConnection: types.NetworkConnection): SdkRead {\n return new SdkRead(networkConnection);\n }\n\n public readWrite(networkConnection: types.NetworkConnection): SdkReadWrite {\n return new SdkReadWrite(networkConnection);\n }\n}\n","import BigNumber from 'bignumber.js';\nimport { ethers } from 'ethers';\nimport { Logger } from 'ethers/lib/utils';\n\nethers.utils.Logger.setLogLevel(Logger.levels.ERROR);\nBigNumber.config({ DECIMAL_PLACES: 50 });\n\nexport * as abis from './abis';\nexport * from './consts';\nexport * from './entities';\nexport * from './helpers';\nexport * from './interactors';\nexport * from './SDK';\nexport * from './types';\n"],"names":["dummyAddress","ETHAddress","AURORA_CHAINID","DECIMAL_PRECISION","AURORA_PLUS_API_PREFIX","networkAddresses","auTokens","name","address","MAINNET_ADDRESSES","USDC","toLowerCase","underlying","ETH","WBTC","USDT","DAI","WNEAR","STNEAR","AURORA","TRI","PLY","USN","NEARX","USDC_NATIVE","USDT_NATIVE","misc","COMPTROLLER","comptroller","DEPRECATED_OLD_ORACLE","oracle","PYTH_ORACLE","pythOracle","AURIFAIRLAUNCH","fairLaunch","AURILENS","auriLens","ETHREPAYHELPER","ethRepayHelper","AURI_AIRDROP","auriAirdropMultipleRedeem","MULTICALL","multicall","TEAM_MULTISIG","TEAM_MULTISIG_AURORA_PLUS","AURORA_PLUS","PULP_CONTRACT","PLY_TOKEN_LOCK","plyTokenLock","REFERRAL","referralDirectory","REFERRAL_V2","AURI_INTERNAL_LENS","auriInternalLens","PLYGAME","plyGame","tokens","stNEAR","META","PULP","PLYWNEAR","ply_wnear_lp","PLY_WNEAR","WNEAR_TRI","AURORA_WNEAR","STADER","DEPOSIT_ONLY_TOKENS","PRICE_WHITELISTED","Set","map","t","REWARD_CLAIM_START","BORROW_LIMIT_BUFFER","BigNumber","ONE_DAY","ONE_WEEK","ONE_YEAR","PLYWNEAR_POOL_ID","PLYWNEAR_REWARD_TOKENS","ALL_STAKING_POOLS","INF","BN","from","pow","sub","AIRDROP_START_TIMESTAMP","AIRDROP_END_TIMESTAMP","AIRDROP_KEEP_THRESHOLD","DEPOSIT_NEAR_REWARDS_PER_WEEK","Object","fromEntries","entries","k","v","BORROW_NEAR_REWARDS_PER_WEEK","HARDCODE_PRICE_TOKENS","REFERRAL_CAMPAIGNS","start","end","CACHE_TIMEOUT","SD_INCENTIVE_IN_SD","STADER_ETH","USDT_ETH","AURIGAMI_SUBGRAPH_URL","GRAPHQL_URL","decimalRecords","symbolRecords","e","concat","slice","AURORA_API_BASE_URL","getQuery","module","action","params","axios","get","URLSearchParams","headers","resp","data","result","queryGraphQL","query","graphqlUrl","post","assert","condition","message","Error","formatObject","object","JSON","stringify","decimalFactor","decimal","toString","isSameAddress","address1","address2","getCurrentTimestamp","Math","trunc","Date","now","sleep","duration","Promise","resolve","setTimeout","validateAndParseAddress","utils","getAddress","error","getDecimal","addressLowercase","undefined","getSymbol","getUnderlying","matching","filter","length","calcLMRewardApr","rewardsValue","totalStakeValue","frequencyPerYear","isZero","lte","multipliedBy","dividedBy","calcNetApy","suppliedValue","supplyApy","borrowedValue","borrowApy","minus","getBlockTimestamp","provider","blockNumber","getBlock","block","timestamp","getBlocksTimestampViaRPC","blocksNumber","CHUNK_SIZE","results","i","promises","all","getBlocksTimestamp","blockNumbers","lines","x","join","push","reduce","acc","cur","missingBlocks","devLog","missingBlocksTimestamps","forEach","index","toISOString","getTime","getBlockBeforeTimestamp","getAuroraAPIQuery","closest","parseInt","getBlockNumber","process","env","NODE_ENV","optionalParams","console","log","sortEvents","events","sort","a","b","logIndex","BlockchainEntityRead","networkConnection","_networkConnection","BlockchainEntityReadWrite","signer","Signer","BlockchainEntity","read","readWrite","AuriEnv","getContract","abi","Contract","getAuTokenContracts","auToken","contract","abis","getAuErc20Contract","underlyingName","find","_comptroller","_auriFairLaunch","_auriLens","_ply","_pulp","_auriInternalLens","_auriAirdrop","_referralDirectoryV2","_oracle","_plygame","_plyTokenLock","Token","decimals","PLYToken","PLYWNEARToken","TokenAmount","token","amount","isRaw","rawAmnt","times","toFixed","formattedAmount","fmt","div","toFormat","formattedAmountWithSymbol","rawAmount","compare","other","comparedTo","fromAddressAndAmount","tokenAddress","dummyToken","dummyPly","dummyPlyAurora","dummyTokenAmount","dummyZeroTokenAmount","dummyTokenAmount2","dummyTokenAmount3","dummyMarketAddress","dummyUserMarketDetails","market","depositBalance","borrowBalance","isCollateral","maxWithdrawableAmount","collateralRatio","underlyingPrice","referralRewardDummy1","campaign","startTime","endTime","isReferrer","rewardTokenAmount","transactionHash","userAddr","refereeAddress","referralRewardDummy2","AURIGAMI_API_END_POINT","getApi","url","getPaginatedApi","page","pageSize","limit","KYBER_AGGREGATOR_AURORA_API_END_POINT","KYBER_AGGREGATOR_ETH_API_END_POINT","getSwapInfo","tokenIn","tokenOut","amountIn","onAurora","to","useMeta","saveGas","gasInclude","endpoint","ONEINCH_AGGREGATOR_API_END_POINT","getQuoteOneInch","fromTokenAddress","toTokenAddress","prepareParamsAggregator","tokenInErc20","EIP20InterfaceABI","tokenInDecimal","tokenInQuantity","usdtAddress","autoken","usdtDecimal","fetchPriceFromOneInch","info","outputAmount","toTokenAmount","fetchPriceFromKyberSwap","ETH_PROVIDER","ethers","providers","JsonRpcProvider","fetchPriceFromDefiLlamaAPI","id","then","res","coins","price","err","fetchPriceFromCoingeckoAPI","usd","fetchPriceFromDefiLlamaAndCoingecko","fetchPriceFromCoingecko","fetchLPPositions","LPAddress","LPContract","IUniswapV2PairABI","token0","token1","getReserves","totalSupply","reserves","reserve0","reserve1","fetchLPPrice","fetchLPPriceBy","tokenReverse","reserve","_fetchPrice","tokenPrice","tokenDecimal","reserveUSD","LPDecimal","LPInfo","lpPrice","fetchStNEARPrice","ratioPromise","nearPricePromise","ratioRes","nearPrice","ratio","st_near_price","processPriceFromOracle","rawPrice","underlyingDecimal","fetchPriceFromOracle","auTokenAddress","oracleContract","AuriOracleABI","getUnderlyingPrice","matchingAuToken","fetchUnderlyingTokensPrices","AuriLensABI","auTokenAddresses","underlyingDecimals","auTokenUnderlyingPriceAll","rawPrices","ind","shouldFetchFromKyberSwap","has","toLocaleLowerCase","fetchPrice","fetchPLYPrice","fetchPULPPrice","fetchToken0PriceByLP","LP","token0Decimal","token1Decimal","fetchValuation","tokenAmount","calcValuation","valuateToken","tokenValuation","currencyAmount","currency","TransferEventQuery","tokenAddr","AuTokenABI","queryERC20TransfersOf","fromBlock","toBlock","filters","Transfer","queryFilter","flat","event","args","queryERC20BalanceAt","endBlock","balanceOf","blockTag","fetchHistoricalLPPositions","values","fetchHistoricalLPPrice","fetchHistoricalPrice","fetchHistoricalPriceFromOracle","oracleAddress","fetchHistoricalPriceByLP","fetchHistoricalPULPPrice","tokenNumber","AirdropRead","getRedeemableReward","user","tokenInstance","helpers","auriAirdrop","formatBytes32String","rewards","AirdropReadWrite","redeemMultiple","campaigns","connect","redeem","redeemSingle","Airdrop","MoneyMarketRead","underlyingAsset","consts","getPlyPrice","getRewardSpeeds","speeds","getTotalTokenBorrowed","totalBorrows","getTotalTokenDeposited","getCash","totalBorrow","totalCash","add","getDepositAPY","supplyRatePerTimestamp","supplyRatePerDay","plus","getBorrowAPY","borrowRatePerTimestamp","borrowRatePerDay","getCollateralRatio","markets","collateralFactorMantissa","getBorrowPlyAPY","totalBorrowed","rewardSpeeds","plyPrice","plyRewardBorrowSpeed","getDepositPlyAPY","totalDeposited","plyRewardSupplySpeed","getDepositNearAPY","getDepositNEARRewardPerWeek","depositNEARApy","getBorrowNearAPY","getBorrowNEARRewardPerWeek","borrowNEARApy","getDepositMetaAPY","getDepositStaderAPY","getDetails","depositAPY","borrowAPY","depositPlyAPY","borrowPlyAPY","depositNearAPY","borrowNearAPY","depositMetaAPY","staderDepositApy","totalTokenDeposited","totalTokenBorrowed","depositApy","toNumber","depositPlyApy","borrowPlyApy","depositPlyPerWeek","mul","borrowPlyPerWeek","depositMETAApy","getUserBorrowBalance","userAddress","callStatic","borrowBalanceCurrent","getUserDepositBalance","balanceOfUnderlying","totalDeposit","NEARToken","rewardStartTime","rewardStopTime","currentTime","reward","mintCap","mintCaps","borrowCap","borrowCaps","getDepositBorrowValue","getApyWithoutIncentive","sum","getApyWithIncentive","nearDepositApy","plyDepositApy","metaDepositApy","nearBorrowApy","plyBorrowApy","totalDepositApy","totalBorrowApy","__decorate","cache","ttl","type","CacheType","MEMO","MoneyMarketReadWrite","_EthRepayHelper","deposit","mint","value","borrow","withdraw","lt","redeemUnderlying","repay","repayBorrow","enableCollateral","enterMarkets","disableCollateral","exitMarket","MoneyMarket","LOCKING_DENOMINATOR","PapermillRead","plyAddress","pulpAddress","plyToken","pulpToken","getPlyBalance","ply","plyBalance","getPulpBalance","pulp","pulpBalance","getUnclaimedPlyReward","claimRewards","auriFairLaunch","rewardBalancesMetadata","plyAccrured","getWeek","getLockingDetails","currentWeek","getPercentLock","percentLockCurrentWeek","percentLockNextWeek","totalRewards","calcLockAmount","pulpAmountCurrentWeek","plyAmountCurrentWeek","plyAmountNextWeek","pulpAmountNextWeek","currentUnlockPortion","nextUnlockPortion","vestingStart","accruedPly","currentPly","currentPulp","nextPly","nextPulp","getTimestampToUnlock","targetUnlockPortion","getWeekToUnlock","weekId","getNextWeekTimestamp","nextWeek","getUnlockPortionAt","lockPortion","unlockPortion","PapermillReadWrite","recipient","selfRedeem","msgSender","Papermill","PlyGameRead","parseBetMakeEvent","outcome","betAmount","lostAmount","unlock","player","unlockedPulpAmount","attachTimestamp","blockstimestamp","getUserPlyGameHistory","plygame","getLastBlock","block100","eq","BetMade","reverse","currentJackpotAmount","jackpot","earlyUnlockedPulpAmount","totalPlyUnlockedEarly","getPlyGameResultsInTransaction","txHash","getTransactionReceipt","tx","betMadeEvents","logs","topics","parseLog","leaderboard","AuriAPI","items","item","unlockedAmount","gamesPlayed","count","getLastJackpotResult","getStorageAt","round","jackpotHistory","winner","overallLeaderboard","PlyGameReadWrite","makeBetOnce","approve","PlyGame","PulpRead","remainingEarlyUnlockPulp","earlyRedeems","PulpReadWrite","convertEarlyPulp","amountToRedeem","Pulp","ReferralRead","generateReferralCode","letters","numbers","charset","toUpperCase","R","floor","random","getUserReferralCode","referralDirectoryV2","userReferralCode","parseBytes32String","getReferralCodeUsed","referralCodeUsed","getReferralCodeOwner","code","referralCode","referralCodeOwner","getReferralsList","blocks","blocksTimestamp","referralRewards","includes","slotsInUse","totalReferralSlots","queuePosition","userReferralStatus","isWhitelistedAddress","isUserWhitelisted","isOnAuroraPlus","status","isNewUserAtReferralTime","depositedMoreThanMinimumAmount","ReferralReadWrite","registerNewReferralCode","registerNewUserReferralCode","useReferralCode","registerReferralCodeUsed","claimReferralRewards","unclaimedRewards","Referral","StakingRead","getPLYWNEARPoolDetails","getPoolInfo","endedTime","stakedLiquidity","totalStake","rewardPerSeconds","_","stakedLiquidityAmount","totalStakeValuation","rewardTokenAddress","rewardToken","rewardPerSecond","APYs","rewardPerSecondValuation","apy","totalStakedLiquidity","stakeBalanceOf","getUserInfo","userInfo","LpBalanceOf","lpContract","balance","unclaimedRewardsOf","updateAndGetUserInfo","StakingReadWrite","stake","unstake","amountInput","stakedAmount","unstakeAmount","Staking","ComptrollerRewardType","MarketAction","MulticallRead","aggregate","calls","txns","call","populateTransaction","method","txn","target","callData","response","decodedReturn","defaultAbiCoder","decode","returnTypes","returnData","MiscRead","stakingRead","getUserDetails","marketCount","userMarketDetails","totalBorrowLimit","userMarketDetail","moneyMarket","getAssetsIn","assetsIn","depositValues","auAddress","p","getAccountLiquidity","accountLiquidity","borrowedvaluation","bufferedBorrowLimit","minimumBorrowLimitAllowed","borrowableAmount","borrowLimitMargin","gt","maxWithdrawCap","borrowLimit","getTokenPrice","calcBorrowPower","borrowPower","calcHypotheticalStats","currentBorrowLimit","currentBorrowValuation","newBorrowLimit","newBorrowValuation","types","EnableCollateral","DisableCollateral","deltaBorrowLimit","Deposit","Withdraw","Borrow","Repay","deltaBorrowValuation","newBorrowUtilization","getPlyCirculatingSupply","multicallRead","baseBalanceOfCall","listAddrs","addr","callResults","circulatingSupply","repeat","getUtilisation","getAccountLiquidityAccrueInterest","accountDetail","sumBorrow","sumBorrowPlusEffects","sumCol","sumCollateral","sneakAccounts","accounts","tokenAddresses","dust","_1E18","getUnderlyingPrices","prices","getExchangeRates","exrate","infos","getAccountSnapshot","snapshot","bal","bor","balR","borR","getLTVAndLiquidationThreshold","totalSuppliedValue","totalBorrowedValue","collateralValue","marketValues","depositBorrowValue","ltv","liquidationThreshold","getNetApyWithoutIncentive","netApy","apyWithoutIncentive","apys","getNetApyWithIncentive","apyWithIncentive","PlyTokenLockRead","getClaimableAmount","claimableBalance","claimableAmount","PlyTokenLockReadWrite","claim","amountToClaim","PlyTokenLock","NOTIFICATION_API_END_POINT","postApi","body","SdkRead","_stakingRead","_misc","setUserNotificationSettings","mail","utilisation","liquidation","captchaResponse","setting","NotificationApi","unsetUserNotificationSettings","getUserNotificationSettings","addresses","getLiquidationHistory","liquidationHistoryResp","liquidationEvents","idx","underlyingAddress","marketRepayToken","repayAmount","liquidationTime","transactionId","txnHash","calculateBorrowPower","SdkReadWrite","SDK","Logger","setLogLevel","levels","ERROR","config","DECIMAL_PLACES"],"mappings":"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"}