@@ -56,6 +56,10 @@ func SlotsFiltered(w http.ResponseWriter, r *http.Request) {
5656 var maxSyncAgg string
5757 var minExecTime string
5858 var maxExecTime string
59+ var minTxCount string
60+ var maxTxCount string
61+ var minBlobCount string
62+ var maxBlobCount string
5963
6064 if urlArgs .Has ("f" ) {
6165 if urlArgs .Has ("f.graffiti" ) {
@@ -97,14 +101,26 @@ func SlotsFiltered(w http.ResponseWriter, r *http.Request) {
97101 if urlArgs .Has ("f.maxexec" ) {
98102 maxExecTime = urlArgs .Get ("f.maxexec" )
99103 }
104+ if urlArgs .Has ("f.mintx" ) {
105+ minTxCount = urlArgs .Get ("f.mintx" )
106+ }
107+ if urlArgs .Has ("f.maxtx" ) {
108+ maxTxCount = urlArgs .Get ("f.maxtx" )
109+ }
110+ if urlArgs .Has ("f.minblob" ) {
111+ minBlobCount = urlArgs .Get ("f.minblob" )
112+ }
113+ if urlArgs .Has ("f.maxblob" ) {
114+ maxBlobCount = urlArgs .Get ("f.maxblob" )
115+ }
100116 } else {
101117 withOrphaned = 1
102118 withMissing = 1
103119 }
104120 var pageError error
105121 pageError = services .GlobalCallRateLimiter .CheckCallLimit (r , 2 )
106122 if pageError == nil {
107- data .Data , pageError = getFilteredSlotsPageData (pageIdx , pageSize , graffiti , invertgraffiti , extradata , invertextradata , proposer , pname , invertproposer , uint8 (withOrphaned ), uint8 (withMissing ), minSyncAgg , maxSyncAgg , minExecTime , maxExecTime , displayColumns )
123+ data .Data , pageError = getFilteredSlotsPageData (pageIdx , pageSize , graffiti , invertgraffiti , extradata , invertextradata , proposer , pname , invertproposer , uint8 (withOrphaned ), uint8 (withMissing ), minSyncAgg , maxSyncAgg , minExecTime , maxExecTime , minTxCount , maxTxCount , minBlobCount , maxBlobCount , displayColumns )
108124 }
109125 if pageError != nil {
110126 handlePageError (w , r , pageError )
@@ -116,11 +132,11 @@ func SlotsFiltered(w http.ResponseWriter, r *http.Request) {
116132 }
117133}
118134
119- func getFilteredSlotsPageData (pageIdx uint64 , pageSize uint64 , graffiti string , invertgraffiti bool , extradata string , invertextradata bool , proposer string , pname string , invertproposer bool , withOrphaned uint8 , withMissing uint8 , minSyncAgg string , maxSyncAgg string , minExecTime string , maxExecTime string , displayColumns string ) (* models.SlotsFilteredPageData , error ) {
135+ func getFilteredSlotsPageData (pageIdx uint64 , pageSize uint64 , graffiti string , invertgraffiti bool , extradata string , invertextradata bool , proposer string , pname string , invertproposer bool , withOrphaned uint8 , withMissing uint8 , minSyncAgg string , maxSyncAgg string , minExecTime string , maxExecTime string , minTxCount string , maxTxCount string , minBlobCount string , maxBlobCount string , displayColumns string ) (* models.SlotsFilteredPageData , error ) {
120136 pageData := & models.SlotsFilteredPageData {}
121- pageCacheKey := fmt .Sprintf ("slots_filtered:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v" , pageIdx , pageSize , graffiti , invertgraffiti , extradata , invertextradata , proposer , pname , invertproposer , withOrphaned , withMissing , minSyncAgg , maxSyncAgg , minExecTime , maxExecTime , displayColumns )
137+ pageCacheKey := fmt .Sprintf ("slots_filtered:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v " , pageIdx , pageSize , graffiti , invertgraffiti , extradata , invertextradata , proposer , pname , invertproposer , withOrphaned , withMissing , minSyncAgg , maxSyncAgg , minExecTime , maxExecTime , minTxCount , maxTxCount , minBlobCount , maxBlobCount , displayColumns )
122138 pageRes , pageErr := services .GlobalFrontendCache .ProcessCachedPage (pageCacheKey , true , pageData , func (_ * services.FrontendCacheProcessingPage ) interface {} {
123- return buildFilteredSlotsPageData (pageIdx , pageSize , graffiti , invertgraffiti , extradata , invertextradata , proposer , pname , invertproposer , withOrphaned , withMissing , minSyncAgg , maxSyncAgg , minExecTime , maxExecTime , displayColumns )
139+ return buildFilteredSlotsPageData (pageIdx , pageSize , graffiti , invertgraffiti , extradata , invertextradata , proposer , pname , invertproposer , withOrphaned , withMissing , minSyncAgg , maxSyncAgg , minExecTime , maxExecTime , minTxCount , maxTxCount , minBlobCount , maxBlobCount , displayColumns )
124140 })
125141 if pageErr == nil && pageRes != nil {
126142 resData , resOk := pageRes .(* models.SlotsFilteredPageData )
@@ -132,7 +148,7 @@ func getFilteredSlotsPageData(pageIdx uint64, pageSize uint64, graffiti string,
132148 return pageData , pageErr
133149}
134150
135- func buildFilteredSlotsPageData (pageIdx uint64 , pageSize uint64 , graffiti string , invertgraffiti bool , extradata string , invertextradata bool , proposer string , pname string , invertproposer bool , withOrphaned uint8 , withMissing uint8 , minSyncAgg string , maxSyncAgg string , minExecTime string , maxExecTime string , displayColumns string ) * models.SlotsFilteredPageData {
151+ func buildFilteredSlotsPageData (pageIdx uint64 , pageSize uint64 , graffiti string , invertgraffiti bool , extradata string , invertextradata bool , proposer string , pname string , invertproposer bool , withOrphaned uint8 , withMissing uint8 , minSyncAgg string , maxSyncAgg string , minExecTime string , maxExecTime string , minTxCount string , maxTxCount string , minBlobCount string , maxBlobCount string , displayColumns string ) * models.SlotsFilteredPageData {
136152 chainState := services .GlobalBeaconService .GetChainState ()
137153 filterArgs := url.Values {}
138154 if graffiti != "" {
@@ -174,6 +190,18 @@ func buildFilteredSlotsPageData(pageIdx uint64, pageSize uint64, graffiti string
174190 if maxExecTime != "" {
175191 filterArgs .Add ("f.maxexec" , maxExecTime )
176192 }
193+ if minTxCount != "" {
194+ filterArgs .Add ("f.mintx" , minTxCount )
195+ }
196+ if maxTxCount != "" {
197+ filterArgs .Add ("f.maxtx" , maxTxCount )
198+ }
199+ if minBlobCount != "" {
200+ filterArgs .Add ("f.minblob" , minBlobCount )
201+ }
202+ if maxBlobCount != "" {
203+ filterArgs .Add ("f.maxblob" , maxBlobCount )
204+ }
177205
178206 // Check if snooper clients are configured
179207 hasSnooperClients := false
@@ -244,6 +272,10 @@ func buildFilteredSlotsPageData(pageIdx uint64, pageSize uint64, graffiti string
244272 FilterMaxSyncAgg : maxSyncAgg ,
245273 FilterMinExecTime : minExecTime ,
246274 FilterMaxExecTime : maxExecTime ,
275+ FilterMinTxCount : minTxCount ,
276+ FilterMaxTxCount : maxTxCount ,
277+ FilterMinBlobCount : minBlobCount ,
278+ FilterMaxBlobCount : maxBlobCount ,
247279
248280 DisplayEpoch : displayMap [1 ],
249281 DisplaySlot : displayMap [2 ],
@@ -336,6 +368,30 @@ func buildFilteredSlotsPageData(pageIdx uint64, pageSize uint64, graffiti string
336368 blockFilter .MaxExecTime = & maxExecUint32
337369 }
338370 }
371+ if minTxCount != "" {
372+ minTx , err := strconv .ParseUint (minTxCount , 10 , 64 )
373+ if err == nil {
374+ blockFilter .MinTxCount = & minTx
375+ }
376+ }
377+ if maxTxCount != "" {
378+ maxTx , err := strconv .ParseUint (maxTxCount , 10 , 64 )
379+ if err == nil {
380+ blockFilter .MaxTxCount = & maxTx
381+ }
382+ }
383+ if minBlobCount != "" {
384+ minBlob , err := strconv .ParseUint (minBlobCount , 10 , 64 )
385+ if err == nil {
386+ blockFilter .MinBlobCount = & minBlob
387+ }
388+ }
389+ if maxBlobCount != "" {
390+ maxBlob , err := strconv .ParseUint (maxBlobCount , 10 , 64 )
391+ if err == nil {
392+ blockFilter .MaxBlobCount = & maxBlob
393+ }
394+ }
339395
340396 withScheduledCount := chainState .GetSpecs ().SlotsPerEpoch - uint64 (chainState .SlotToSlotIndex (currentSlot )) - 1
341397 if withScheduledCount > 16 {
0 commit comments