@augustdigital/sdk 5.1.1 → 7.0.0
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.
- package/lib/adapters/evm/getters.d.ts +1 -1
- package/lib/adapters/evm/getters.js +14 -19
- package/lib/adapters/evm/index.d.ts +8 -1
- package/lib/adapters/evm/index.js +24 -0
- package/lib/adapters/solana/index.d.ts +4 -4
- package/lib/adapters/solana/utils.d.ts +5 -4
- package/lib/adapters/solana/utils.js +82 -45
- package/lib/adapters/solana/vault.actions.d.ts +2 -2
- package/lib/adapters/solana/vault.actions.js +112 -74
- package/lib/adapters/stellar/actions.js +3 -2
- package/lib/adapters/stellar/constants.d.ts +2 -0
- package/lib/adapters/stellar/constants.js +3 -1
- package/lib/adapters/stellar/getters.js +2 -2
- package/lib/adapters/stellar/soroban.js +19 -8
- package/lib/adapters/stellar/submit.js +16 -6
- package/lib/adapters/stellar/utils.d.ts +2 -1
- package/lib/adapters/stellar/utils.js +7 -15
- package/lib/adapters/sui/utils.d.ts +1 -1
- package/lib/adapters/sui/utils.js +3 -7
- package/lib/core/analytics/chain-name.d.ts +1 -0
- package/lib/core/analytics/chain-name.js +26 -0
- package/lib/core/analytics/env.d.ts +4 -0
- package/lib/core/analytics/env.js +33 -0
- package/lib/core/analytics/index.d.ts +6 -2
- package/lib/core/analytics/index.js +16 -1
- package/lib/core/analytics/instrumentation.js +56 -48
- package/lib/core/analytics/method-taxonomy.d.ts +3 -0
- package/lib/core/analytics/method-taxonomy.js +82 -0
- package/lib/core/analytics/metrics.js +18 -42
- package/lib/core/analytics/sanitize.d.ts +1 -0
- package/lib/core/analytics/sanitize.js +34 -0
- package/lib/core/analytics/sentry-runtime.d.ts +4 -0
- package/lib/core/analytics/sentry-runtime.js +78 -0
- package/lib/core/analytics/sentry.d.ts +7 -1
- package/lib/core/analytics/sentry.js +107 -51
- package/lib/core/analytics/types.d.ts +2 -0
- package/lib/core/analytics/version.d.ts +1 -0
- package/lib/core/analytics/version.js +5 -0
- package/lib/core/base.class.d.ts +2 -1
- package/lib/core/base.class.js +5 -1
- package/lib/core/cache.d.ts +4 -0
- package/lib/core/cache.js +25 -0
- package/lib/core/constants/web3.js +1 -1
- package/lib/core/fetcher.d.ts +4 -4
- package/lib/core/fetcher.js +49 -60
- package/lib/core/helpers/chain-address.d.ts +3 -0
- package/lib/core/helpers/chain-address.js +36 -0
- package/lib/core/helpers/explorer-link.d.ts +2 -0
- package/lib/core/helpers/explorer-link.js +11 -0
- package/lib/core/helpers/vault-version.d.ts +4 -0
- package/lib/core/helpers/vault-version.js +59 -0
- package/lib/core/helpers/vaults.d.ts +3 -4
- package/lib/core/helpers/vaults.js +12 -62
- package/lib/core/helpers/web3.d.ts +6 -6
- package/lib/core/helpers/web3.js +142 -79
- package/lib/core/logger/slack.js +2 -2
- package/lib/core/vault-metadata.d.ts +6 -0
- package/lib/core/vault-metadata.js +36 -0
- package/lib/evm/methods/crossChainVault.js +72 -16
- package/lib/evm/types/crossChain.d.ts +4 -0
- package/lib/evm/types/crossChain.js +6 -0
- package/lib/modules/vaults/fetcher.d.ts +1 -6
- package/lib/modules/vaults/fetcher.js +27 -36
- package/lib/modules/vaults/getters.d.ts +1 -1
- package/lib/modules/vaults/getters.js +3 -2
- package/lib/modules/vaults/read.actions.d.ts +27 -0
- package/lib/modules/vaults/read.actions.js +220 -0
- package/lib/modules/vaults/utils/date-utils.js +1 -2
- package/lib/modules/vaults/utils.js +57 -36
- package/lib/modules/vaults/write.actions.d.ts +35 -2
- package/lib/modules/vaults/write.actions.js +254 -94
- package/package.json +5 -2
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAddressChainType = getAddressChainType;
|
|
4
|
+
exports.getVaultVersion = getVaultVersion;
|
|
5
|
+
exports.getVaultVersionV2 = getVaultVersionV2;
|
|
6
|
+
const ethers_1 = require("ethers");
|
|
7
|
+
const vaults_1 = require("../constants/vaults");
|
|
8
|
+
const chain_address_1 = require("./chain-address");
|
|
9
|
+
function getAddressChainType(address) {
|
|
10
|
+
if ((0, chain_address_1.isStellarAddress)(address))
|
|
11
|
+
return 'stellar';
|
|
12
|
+
if ((0, chain_address_1.isSolanaAddress)(address))
|
|
13
|
+
return 'solana';
|
|
14
|
+
if ((0, chain_address_1.isSuiAddress)(address))
|
|
15
|
+
return 'sui';
|
|
16
|
+
return 'evm';
|
|
17
|
+
}
|
|
18
|
+
function getVaultVersion(vault) {
|
|
19
|
+
if (!vault)
|
|
20
|
+
return;
|
|
21
|
+
const chainType = getAddressChainType(vault);
|
|
22
|
+
if (chainType === 'stellar')
|
|
23
|
+
return 'stellar-0';
|
|
24
|
+
if (chainType === 'solana')
|
|
25
|
+
return 'sol-0';
|
|
26
|
+
if (!(0, ethers_1.isAddress)(vault))
|
|
27
|
+
return;
|
|
28
|
+
if (vaults_1.OLD_LENDING_POOLS.includes((0, ethers_1.getAddress)(vault))) {
|
|
29
|
+
return 'evm-0';
|
|
30
|
+
}
|
|
31
|
+
else if (vaults_1.MULTI_ASSET_VAULTS.includes((0, ethers_1.getAddress)(vault))) {
|
|
32
|
+
return 'evm-2';
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
return 'evm-1';
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function getVaultVersionV2(vault) {
|
|
39
|
+
if (!vault)
|
|
40
|
+
return;
|
|
41
|
+
const chainType = getAddressChainType(vault.address);
|
|
42
|
+
if (vault.chain_type === 'stellar' || chainType === 'stellar')
|
|
43
|
+
return 'stellar-0';
|
|
44
|
+
if (vault.chain_type === 'solana' || chainType === 'solana')
|
|
45
|
+
return 'sol-0';
|
|
46
|
+
if (!(0, ethers_1.isAddress)(vault.address))
|
|
47
|
+
return;
|
|
48
|
+
if (vaults_1.OLD_LENDING_POOLS.includes((0, ethers_1.getAddress)(vault.address))) {
|
|
49
|
+
return 'evm-0';
|
|
50
|
+
}
|
|
51
|
+
else if (vault.internal_type === 'multiAssetVault' ||
|
|
52
|
+
vaults_1.MULTI_ASSET_VAULTS.includes(vault.address)) {
|
|
53
|
+
return 'evm-2';
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
return 'evm-1';
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=vault-version.js.map
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IAddress, IContractRunner } from '../../types';
|
|
2
2
|
export declare const isBadTransaction: (hash: string, chainId: number) => boolean;
|
|
3
3
|
export declare const isBadVault: (address?: string) => boolean;
|
|
4
|
-
|
|
5
|
-
export
|
|
6
|
-
export declare function getAddressChainType(address: string): ChainType;
|
|
4
|
+
import { getAddressChainType, getVaultVersion, getVaultVersionV2 } from './vault-version';
|
|
5
|
+
export { getAddressChainType, getVaultVersion, getVaultVersionV2 };
|
|
7
6
|
export declare const REWARD_DISTRIBUTOR_ADDRESS: (chainId: number) => string[];
|
|
8
7
|
export declare const AVAX_PRICE_FEED_ADDRESS: (chainId: number) => "0xFF3EEb22B5E3dE6e705b44749C2559d704923FD7" | "0x";
|
|
9
8
|
export declare function getVaultSymbol(vault: IAddress, provider: IContractRunner): Promise<string | undefined>;
|
|
@@ -1,18 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getDefaultSubgraphUrl = exports.SUBGRAPH_POOL_URLS = exports.AVAX_PRICE_FEED_ADDRESS = exports.REWARD_DISTRIBUTOR_ADDRESS = exports.isBadVault = exports.isBadTransaction = void 0;
|
|
4
|
-
exports.getVaultVersion = getVaultVersion;
|
|
5
|
-
exports.getVaultVersionV2 = getVaultVersionV2;
|
|
6
|
-
exports.getAddressChainType = getAddressChainType;
|
|
3
|
+
exports.getDefaultSubgraphUrl = exports.SUBGRAPH_POOL_URLS = exports.AVAX_PRICE_FEED_ADDRESS = exports.REWARD_DISTRIBUTOR_ADDRESS = exports.getVaultVersionV2 = exports.getVaultVersion = exports.getAddressChainType = exports.isBadVault = exports.isBadTransaction = void 0;
|
|
7
4
|
exports.getVaultSymbol = getVaultSymbol;
|
|
8
5
|
const ethers_1 = require("ethers");
|
|
9
6
|
const vaults_1 = require("../constants/vaults");
|
|
10
7
|
const web3_1 = require("./web3");
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const utils_3 = require("../../adapters/stellar/utils");
|
|
14
|
-
const fetcher_1 = require("../../modules/vaults/fetcher");
|
|
8
|
+
const chain_address_1 = require("./chain-address");
|
|
9
|
+
const vault_metadata_1 = require("../vault-metadata");
|
|
15
10
|
const logger_1 = require("../logger");
|
|
11
|
+
const VAULT_SYMBOLS_LOWERCASE = Object.fromEntries(Object.entries(vaults_1.VAULT_SYMBOLS).map(([k, v]) => [k.toLowerCase(), v]));
|
|
16
12
|
const isBadTransaction = (hash, chainId) => {
|
|
17
13
|
const badTxs = {
|
|
18
14
|
1: [
|
|
@@ -34,7 +30,7 @@ exports.isBadTransaction = isBadTransaction;
|
|
|
34
30
|
const isBadVault = (address) => {
|
|
35
31
|
if (!address)
|
|
36
32
|
return false;
|
|
37
|
-
if (getAddressChainType(address) !== 'evm')
|
|
33
|
+
if ((0, vault_version_1.getAddressChainType)(address) !== 'evm')
|
|
38
34
|
return false;
|
|
39
35
|
switch ((0, ethers_1.getAddress)(address)) {
|
|
40
36
|
case (0, ethers_1.getAddress)('0x706162790b601A8514c18718d0c63C9D1268e89C'):
|
|
@@ -60,56 +56,10 @@ const isBadVault = (address) => {
|
|
|
60
56
|
}
|
|
61
57
|
};
|
|
62
58
|
exports.isBadVault = isBadVault;
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
if (chainType === 'stellar')
|
|
68
|
-
return 'stellar-0';
|
|
69
|
-
if (chainType === 'solana')
|
|
70
|
-
return 'sol-0';
|
|
71
|
-
if (!(0, ethers_1.isAddress)(vault))
|
|
72
|
-
return;
|
|
73
|
-
if (vaults_1.OLD_LENDING_POOLS.includes((0, ethers_1.getAddress)(vault))) {
|
|
74
|
-
return 'evm-0';
|
|
75
|
-
}
|
|
76
|
-
else if (vaults_1.MULTI_ASSET_VAULTS.includes((0, ethers_1.getAddress)(vault))) {
|
|
77
|
-
return 'evm-2';
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
return 'evm-1';
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
function getVaultVersionV2(vault) {
|
|
84
|
-
if (!vault)
|
|
85
|
-
return;
|
|
86
|
-
const chainType = getAddressChainType(vault.address);
|
|
87
|
-
if (vault.chain_type === 'stellar' || chainType === 'stellar')
|
|
88
|
-
return 'stellar-0';
|
|
89
|
-
if (vault.chain_type === 'solana' || chainType === 'solana')
|
|
90
|
-
return 'sol-0';
|
|
91
|
-
if (!(0, ethers_1.isAddress)(vault.address))
|
|
92
|
-
return;
|
|
93
|
-
if (vaults_1.OLD_LENDING_POOLS.includes((0, ethers_1.getAddress)(vault.address))) {
|
|
94
|
-
return 'evm-0';
|
|
95
|
-
}
|
|
96
|
-
else if (vault.internal_type === 'multiAssetVault' ||
|
|
97
|
-
vaults_1.MULTI_ASSET_VAULTS.includes(vault.address)) {
|
|
98
|
-
return 'evm-2';
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
return 'evm-1';
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
function getAddressChainType(address) {
|
|
105
|
-
if ((0, utils_3.isStellarAddress)(address))
|
|
106
|
-
return 'stellar';
|
|
107
|
-
if (utils_1.SolanaUtils.isSolanaAddress(address))
|
|
108
|
-
return 'solana';
|
|
109
|
-
if ((0, utils_2.isSuiAddress)(address))
|
|
110
|
-
return 'sui';
|
|
111
|
-
return 'evm';
|
|
112
|
-
}
|
|
59
|
+
const vault_version_1 = require("./vault-version");
|
|
60
|
+
Object.defineProperty(exports, "getAddressChainType", { enumerable: true, get: function () { return vault_version_1.getAddressChainType; } });
|
|
61
|
+
Object.defineProperty(exports, "getVaultVersion", { enumerable: true, get: function () { return vault_version_1.getVaultVersion; } });
|
|
62
|
+
Object.defineProperty(exports, "getVaultVersionV2", { enumerable: true, get: function () { return vault_version_1.getVaultVersionV2; } });
|
|
113
63
|
const REWARD_DISTRIBUTOR_ADDRESS = (chainId) => {
|
|
114
64
|
switch (chainId) {
|
|
115
65
|
case 43114:
|
|
@@ -132,14 +82,14 @@ const AVAX_PRICE_FEED_ADDRESS = (chainId) => {
|
|
|
132
82
|
};
|
|
133
83
|
exports.AVAX_PRICE_FEED_ADDRESS = AVAX_PRICE_FEED_ADDRESS;
|
|
134
84
|
async function getVaultSymbol(vault, provider) {
|
|
135
|
-
if ((0,
|
|
85
|
+
if ((0, chain_address_1.isStellarAddress)(vault)) {
|
|
136
86
|
logger_1.Logger.log.warn('getVaultSymbol', `Vault symbol lookup is not yet supported for Stellar vaults: ${vault}`);
|
|
137
87
|
return undefined;
|
|
138
88
|
}
|
|
139
89
|
const address = (0, ethers_1.getAddress)(vault);
|
|
140
90
|
let vaultsMetadata = {};
|
|
141
91
|
try {
|
|
142
|
-
vaultsMetadata = await (0,
|
|
92
|
+
vaultsMetadata = await (0, vault_metadata_1.fetchVaultMetadata)();
|
|
143
93
|
}
|
|
144
94
|
catch (e) {
|
|
145
95
|
logger_1.Logger.log.error('getVaultSymbol:fetchMetadata', e, { vault });
|
|
@@ -151,7 +101,7 @@ async function getVaultSymbol(vault, provider) {
|
|
|
151
101
|
}
|
|
152
102
|
}
|
|
153
103
|
const hardcodedSymbol = vaults_1.VAULT_SYMBOLS[address] ??
|
|
154
|
-
|
|
104
|
+
VAULT_SYMBOLS_LOWERCASE[address.toLowerCase()];
|
|
155
105
|
if (hardcodedSymbol) {
|
|
156
106
|
return hardcodedSymbol;
|
|
157
107
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ethers, Interface, InterfaceAbi, JsonRpcProvider } from 'ethers';
|
|
2
2
|
import type { Abi } from 'abitype';
|
|
3
3
|
import type { TypedContract } from '../../types/typed-contract';
|
|
4
|
-
import { IAddress,
|
|
4
|
+
import { IAddress, IContractRunner, IInfuraOptions } from '../../types';
|
|
5
5
|
export declare const determineBlockCutoff: (chain: number) => 120000 | 3456000 | 150000;
|
|
6
6
|
export declare const determineSecondsPerBlock: (chain: number) => number;
|
|
7
7
|
export declare const determineBlockSkipInternal: (chain: number) => 1000 | 8000 | 50000;
|
|
@@ -13,10 +13,11 @@ export declare function createContract<const TAbi extends Abi>({ provider, addre
|
|
|
13
13
|
}): TypedContract<TAbi> | undefined;
|
|
14
14
|
export declare const createProvider: (rpcUrl: string, chainId?: number) => JsonRpcProvider;
|
|
15
15
|
export declare const getInfuraProvider: (infura: IInfuraOptions) => JsonRpcProvider;
|
|
16
|
-
export
|
|
17
|
-
export declare const getDecimals: (provider: IContractRunner, address: IAddress, isVault?: boolean) => Promise<
|
|
18
|
-
export declare const
|
|
19
|
-
export declare const
|
|
16
|
+
export { explorerLink } from './explorer-link';
|
|
17
|
+
export declare const getDecimals: (provider: IContractRunner, address: IAddress, isVault?: boolean) => Promise<number>;
|
|
18
|
+
export declare const getWhitelistedAssets: (provider: IContractRunner, whitelistAddress: IAddress) => Promise<IAddress[]>;
|
|
19
|
+
export declare const getReceiptTokenAddress: (provider: IContractRunner, address: IAddress) => Promise<`0x${string}`>;
|
|
20
|
+
export declare const getSymbol: (provider: IContractRunner, address: IAddress | undefined, isVault?: boolean) => Promise<string>;
|
|
20
21
|
export declare function getTokenMetadata(provider: IContractRunner, asset: IAddress, meta: ('symbol' | 'decimals' | 'name' | 'totalSupply')[]): Promise<any[]>;
|
|
21
22
|
export declare const getManagementFeePercent: (provider: IContractRunner, address: IAddress) => Promise<number>;
|
|
22
23
|
export declare function simulateTransaction(provider: IContractRunner, abi: string[] | any, functionName: string, options?: {
|
|
@@ -29,4 +30,3 @@ type ILoanOracleFeeCategories = 'LOAN.REPAY.INTERESTS';
|
|
|
29
30
|
export declare function getLoanOracleFeeRate(provider: IContractRunner, category_id: ILoanOracleFeeCategories, address: IAddress, chainId?: number): Promise<number>;
|
|
30
31
|
export declare function getHistoricalContractData(provider: IContractRunner, contractAddress: IAddress, abi: Interface | InterfaceAbi, methodName: string, args: (string | number | bigint | boolean)[], startBlock: number, endBlock: number, blockInterval?: number): Promise<any[]>;
|
|
31
32
|
export declare function getHistoricalContractDataByDate(provider: IContractRunner, contractAddress: IAddress, abi: Interface | InterfaceAbi, methodName: string, args: (string | number | bigint | boolean)[], startDate: string | number, endDate: string | number, intervalHours?: number): Promise<any[]>;
|
|
32
|
-
export {};
|
package/lib/core/helpers/web3.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getManagementFeePercent = exports.getSymbol = exports.getReceiptTokenAddress = exports.getDecimals = exports.explorerLink = exports.getInfuraProvider = exports.createProvider = exports.getChainId = exports.determineBlockSkipInternal = exports.determineSecondsPerBlock = exports.determineBlockCutoff = void 0;
|
|
3
|
+
exports.getManagementFeePercent = exports.getSymbol = exports.getReceiptTokenAddress = exports.getWhitelistedAssets = exports.getDecimals = exports.explorerLink = exports.getInfuraProvider = exports.createProvider = exports.getChainId = exports.determineBlockSkipInternal = exports.determineSecondsPerBlock = exports.determineBlockCutoff = void 0;
|
|
4
4
|
exports.createContract = createContract;
|
|
5
5
|
exports.getTokenMetadata = getTokenMetadata;
|
|
6
6
|
exports.simulateTransaction = simulateTransaction;
|
|
@@ -9,12 +9,17 @@ exports.getLoanOracleFeeRate = getLoanOracleFeeRate;
|
|
|
9
9
|
exports.getHistoricalContractData = getHistoricalContractData;
|
|
10
10
|
exports.getHistoricalContractDataByDate = getHistoricalContractDataByDate;
|
|
11
11
|
const ethers_1 = require("ethers");
|
|
12
|
-
const
|
|
13
|
-
const
|
|
12
|
+
const errors_1 = require("../errors");
|
|
13
|
+
const cache_1 = require("../cache");
|
|
14
|
+
const logger_1 = require("../logger");
|
|
15
|
+
const web3_1 = require("../constants/web3");
|
|
16
|
+
const fetcher_1 = require("../fetcher");
|
|
17
|
+
const chain_address_1 = require("./chain-address");
|
|
14
18
|
const constants_1 = require("../../adapters/solana/constants");
|
|
15
19
|
const abis_1 = require("../../abis");
|
|
16
20
|
const TokenizedVaultV2_1 = require("../../abis/TokenizedVaultV2");
|
|
17
|
-
const
|
|
21
|
+
const TokenizedVaultV2WhitelistedAssets_1 = require("../../abis/TokenizedVaultV2WhitelistedAssets");
|
|
22
|
+
const vault_version_1 = require("./vault-version");
|
|
18
23
|
const determineBlockCutoff = (chain) => {
|
|
19
24
|
switch (chain) {
|
|
20
25
|
case 56:
|
|
@@ -89,8 +94,8 @@ const createProvider = (rpcUrl, chainId) => {
|
|
|
89
94
|
`or set the AUGUST_RPC_${chainId ?? '<chainId>'} environment variable.`);
|
|
90
95
|
}
|
|
91
96
|
const cacheKey = chainId ? `${rpcUrl}|${chainId}` : rpcUrl;
|
|
92
|
-
if (
|
|
93
|
-
return
|
|
97
|
+
if (cache_1.CACHE.has(cacheKey))
|
|
98
|
+
return cache_1.CACHE.get(cacheKey);
|
|
94
99
|
const provider = chainId
|
|
95
100
|
? new ethers_1.JsonRpcProvider(rpcUrl, ethers_1.Network.from(chainId), {
|
|
96
101
|
staticNetwork: ethers_1.Network.from(chainId),
|
|
@@ -99,7 +104,7 @@ const createProvider = (rpcUrl, chainId) => {
|
|
|
99
104
|
: new ethers_1.JsonRpcProvider(rpcUrl, undefined, {
|
|
100
105
|
batchMaxCount: 10,
|
|
101
106
|
});
|
|
102
|
-
|
|
107
|
+
cache_1.CACHE.set(cacheKey, provider);
|
|
103
108
|
return provider;
|
|
104
109
|
};
|
|
105
110
|
exports.createProvider = createProvider;
|
|
@@ -131,12 +136,8 @@ const getInfuraProvider = (infura) => {
|
|
|
131
136
|
return (0, exports.createProvider)(url, infura.chainId);
|
|
132
137
|
};
|
|
133
138
|
exports.getInfuraProvider = getInfuraProvider;
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
return;
|
|
137
|
-
return `${__1.NETWORKS[chain].explorer}/${type}/${hex}`;
|
|
138
|
-
};
|
|
139
|
-
exports.explorerLink = explorerLink;
|
|
139
|
+
var explorer_link_1 = require("./explorer-link");
|
|
140
|
+
Object.defineProperty(exports, "explorerLink", { enumerable: true, get: function () { return explorer_link_1.explorerLink; } });
|
|
140
141
|
function providerScope(provider) {
|
|
141
142
|
let chainId;
|
|
142
143
|
try {
|
|
@@ -155,93 +156,155 @@ function providerScope(provider) {
|
|
|
155
156
|
return `url:${conn.url}`;
|
|
156
157
|
return 'unknown';
|
|
157
158
|
}
|
|
159
|
+
const DECIMALS_REQUESTS = new Map();
|
|
158
160
|
const getDecimals = async (provider, address, isVault = true) => {
|
|
159
161
|
if (address === ethers_1.ZeroAddress) {
|
|
160
|
-
|
|
162
|
+
logger_1.Logger.log.info('getDecimals', 'address is zero address');
|
|
161
163
|
return 0;
|
|
162
164
|
}
|
|
163
|
-
if (
|
|
165
|
+
if ((0, chain_address_1.isSolanaAddress)(address))
|
|
164
166
|
return constants_1.fallbackDecimals;
|
|
165
167
|
if (!(address && provider))
|
|
166
168
|
return;
|
|
167
169
|
const key = `decimals-${providerScope(provider)}-${address}`;
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
if (
|
|
176
|
-
|
|
170
|
+
if (cache_1.CACHE.has(key))
|
|
171
|
+
return cache_1.CACHE.get(key);
|
|
172
|
+
const inflight = DECIMALS_REQUESTS.get(key);
|
|
173
|
+
if (inflight)
|
|
174
|
+
return inflight;
|
|
175
|
+
const fetchPromise = (async () => {
|
|
176
|
+
try {
|
|
177
|
+
if (isVault) {
|
|
178
|
+
const tokenizedVault = (await (0, fetcher_1.fetchTokenizedVault)(address))?.[0];
|
|
179
|
+
const version = (0, vault_version_1.getVaultVersionV2)(tokenizedVault);
|
|
180
|
+
let realAddress = address;
|
|
181
|
+
if (version === 'evm-2') {
|
|
182
|
+
realAddress = await (0, exports.getReceiptTokenAddress)(provider, address);
|
|
183
|
+
}
|
|
184
|
+
const contract = new ethers_1.Contract(realAddress, [web3_1.MIN_ABIS.decimals], provider);
|
|
185
|
+
const decimals = Number(await contract.decimals());
|
|
186
|
+
cache_1.CACHE.set(key, decimals);
|
|
187
|
+
return decimals;
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
const contract = new ethers_1.Contract(address, [web3_1.MIN_ABIS.decimals], provider);
|
|
191
|
+
const decimals = Number(await contract.decimals());
|
|
192
|
+
cache_1.CACHE.set(key, decimals);
|
|
193
|
+
return decimals;
|
|
177
194
|
}
|
|
178
|
-
const contract = new ethers_1.Contract(realAddress, [__1.MIN_ABIS.decimals], provider);
|
|
179
|
-
const decimals = Number(await contract.decimals());
|
|
180
|
-
__1.CACHE.set(key, decimals);
|
|
181
|
-
return decimals;
|
|
182
195
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
__1.CACHE.set(key, decimals);
|
|
187
|
-
return decimals;
|
|
196
|
+
catch (e) {
|
|
197
|
+
logger_1.Logger.log.error('getDecimals', `${address}::${e}`);
|
|
198
|
+
return undefined;
|
|
188
199
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
}
|
|
200
|
+
finally {
|
|
201
|
+
DECIMALS_REQUESTS.delete(key);
|
|
202
|
+
}
|
|
203
|
+
})();
|
|
204
|
+
DECIMALS_REQUESTS.set(key, fetchPromise);
|
|
205
|
+
return fetchPromise;
|
|
193
206
|
};
|
|
194
207
|
exports.getDecimals = getDecimals;
|
|
208
|
+
const WHITELISTED_ASSETS_REQUESTS = new Map();
|
|
209
|
+
const getWhitelistedAssets = async (provider, whitelistAddress) => {
|
|
210
|
+
if (!(whitelistAddress && provider)) {
|
|
211
|
+
throw new errors_1.AugustValidationError('INVALID_INPUT', 'getWhitelistedAssets: provider and whitelistAddress are required');
|
|
212
|
+
}
|
|
213
|
+
const key = `whitelisted-assets-${providerScope(provider)}-${whitelistAddress}`;
|
|
214
|
+
if (cache_1.CACHE.has(key))
|
|
215
|
+
return cache_1.CACHE.get(key);
|
|
216
|
+
const inflight = WHITELISTED_ASSETS_REQUESTS.get(key);
|
|
217
|
+
if (inflight)
|
|
218
|
+
return inflight;
|
|
219
|
+
const fetchPromise = (async () => {
|
|
220
|
+
try {
|
|
221
|
+
const contract = new ethers_1.Contract(whitelistAddress, TokenizedVaultV2WhitelistedAssets_1.ABI_TOKENIZED_VAULT_V2_WHITELISTED_ASSETS, provider);
|
|
222
|
+
const list = (await contract.getWhitelistedAssets());
|
|
223
|
+
cache_1.CACHE.set(key, list, { ttl: 5 * 60 * 1000 });
|
|
224
|
+
return list;
|
|
225
|
+
}
|
|
226
|
+
finally {
|
|
227
|
+
WHITELISTED_ASSETS_REQUESTS.delete(key);
|
|
228
|
+
}
|
|
229
|
+
})();
|
|
230
|
+
WHITELISTED_ASSETS_REQUESTS.set(key, fetchPromise);
|
|
231
|
+
return fetchPromise;
|
|
232
|
+
};
|
|
233
|
+
exports.getWhitelistedAssets = getWhitelistedAssets;
|
|
234
|
+
const RECEIPT_TOKEN_REQUESTS = new Map();
|
|
195
235
|
const getReceiptTokenAddress = async (provider, address) => {
|
|
196
236
|
if (!(address && provider))
|
|
197
237
|
return;
|
|
198
238
|
const key = `receipt-token-${providerScope(provider)}-${address}`;
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
239
|
+
if (cache_1.CACHE.has(key))
|
|
240
|
+
return cache_1.CACHE.get(key);
|
|
241
|
+
const inflight = RECEIPT_TOKEN_REQUESTS.get(key);
|
|
242
|
+
if (inflight)
|
|
243
|
+
return inflight;
|
|
244
|
+
const fetchPromise = (async () => {
|
|
245
|
+
try {
|
|
246
|
+
const vaultContract = new ethers_1.Contract(address, TokenizedVaultV2_1.ABI_TOKENIZED_VAULT_V2, provider);
|
|
247
|
+
const receiptToken = (await vaultContract.lpTokenAddress());
|
|
248
|
+
cache_1.CACHE.set(key, receiptToken);
|
|
249
|
+
return receiptToken;
|
|
250
|
+
}
|
|
251
|
+
catch (e) {
|
|
252
|
+
logger_1.Logger.log.error('getReceiptTokenAddress', e);
|
|
253
|
+
return undefined;
|
|
254
|
+
}
|
|
255
|
+
finally {
|
|
256
|
+
RECEIPT_TOKEN_REQUESTS.delete(key);
|
|
257
|
+
}
|
|
258
|
+
})();
|
|
259
|
+
RECEIPT_TOKEN_REQUESTS.set(key, fetchPromise);
|
|
260
|
+
return fetchPromise;
|
|
210
261
|
};
|
|
211
262
|
exports.getReceiptTokenAddress = getReceiptTokenAddress;
|
|
263
|
+
const SYMBOL_REQUESTS = new Map();
|
|
212
264
|
const getSymbol = async (provider, address, isVault = true) => {
|
|
213
265
|
if (address === ethers_1.ZeroAddress) {
|
|
214
|
-
|
|
266
|
+
logger_1.Logger.log.info('getSymbol', 'address is zero address');
|
|
215
267
|
return 'N/A';
|
|
216
268
|
}
|
|
217
269
|
if (!(address && provider))
|
|
218
270
|
return;
|
|
219
271
|
const key = `symbol-${providerScope(provider)}-${address}`;
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
if (
|
|
228
|
-
|
|
272
|
+
if (cache_1.CACHE.has(key))
|
|
273
|
+
return cache_1.CACHE.get(key);
|
|
274
|
+
const inflight = SYMBOL_REQUESTS.get(key);
|
|
275
|
+
if (inflight)
|
|
276
|
+
return inflight;
|
|
277
|
+
const fetchPromise = (async () => {
|
|
278
|
+
try {
|
|
279
|
+
if (isVault) {
|
|
280
|
+
const tokenizedVault = (await (0, fetcher_1.fetchTokenizedVault)(address))?.[0];
|
|
281
|
+
const version = (0, vault_version_1.getVaultVersionV2)(tokenizedVault);
|
|
282
|
+
let realAddress = address;
|
|
283
|
+
if (version === 'evm-2') {
|
|
284
|
+
realAddress = await (0, exports.getReceiptTokenAddress)(provider, address);
|
|
285
|
+
}
|
|
286
|
+
const contract = new ethers_1.Contract(realAddress, [web3_1.MIN_ABIS.symbol], provider);
|
|
287
|
+
const symbol = (await contract.symbol());
|
|
288
|
+
cache_1.CACHE.set(key, symbol);
|
|
289
|
+
return symbol;
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
const contract = new ethers_1.Contract(address, [web3_1.MIN_ABIS.symbol], provider);
|
|
293
|
+
const symbol = (await contract.symbol());
|
|
294
|
+
cache_1.CACHE.set(key, symbol);
|
|
295
|
+
return symbol;
|
|
229
296
|
}
|
|
230
|
-
const contract = new ethers_1.Contract(realAddress, [__1.MIN_ABIS.symbol], provider);
|
|
231
|
-
const symbol = (await contract.symbol());
|
|
232
|
-
__1.CACHE.set(key, symbol);
|
|
233
|
-
return symbol;
|
|
234
297
|
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
__1.CACHE.set(key, symbol);
|
|
239
|
-
return symbol;
|
|
298
|
+
catch (e) {
|
|
299
|
+
logger_1.Logger.log.error('getSymbol', `${address}::${e}`);
|
|
300
|
+
return undefined;
|
|
240
301
|
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
}
|
|
302
|
+
finally {
|
|
303
|
+
SYMBOL_REQUESTS.delete(key);
|
|
304
|
+
}
|
|
305
|
+
})();
|
|
306
|
+
SYMBOL_REQUESTS.set(key, fetchPromise);
|
|
307
|
+
return fetchPromise;
|
|
245
308
|
};
|
|
246
309
|
exports.getSymbol = getSymbol;
|
|
247
310
|
async function getTokenMetadata(provider, asset, meta) {
|
|
@@ -250,13 +313,13 @@ async function getTokenMetadata(provider, asset, meta) {
|
|
|
250
313
|
function buildAbi() {
|
|
251
314
|
const abiArr = [];
|
|
252
315
|
if (meta?.includes('name'))
|
|
253
|
-
abiArr.push(
|
|
316
|
+
abiArr.push(web3_1.MIN_ABIS.name);
|
|
254
317
|
if (meta?.includes('symbol'))
|
|
255
|
-
abiArr.push(
|
|
318
|
+
abiArr.push(web3_1.MIN_ABIS.symbol);
|
|
256
319
|
if (meta?.includes('decimals'))
|
|
257
|
-
abiArr.push(
|
|
320
|
+
abiArr.push(web3_1.MIN_ABIS.decimals);
|
|
258
321
|
if (meta?.includes('totalSupply'))
|
|
259
|
-
abiArr.push(
|
|
322
|
+
abiArr.push(web3_1.MIN_ABIS.totalSupply);
|
|
260
323
|
return abiArr;
|
|
261
324
|
}
|
|
262
325
|
try {
|
|
@@ -281,7 +344,7 @@ const getManagementFeePercent = async (provider, address) => {
|
|
|
281
344
|
if (!(address && provider))
|
|
282
345
|
return;
|
|
283
346
|
try {
|
|
284
|
-
const contract = new ethers_1.Contract(address, [
|
|
347
|
+
const contract = new ethers_1.Contract(address, [web3_1.MIN_ABIS.managementFeePercent], provider);
|
|
285
348
|
await contract.managementFeePercent.staticCall();
|
|
286
349
|
}
|
|
287
350
|
catch (e) {
|
|
@@ -289,7 +352,7 @@ const getManagementFeePercent = async (provider, address) => {
|
|
|
289
352
|
return undefined;
|
|
290
353
|
}
|
|
291
354
|
try {
|
|
292
|
-
const contract = new ethers_1.Contract(address, [
|
|
355
|
+
const contract = new ethers_1.Contract(address, [web3_1.MIN_ABIS.managementFeePercent], provider);
|
|
293
356
|
const fee = (await contract.managementFeePercent());
|
|
294
357
|
return Number(fee) / 100;
|
|
295
358
|
}
|
|
@@ -345,13 +408,13 @@ async function getLoanOracleFeeRate(provider, category_id, address, chainId) {
|
|
|
345
408
|
const chainIdRes = await (0, exports.getChainId)(provider);
|
|
346
409
|
_chainId = Number(chainIdRes);
|
|
347
410
|
}
|
|
348
|
-
if (!
|
|
411
|
+
if (!web3_1.ORACLE_CONTRACTS?.[_chainId]) {
|
|
349
412
|
console.warn('#getLoanOracleFeeRate: no oracle address for', _chainId);
|
|
350
413
|
return Number(0);
|
|
351
414
|
}
|
|
352
415
|
const oracleContract = createContract({
|
|
353
416
|
provider,
|
|
354
|
-
address:
|
|
417
|
+
address: web3_1.ORACLE_CONTRACTS[_chainId],
|
|
355
418
|
abi: abis_1.ABI_FEE_ORACLE,
|
|
356
419
|
});
|
|
357
420
|
const hashedCategory = (0, ethers_1.keccak256)((0, ethers_1.toUtf8Bytes)(category_id));
|
package/lib/core/logger/slack.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SLACK = exports.DEFAULT_SLACK_WEBHOOK_URL = void 0;
|
|
4
4
|
const core_1 = require("../helpers/core");
|
|
5
|
-
const
|
|
5
|
+
const explorer_link_1 = require("../helpers/explorer-link");
|
|
6
6
|
const sanitize_1 = require("../analytics/sanitize");
|
|
7
7
|
exports.DEFAULT_SLACK_WEBHOOK_URL = 'T04CM84GAV6/B0A2DS3ST8C/FLtOA3Jna3FN7UO4DoGxHfhG';
|
|
8
8
|
function error(options) {
|
|
@@ -35,7 +35,7 @@ function error(options) {
|
|
|
35
35
|
const safeError = (0, sanitize_1.sanitizeString)(String(error));
|
|
36
36
|
const safeTitle = (0, sanitize_1.sanitizeString)(String(title));
|
|
37
37
|
const data = {
|
|
38
|
-
text: `*Error: ${safeTitle}*\n${new Date().toUTCString()}\n\nPool: [${(0, core_1.truncate)(poolAddress)}](${(0,
|
|
38
|
+
text: `*Error: ${safeTitle}*\n${new Date().toUTCString()}\n\nPool: [${(0, core_1.truncate)(poolAddress)}](${(0, explorer_link_1.explorerLink)(poolAddress, chainId, 'address')})\n\n\nError: ${safeError}`,
|
|
39
39
|
};
|
|
40
40
|
const res = await fetch(webhookUrl, {
|
|
41
41
|
method: 'POST',
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fetchVaultMetadata = fetchVaultMetadata;
|
|
4
|
+
const cache_1 = require("./cache");
|
|
5
|
+
const core_1 = require("./constants/core");
|
|
6
|
+
const logger_1 = require("./logger");
|
|
7
|
+
async function fetchVaultMetadata(opts) {
|
|
8
|
+
const { options } = opts || {};
|
|
9
|
+
try {
|
|
10
|
+
const cacheKey = 'vaults_metadata';
|
|
11
|
+
if (cache_1.CACHE.has(cacheKey)) {
|
|
12
|
+
return cache_1.CACHE.get(cacheKey);
|
|
13
|
+
}
|
|
14
|
+
const response = await fetch(`${core_1.WEBSERVER_URL['upshift']}${core_1.WEBSERVER_ENDPOINTS.upshift.vaults.metadata}`, {
|
|
15
|
+
method: 'GET',
|
|
16
|
+
headers: {
|
|
17
|
+
'content-type': 'application/json',
|
|
18
|
+
accept: 'application/json',
|
|
19
|
+
'x-request-client': 'august-sdk',
|
|
20
|
+
...options?.headers,
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
if (!response.ok) {
|
|
24
|
+
throw new Error(`Failed to fetch vault metadata: ${response.statusText}`);
|
|
25
|
+
}
|
|
26
|
+
const metadata = await response.json();
|
|
27
|
+
cache_1.CACHE.set(cacheKey, metadata, { ttl: 10 * 60 * 1000 });
|
|
28
|
+
return metadata;
|
|
29
|
+
}
|
|
30
|
+
catch (e) {
|
|
31
|
+
logger_1.Logger.log.error('getVaultMetadata', e);
|
|
32
|
+
const errorMessage = e instanceof Error ? e.message : String(e);
|
|
33
|
+
throw new Error(`#getVaultMetadata::${errorMessage}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=vault-metadata.js.map
|