Skip to content

Commit

Permalink
SDK implementation of assets analytics using dex guru (#218)
Browse files Browse the repository at this point in the history
* SDK implementation of assets analytics using dex guru

* Allowing dynamic chain idon fly
  • Loading branch information
kaushalrajbacancy authored Apr 11, 2023
1 parent 0d15433 commit ed8716f
Show file tree
Hide file tree
Showing 29 changed files with 916 additions and 6 deletions.
8 changes: 7 additions & 1 deletion examples/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,13 @@
"18-cross-chain-stream": "../node_modules/.bin/ts-node ./src/18-cross-chain-stream.ts",
"21-exchange-rates": "../node_modules/.bin/ts-node ./src/21-exchange-rates.ts",
"22-name-resolution": "../node_modules/.bin/ts-node ./src/22-name-resolution.ts",
"24-account-investments": "../node_modules/.bin/ts-node ./src/24-account-investments.ts"
"24-account-investments": "../node_modules/.bin/ts-node ./src/24-account-investments.ts",
"25-token-details": "../node_modules/.bin/ts-node ./src/25-token-details.ts",
"26-historical-token-price" : "../node_modules/.bin/ts-node ./src/26-historical-token-price.ts",
"27-pools-activity" : "../node_modules/.bin/ts-node ./src/27-pools-activity.ts",
"28-number-of-transactions" : "../node_modules/.bin/ts-node ./src/28-number-of-transactions.ts",
"29-trading-history" : "../node_modules/.bin/ts-node ./src/29-trading-history.ts",
"30-market-details" : "../node_modules/.bin/ts-node ./src/30-market-details.ts"
},
"dependencies": {
"dotenv": "16.0.1"
Expand Down
37 changes: 37 additions & 0 deletions examples/src/25-token-details.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { EnvNames, NetworkNames, Sdk } from '../../src';
import { logger } from './common';

async function main(): Promise<void> {
const PRIVATE_KEY = ''; //Privite key Example: get from metamask

const sdk = new Sdk(PRIVATE_KEY, { env: EnvNames.LocalNets, networkName: NetworkNames.Mainnet });

const { state } = sdk;

logger.log('key account', state.account);

logger.log(
'contract account',
await sdk.computeContractAccount({
sync: false,
}),
);

await sdk.syncAccount();

logger.log('synced contract account', state.account);
logger.log('synced contract account member', state.accountMember);

logger.log(
'get token details',
await sdk.getTokenDetails({
chainId: 1, //Linked chain id
tokenAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
provider: '', //specific provider optional
})
);
}

main()
.catch(logger.error)
.finally(() => process.exit());
38 changes: 38 additions & 0 deletions examples/src/26-historical-token-price.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import { EnvNames, NetworkNames, Sdk } from '../../src';
import { logger } from './common';

async function main(): Promise<void> {
const PRIVATE_KEY = ''; //Privite key Example: get from metamask

const sdk = new Sdk(PRIVATE_KEY, { env: EnvNames.LocalNets, networkName: NetworkNames.Mainnet });

const { state } = sdk;

logger.log('key account', state.account);

logger.log(
'contract account',
await sdk.computeContractAccount({
sync: false,
}),
);

await sdk.syncAccount();

logger.log('synced contract account', state.account);
logger.log('synced contract account member', state.accountMember);

logger.log(
'get historical token price',
await sdk.getHistoricalTokenPrice({
chainId: 1, //Linked chain id
tokenAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
provider: '', //specific provider optional
timePeriod: '1week', //specific time period optional
})
);
}

main()
.catch(logger.error)
.finally(() => process.exit());
39 changes: 39 additions & 0 deletions examples/src/27-pools-activity.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import { EnvNames, NetworkNames, Sdk } from '../../src';
import { logger } from './common';

async function main(): Promise<void> {
const PRIVATE_KEY = ''; //Privite key Example: get from metamask

const sdk = new Sdk(PRIVATE_KEY, { env: EnvNames.LocalNets, networkName: NetworkNames.Mainnet });

const { state } = sdk;

logger.log('key account', state.account);

logger.log(
'contract account',
await sdk.computeContractAccount({
sync: false,
}),
);

await sdk.syncAccount();

logger.log('synced contract account', state.account);
logger.log('synced contract account member', state.accountMember);

logger.log(
'get pools activity of token',
await sdk.getPoolsActivity({
chainId: 1, //Linked chain id
tokenAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
provider: '', //specific provider optional
page: 1,
type: "adds",
})
);
}

main()
.catch(logger.error)
.finally(() => process.exit());
37 changes: 37 additions & 0 deletions examples/src/28-number-of-transactions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { EnvNames, NetworkNames, Sdk } from '../../src';
import { logger } from './common';

async function main(): Promise<void> {
const PRIVATE_KEY = ''; //Privite key Example: get from metamask

const sdk = new Sdk(PRIVATE_KEY, { env: EnvNames.LocalNets, networkName: NetworkNames.Mainnet });

const { state } = sdk;

logger.log('key account', state.account);

logger.log(
'contract account',
await sdk.computeContractAccount({
sync: false,
}),
);

await sdk.syncAccount();

logger.log('synced contract account', state.account);
logger.log('synced contract account member', state.accountMember);

logger.log(
'get number of transactions of token',
await sdk.getNumberOfTransactions({
chainId: 1, //Linked chain id
tokenAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
provider: '', //specific provider optional
})
);
}

main()
.catch(logger.error)
.finally(() => process.exit());
38 changes: 38 additions & 0 deletions examples/src/29-trading-history.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import { EnvNames, NetworkNames, Sdk } from '../../src';
import { logger } from './common';

async function main(): Promise<void> {
const PRIVATE_KEY = ''; //Privite key Example: get from metamask

const sdk = new Sdk(PRIVATE_KEY, { env: EnvNames.LocalNets, networkName: NetworkNames.Mainnet });

const { state } = sdk;

logger.log('key account', state.account);

logger.log(
'contract account',
await sdk.computeContractAccount({
sync: false,
}),
);

await sdk.syncAccount();

logger.log('synced contract account', state.account);
logger.log('synced contract account member', state.accountMember);

logger.log(
'get trading history of token',
await sdk.getTradingHistory({
chainId: 1, //Linked chain id
tokenAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
provider: '', //specific provider optional
page: 1, //offset of records optional
})
);
}

main()
.catch(logger.error)
.finally(() => process.exit());
37 changes: 37 additions & 0 deletions examples/src/30-market-details.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { EnvNames, NetworkNames, Sdk } from '../../src';
import { logger } from './common';

async function main(): Promise<void> {
const PRIVATE_KEY = ''; //Privite key Example: get from metamask

const sdk = new Sdk(PRIVATE_KEY, { env: EnvNames.LocalNets, networkName: NetworkNames.Mainnet });

const { state } = sdk;

logger.log('key account', state.account);

logger.log(
'contract account',
await sdk.computeContractAccount({
sync: false,
}),
);

await sdk.syncAccount();

logger.log('synced contract account', state.account);
logger.log('synced contract account member', state.accountMember);

logger.log(
'get market details of token',
await sdk.getMarketDetails({
chainId: 1, //Linked chain id
tokenAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
provider: '', //specific provider optional
})
);
}

main()
.catch(logger.error)
.finally(() => process.exit());
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "etherspot",
"version": "1.42.9",
"version": "1.43.0",
"description": "Etherspot SDK",
"keywords": [
"ether",
Expand Down
81 changes: 81 additions & 0 deletions schema.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -717,6 +717,12 @@ type Query {
gatewayTransaction(chainId: Int, hash: String!): GatewayTransaction
getContractAbi(address: String!, chainId: Int): JSONObject
isTokenOnTokenList(chainId: Int, name: String, token: String!): Boolean!
tokenDetails(chainId: Int, tokenAddress: String!, provider: String): TokenDetails!
historicalTokenPrice(chainId: Int, tokenAddress: String!, provider: String, timePeriod: String): HistoricalTokenPrices!
poolsActivity(chainId: Int, tokenAddress: String!, provider: String, page: Int, type: String): PoolsActivities!
numberOfTransactions(chainId: Int, tokenAddress: String!, provider: String): NumberOfTransactions!
tradingHistory(chainId: Int, tokenAddress: String!, provider: String, page: Int): TradingHistories!
marketDetails(chainId: Int, tokenAddress: String!, provider: String): MarketDetails!
resolveName(chainId: Int, name: String!): NameResolutionsNodes
nativeCurrencies: NativeCurrencies!
nftList(account: String!, chainId: Int): NftList!
Expand Down Expand Up @@ -841,6 +847,81 @@ type TokenListToken {
symbol: String
}

type TokenDetails {
usdPrice: number!
tokenAddress: string!
liquidityUSD: number!
tradingVolume: number!
}

type HistoricalTokenPrice {
usdPrice: number!
tokenAddress: string!
timestamp: number!
}

type HistoricalTokenPrices {
items: [HistoricalTokenPrice!]!
}

type PoolsActivityTokensInOut {
symbol: string!
amm: string!
network: string!
priceUSD: number!
priceETH: number!
amount: number!
}

type PoolsActivity {
amm: string!
transactionAddress: string!
timestamp: number!
amountUSD: number!
transactionType: string!
tokensIn: [PoolsActivityTokensInOut!]!
tokensOut: [PoolsActivityTokensInOut!]!
}

type PoolsActivities {
items: [PoolsActivity!]!
}

type NumberOfTransactions {
totalTransactions: number!
}

type TradingHistory {
amm: string!
direction: string!
transactionAddress: string!
timestamp: number!
amountUSD: number!
walletAddress: string!
tokensIn: [PoolsActivityTokensInOut!]!
tokensOut: [PoolsActivityTokensInOut!]!
}

type TradingHistories {
items: [TradingHistory!]!
}

type MarketDetails {
id: string!
symbol: string!
name: string!
image?: string!
marketCap: number!
allTimeHigh?: number!
allTimeLow?: number!
fullyDilutedValuation: number!
priceChangePercentage1h: number!
priceChangePercentage24h: number!
priceChangePercentage7d: number!
priceChangePercentage1m: number!
priceChangePercentage1y?: number!
}

type TokenLists {
items: [TokenListPublic!]!
}
Expand Down
6 changes: 6 additions & 0 deletions src/sdk/assets/__mocks__/assets.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,10 @@ export const AssetsService = mockService({
getTokenListTokens: jest.fn(),
getAccountTokenListTokens: jest.fn(),
isTokenOnTokenList: jest.fn(),
getTokenDetails: jest.fn(),
getHistoricalTokenPrice: jest.fn(),
getPoolsActivity: jest.fn(),
getNumberOfTransactions: jest.fn(),
getTradingHistory: jest.fn(),
getMarketDetails: jest.fn(),
});
Loading

0 comments on commit ed8716f

Please sign in to comment.