1
+ const { request, gql } = require ( "graphql-request" ) ;
2
+ const sdk = require ( '@defillama/sdk' ) ;
3
+ const BigNumber = require ( "bignumber.js" )
4
+
5
+ const graphUrl = 'https://api.thegraph.com/subgraphs/name/renproject/renvm'
6
+ const graphQuery = gql `
7
+ query get_tvl($block: Int) {
8
+ assets(
9
+ block: { number: $block }
10
+ ) {
11
+ priceInUsd
12
+ symbol
13
+ tokenAddress
14
+ }
15
+ }
16
+ ` ;
17
+ const usdtAddress = '0xdac17f958d2ee523a2206206994597c13d831ec7' ;
18
+ const darkNodeStakingContract = "0x60Ab11FE605D2A2C3cf351824816772a131f8782" ;
19
+ const renToken = '0x408e41876cCCDC0F92210600ef50372656052a38'
20
+
21
+ async function tvl ( timestamp , block ) {
22
+ const balances = { }
23
+ const { assets} = await request (
24
+ graphUrl ,
25
+ graphQuery ,
26
+ {
27
+ block,
28
+ }
29
+ ) ;
30
+ const assetCalls = assets . map ( asset => ( {
31
+ target : asset . tokenAddress
32
+ } ) )
33
+ const decimals = sdk . api . abi . multiCall ( {
34
+ abi : 'erc20:decimals' ,
35
+ block,
36
+ calls : assetCalls
37
+ } ) ;
38
+ const totalSupplies = sdk . api . abi . multiCall ( {
39
+ abi : 'erc20:totalSupply' ,
40
+ block,
41
+ calls : assetCalls
42
+ } ) ;
43
+ const stakedRen = await sdk . api . abi . call ( {
44
+ target : renToken ,
45
+ abi : 'erc20:balanceOf' ,
46
+ params : [ darkNodeStakingContract ] ,
47
+ block
48
+ } ) ;
49
+ balances [ renToken ] = stakedRen . output ;
50
+
51
+ const resolvedDecimals = ( await decimals ) . output ;
52
+ const resolvedSupplies = ( await totalSupplies ) . output
53
+ const assetsUsdTvl = assets . reduce ( ( acc , asset , index ) => {
54
+ const dec = Number ( resolvedDecimals [ index ] . output )
55
+ const supply = BigNumber ( resolvedSupplies [ index ] . output )
56
+ const usdAmount = supply . div ( BigNumber ( 10 ) . pow ( dec ) ) . times ( asset . priceInUsd ) . toNumber ( )
57
+ return acc + usdAmount ;
58
+ } , 0 )
59
+ balances [ usdtAddress ] = ( assetsUsdTvl * 1e6 ) . toFixed ( 0 )
60
+
61
+ return balances
62
+ }
63
+
64
+ module . exports = {
65
+ name : 'REN' ,
66
+ token : 'REN' ,
67
+ category : 'Assets' ,
68
+ start : 0 , // WRONG!
69
+ tvl
70
+ }
0 commit comments