@@ -15,32 +15,62 @@ interface DepositFungible {
1515 type : string ;
1616}
1717
18- const config : Record < string , string > = {
19- [ CHAIN . APTOS ] : "0x5a96fab415f43721a44c5a761ecfcccc3dae9c21f34313f0e594b49d8d4564f4" ,
20- [ CHAIN . POLYGON ] : "0x9Df4C994d8d8c440d87da8BA94D355BB85706f51" ,
21- }
18+ const aptosConfig = {
19+ contracts : [
20+ "0x5a96fab415f43721a44c5a761ecfcccc3dae9c21f34313f0e594b49d8d4564f4" ,
21+ "0x61b28909165252d7d21dbcb16572eaf13a660ad3d6d9884358894e0ea88d1e1f"
22+ ]
23+ } ;
24+
25+ const polygonConfig = {
26+ contracts : [
27+ {
28+ address : "0x9Df4C994d8d8c440d87da8BA94D355BB85706f51" ,
29+ events : [
30+ {
31+ abi : "event ItemSoldV1(uint256 tokenId, uint256 quantity, uint256 totalPrice)" ,
32+ amountField : "totalPrice"
33+ }
34+ ]
35+ } ,
36+ {
37+ address : "0x1Fcfa7866Eb4361E322aFbcBcB426B27a29d90Bd" ,
38+ events : [
39+ {
40+ abi : "event OrderPlaced(string orderId, string dpId, string productId, string purchaseUtr, string purchaseDate, uint256 quantity, uint256 amount, address customer)" ,
41+ amountField : "amount"
42+ } ,
43+ // Add more events for this contract here
44+ ]
45+ } ,
46+ // Add more contracts here
47+ ]
48+ } ;
2249
23- const POLYGON_USDT_ADDRESS = ADDRESSES . polygon . USDT
24- const ItemSoldEvent = "event ItemSoldV1(uint256 tokenId, uint256 quantity, uint256 totalPrice)" ;
25- const PAGE_SIZE = 100 ;
26- const APT_DECIMALS = 1e8 ;
50+ const POLYGON_USDT_ADDRESS = ADDRESSES . polygon . USDT ;
51+ const APTOS_USDT_ADDRESS = ADDRESSES . aptos . USDC
52+ const PAGE_SIZE = 100 ;
53+ const APT_DECIMALS = 1e8 ;
54+ const USDC_DECIMALS = 1e6 ;
2755const toUnixTime = ( timestamp : string ) : number =>
2856 Math . floor ( Number ( timestamp ) / 1e6 ) ;
2957
3058const version2tsCache : Record < string , number > = { } ;
59+
3160async function versionToTimestamp ( version : string ) : Promise < number > {
3261 if ( version2tsCache [ version ] !== undefined ) return version2tsCache [ version ] ;
3362 const block = await fetchURL ( `${ APTOS_RPC } /v1/blocks/by_version/${ version } ` ) ;
3463 const ts = block ?. block_timestamp ? toUnixTime ( block . block_timestamp ) : 0 ;
3564 version2tsCache [ version ] = ts ;
3665 return ts ;
3766}
67+
3868async function getEventData (
3969 resource : any ,
4070 fromTimestamp : number ,
4171 toTimestamp : number ,
42- chain : string ,
43- eventKeys : string [ ] = [ "deposit_fungible" , "deposit_native" ] ,
72+ contractAddress : string ,
73+ eventKeys : string [ ] = [ "deposit_fungible" , "deposit_native" , "order_placed" ] ,
4474) : Promise < DepositFungible [ ] > {
4575
4676 const collected : DepositFungible [ ] = [ ] ;
@@ -55,14 +85,16 @@ async function getEventData(
5585
5686 for ( let seq = totalEvents - 1 ; seq >= 0 ; seq -= PAGE_SIZE ) {
5787 const batchStart = Math . max ( seq - PAGE_SIZE + 1 , 0 ) ;
58- const url = `${ APTOS_RPC } /v1/accounts/${ config [ chain ] } /events/${ creationNum } ?start=${ batchStart } &limit=${ PAGE_SIZE } ` ;
88+
89+ const url = `${ APTOS_RPC } /v1/accounts/${ contractAddress } /events/${ creationNum } ?start=${ batchStart } &limit=${ PAGE_SIZE } ` ;
90+
5991 const events : any [ ] = await fetchURL ( url ) ;
6092 if ( ! events ?. length ) break ;
6193
6294 for ( const e of events . reverse ( ) ) {
6395 const ts = await versionToTimestamp ( e . version ) ;
64- if ( ts > toTimestamp ) continue ;
65- if ( ts < fromTimestamp ) break ;
96+ if ( ts > toTimestamp ) continue ;
97+ if ( ts < fromTimestamp ) break ;
6698
6799 collected . push ( {
68100 amount : e . data . amount ,
@@ -82,22 +114,30 @@ async function getEventData(
82114
83115const fetchAptosRevenue : FetchV2 = async ( options : FetchOptions ) => {
84116 const dailyFees = options . createBalances ( ) ;
85- const resources = await getResources ( config [ options . chain ] ) ;
86-
87- const revHolders = resources . filter ( ( resource ) =>
88- resource . type . includes ( "RevenueContractV2::RevenueEventHolder" )
89- || resource . type . includes ( "RevenueContractV2::RevenueEventHolderV1" ) ) ;
90-
91- const eventArrays = await Promise . all (
92- revHolders . map ( ( r ) =>
93- getEventData ( r , options . fromTimestamp , options . toTimestamp , options . chain ) )
94- ) ;
95-
96- for ( const event of eventArrays . flat ( ) ) {
97- if ( event . token ) {
98- dailyFees . add ( event . token , event . amount ) ;
99- } else {
100- dailyFees . addCGToken ( "aptos" , Number ( event . amount ) / APT_DECIMALS ) ;
117+
118+ for ( const contractAddress of aptosConfig . contracts ) {
119+ const resources = await getResources ( contractAddress ) ;
120+
121+ const revHolders = resources . filter ( ( resource ) =>
122+ resource . type . includes ( "RevenueContractV2::RevenueEventHolder" )
123+ || resource . type . includes ( "RevenueContractV2::RevenueEventHolderV1" )
124+ || resource . type . includes ( "order_management_v1::B2bRevenueEventHolder" )
125+ ) ;
126+
127+ const eventArrays = await Promise . all (
128+ revHolders . map ( ( r ) =>
129+ getEventData ( r , options . fromTimestamp , options . toTimestamp , contractAddress )
130+ )
131+ ) ;
132+ for ( const event of eventArrays . flat ( ) ) {
133+ if ( event . token ) {
134+ dailyFees . add ( event . token , event . amount ) ;
135+ } else if ( event . type = "0x61b28909165252d7d21dbcb16572eaf13a660ad3d6d9884358894e0ea88d1e1f::order_management_v1::OrderPlacedEvent" ) {
136+ dailyFees . addUSDValue ( Number ( event . amount ) / USDC_DECIMALS ) ;
137+ }
138+ else {
139+ dailyFees . addCGToken ( "aptos" , Number ( event . amount ) / APT_DECIMALS ) ;
140+ }
101141 }
102142 }
103143
@@ -109,20 +149,28 @@ const fetchAptosRevenue: FetchV2 = async (options: FetchOptions) => {
109149} ;
110150
111151const fetchPolygonRevenue : FetchV2 = async ( options : FetchOptions ) => {
112- const logs : any [ ] = await options . getLogs ( {
113- target : config [ options . chain ] ,
114- eventAbi : ItemSoldEvent ,
115- } ) ;
116-
117- const dailyFees = options . createBalances ( )
152+ const dailyFees = options . createBalances ( ) ;
118153
119- for ( const log of logs ) {
120- const amount = Number ( log . totalPrice ) ;
121- if ( ! isNaN ( amount ) ) {
122- dailyFees . add ( POLYGON_USDT_ADDRESS , amount ) ;
154+ for ( const contract of polygonConfig . contracts ) {
155+ for ( const event of contract . events ) {
156+ const logs : any [ ] = await options . getLogs ( {
157+ target : contract . address ,
158+ eventAbi : event . abi ,
159+ } ) ;
160+ for ( const log of logs ) {
161+ let amount : number = 0 ;
162+ if ( log . totalPrice ) {
163+ amount = Number ( log . totalPrice ) ;
164+ }
165+ else {
166+ amount = Number ( log . amount ) ;
167+ }
168+ if ( ! isNaN ( amount ) ) {
169+ dailyFees . add ( POLYGON_USDT_ADDRESS , amount ) ;
170+ }
171+ }
123172 }
124173 }
125-
126174 return {
127175 dailyFees,
128176 dailyRevenue : dailyFees ,
@@ -142,7 +190,8 @@ const adapter: SimpleAdapter = {
142190 adapter : {
143191 [ CHAIN . APTOS ] : {
144192 fetch : fetchAptosRevenue ,
145- start : "2025-06-02" ,
193+ start : "2025-06-02" ,
194+
146195 } ,
147196 [ CHAIN . POLYGON ] : {
148197 fetch : fetchPolygonRevenue ,
@@ -151,5 +200,4 @@ const adapter: SimpleAdapter = {
151200 } ,
152201} ;
153202
154- export default adapter ;
155-
203+ export default adapter ;
0 commit comments