1
+ const { queryKey, getAddresssDataStoreKeys, bytesToStr, bytesToBigInt } = require ( '../helper/chain/massa.js' ) ;
2
+ const { sumTokens2 } = require ( '../helper/unwrapLPs.js' ) ;
3
+
4
+
5
+ const registryAddress = "AS1NYihs2Wy4D4P68JGY2hYSDDaqZ5YxhM2nDRsJVFZUykEEdSAW" ;
6
+
7
+
8
+ async function getAllPoolsAddresses ( registryAddress ) {
9
+
10
+ const registryKeys = await getAddresssDataStoreKeys ( registryAddress , "" , true ) ;
11
+ const poolsAddresses = [ ] ;
12
+
13
+ const transform = val => {
14
+ const arg = new Uint8Array ( val ) ;
15
+
16
+ const start_offset = 4 ;
17
+ let end_offset = start_offset + 62 ;
18
+ const p = arg . slice ( start_offset , end_offset ) ;
19
+ let poolAddressPlus = bytesToStr ( p ) ;
20
+ poolAddressPlus = "AS" + poolAddressPlus . split ( "AS" ) [ 1 ] ;
21
+ const poolAddress = poolAddressPlus . slice ( 0 , poolAddressPlus . length - 1 ) ;
22
+
23
+ return poolAddress ;
24
+ }
25
+
26
+ for ( const serializedKey of registryKeys ) {
27
+ const key = bytesToStr ( serializedKey ) ;
28
+
29
+ if ( ! key . startsWith ( "pools" ) ) {
30
+ continue ;
31
+ }
32
+
33
+ // Query that key to get the pools address
34
+ let poolAddress = await queryKey ( [ registryAddress ] , key , transform ) ;
35
+ poolsAddresses . push ( poolAddress . toString ( ) ) ;
36
+ }
37
+
38
+
39
+ return poolsAddresses ;
40
+ }
41
+
42
+
43
+ async function tvl (
44
+ api
45
+ ) {
46
+ const poolsAddresses = await getAllPoolsAddresses ( registryAddress ) ;
47
+
48
+
49
+ for ( const poolAddress of poolsAddresses ) {
50
+ const aReserve = await queryKey ( [ poolAddress ] , "aTokenReserve" , val => bytesToBigInt ( val ) ) ;
51
+ const bReserve = await queryKey ( [ poolAddress ] , "bTokenReserve" , val => bytesToBigInt ( val ) ) ;
52
+
53
+ const aToken = await queryKey ( [ poolAddress ] , "tokenA" ) ;
54
+ const bToken = await queryKey ( [ poolAddress ] , "tokenB" ) ;
55
+
56
+ api . add ( aToken , aReserve )
57
+ api . add ( bToken , bReserve )
58
+ }
59
+
60
+ return sumTokens2 ( { api } )
61
+ }
62
+
63
+ module . exports = {
64
+ timetravel : false ,
65
+ massa : { tvl, }
66
+ } ;
0 commit comments