1
1
const ADDRESSES = require ( './helper/coreAssets.json' )
2
- const { sumTokens } = require ( './helper/chain/near' ) ;
2
+ const { sumTokens } = require ( './helper/chain/near' )
3
+ const { getConfig } = require ( './helper/cache' )
4
+ const { get } = require ( './helper/http' )
5
+
6
+ const { PublicKey } = require ( '@solana/web3.js' ) ;
7
+ const { ASSOCIATED_TOKEN_PROGRAM_ID , TOKEN_PROGRAM_ID , } = require ( "@solana/spl-token" ) ;
8
+ const { sumTokens2 } = require ( './helper/solana' )
9
+
10
+ const state = new PublicKey ( 'FRcbUFpGHQppvXAyJrNYLKME1BQfowh4xKZB2vt9j6yn' ) ;
11
+ const programId = new PublicKey ( 'CNLGhYQgNwjyDfHZTEjHfk1MPkqwP96qZahWN82UfcLM' ) ;
3
12
4
13
const GRID_CONTRACT_ID = 'grid.deltatrade.near' ;
5
14
const DCA_CONTRACT_ID = 'dca.deltatrade.near' ;
@@ -23,4 +32,37 @@ module.exports = {
23
32
near : {
24
33
tvl : ( ) => sumTokens ( { tokens, owners : [ GRID_CONTRACT_ID , DCA_CONTRACT_ID ] } ) ,
25
34
} ,
35
+ solana : {
36
+ tvl : solanaTvl ,
37
+ }
38
+ }
39
+
40
+ async function getTokens ( ) {
41
+ return getConfig ( 'deltatrade/sol-pairs' , undefined , {
42
+ fetcher : async ( ) => {
43
+ const { data } = await get ( 'https://solapi.deltatrade.ai/api/bot/grid/pairs' ) ;
44
+ const tokenSet = new Set ( )
45
+ data . forEach ( pair => {
46
+ tokenSet . add ( pair . base_token . code )
47
+ tokenSet . add ( pair . quote_token . code )
48
+ } )
49
+ const arry = Array . from ( tokenSet )
50
+ arry . sort ( )
51
+ return arry
52
+ }
53
+ } )
54
+ }
55
+
56
+ function getGlobalBalanceUser ( token ) {
57
+ const [ globalBalPda ] = PublicKey . findProgramAddressSync ( [ Buffer . from ( "global_balance_user" ) , state . toBuffer ( ) , new PublicKey ( token ) . toBuffer ( ) ] , programId ) ;
58
+
59
+ // const globalBalTokenAccount = await Token.getAssociatedTokenAddress(ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID, new PublicKey(token), new PublicKey(globalBalPda.toString()), true);
60
+ const [ tokenAccount ] = PublicKey . findProgramAddressSync ( [ new PublicKey ( globalBalPda . toString ( ) ) , TOKEN_PROGRAM_ID , new PublicKey ( token ) ] . map ( i => i . toBuffer ( ) ) , ASSOCIATED_TOKEN_PROGRAM_ID )
61
+ return tokenAccount . toString ( ) ;
62
+ }
63
+
64
+ async function solanaTvl ( ) {
65
+ const tokens = await getTokens ( ) ;
66
+ const tokenAccounts = tokens . map ( getGlobalBalanceUser )
67
+ return sumTokens2 ( { tokenAccounts } )
26
68
}
0 commit comments