@@ -432,13 +432,17 @@ def update_txblock(self, txpool_block, blockdata, predictiontable, gprecs):
432
432
txpool_block = txpool_block .join (predictiontable .predictiondf , how = 'left' , on = 'round_gp_10gwei' )
433
433
txpool_block ['safelow' ] = gprecs ['safeLow' ]
434
434
txpool_block ['average' ] = gprecs ['average' ]
435
+ txpool_block ['nomine' ] = gprecs ['nomine' ]
435
436
console .info ("updating " + str (len (txpool_block )) + " transactions" )
436
437
self .df = self .df .combine_first (txpool_block )
437
438
438
439
439
- def write_to_sql (self ):
440
+ def write_to_sql (self , txpool ):
440
441
"""writes to sql, prevent buffer overflow errors"""
441
442
console .info ("writing to mysql....this can take awhile" )
443
+ prev_block = self .process_block - 1
444
+ txp = txpool .txpool_df .loc [txpool .txpool_df ['block' ]== prev_block ]
445
+ self .df ['txpool' ] = self .df .index .isin (txp .index ).astype (int )
442
446
self .df .reset_index (inplace = True )
443
447
length = len (self .df )
444
448
chunks = int (np .ceil (length / 1000 ))
@@ -481,6 +485,7 @@ def __init__(self, name, current_block, start_block, end_block, max_gas, alltx,
481
485
self .alltx = alltx
482
486
self .txpool = txpool
483
487
self .safe = None
488
+ self .nomine_gp = None
484
489
self .init_df ()
485
490
486
491
def init_df (self ):
@@ -511,6 +516,8 @@ def init_df(self):
511
516
self .print_length ()
512
517
self .df = pd .DataFrame ()
513
518
self .safe = None
519
+ self .nomine_gp = None
520
+
514
521
515
522
def get_txpool (self ):
516
523
df = self .df
@@ -521,7 +528,10 @@ def get_txpool(self):
521
528
else :
522
529
safe = df .loc [(df ['total' ] >= 2 ) & (df ['mined' ] >= 1 ) & (df ['pct_remaining' ] < 10 )]
523
530
safe_gp = safe .index .min ()
531
+ nomine = df .loc [(df ['mined' ] == 0 ) & (df .index < safe_gp )]
532
+ nomine_gp = nomine .index .max ()
524
533
self .safe = safe_gp
534
+ self .nomine_gp = nomine_gp
525
535
526
536
527
537
def print_length (self ):
@@ -548,7 +558,6 @@ def init_predictiontable(self):
548
558
"""makes prediction table for number of blocks to confirmation"""
549
559
hashpower = self .blockdata .hashpower
550
560
hpower = self .alltx .pctmined_gp_last100
551
- avg_timemined = self .blockdata .block_time
552
561
txpool_by_gp = self .txpool .txpool_by_gp
553
562
submitted_5mago = self .recentdf
554
563
submitted_30mago = self .remotedf
@@ -568,9 +577,38 @@ def init_predictiontable(self):
568
577
predictTable ['pct_remaining30m' ] = submitted_30mago ['pct_remaining' ]
569
578
predictTable ['pct_mined_30m' ] = submitted_30mago ['pct_mined' ]
570
579
predictTable ['total_seen_30m' ] = submitted_30mago ['total' ]
580
+
581
+ self .predictiondf = predictTable
571
582
572
- #to-do - fix
573
- predictTable ['expectedWait' ] = predictTable .apply (predict , axis = 1 )
583
+ def get_predicted_wait (self , gpreport ):
584
+ """make wait time based on the data"""
585
+ predictTable = self .predictiondf
586
+ avg_timemined = self .blockdata .block_time
587
+ gprecs = gpreport .gprecs
588
+ predictTable ['average' ] = gprecs ['average' ]
589
+ predictTable ['safelow' ] = gprecs ['safeLow' ]
590
+ predictTable ['nomine' ] = gprecs ['nomine' ]
591
+ predictTable ['avgdiff' ] = (predictTable .index >= predictTable ['average' ]).astype (int )
592
+ predictTable ['intercept' ] = INTERCEPT
593
+ predictTable ['hpa_coef' ] = HPA_COEF
594
+ predictTable ['avgdiff_coef' ] = AVGDIFF_COEF
595
+ predictTable ['tx_atabove_coef' ] = TXATABOVE_COEF
596
+ predictTable ['int2' ] = INTERCEPT2
597
+ predictTable ['hpa_coef2' ] = HPA_COEF2
598
+
599
+
600
+
601
+
602
+ if gprecs ['nomine' ]:
603
+ predictTable ['sum' ] = (predictTable ['intercept' ] + (predictTable ['hashpower_accepting' ] * predictTable ['hpa_coef' ]) + (predictTable ['avgdiff' ] * predictTable ['avgdiff_coef' ]) + (predictTable ['tx_atabove' ] * predictTable ['tx_atabove_coef' ]))
604
+ predictTable ['expectedWait' ] = predictTable ['sum' ].apply (lambda x : np .exp (x ))
605
+ predictTable .loc [predictTable .index <= gprecs ['nomine' ], 'expectedWait' ] = 1000
606
+ else :
607
+ predictTable ['sum' ] = (predictTable ['int2' ] + (predictTable ['hashpower_accepting' ] * predictTable ['hpa_coef2' ]))
608
+ predictTable ['expectedWait' ] = predictTable ['sum' ].apply (lambda x : np .exp (x ))
609
+ predictTable ['unsafe' ] = predictTable ['hashpower_accepting' ].apply (lambda x : 1 if x < 30 else 0 )
610
+ predictTable .loc [predictTable ['unsafe' ] == 1 , 'expectedWait' ] = 1000
611
+ predictTable ['expectedWait' ] = predictTable ['expectedWait' ].apply (lambda x : x if x >= 2 else 2 )
574
612
predictTable ['expectedTime' ] = predictTable ['expectedWait' ].apply (lambda x : np .round ((x * avg_timemined / 60 ), decimals = 2 ))
575
613
self .predictiondf = predictTable
576
614
@@ -602,7 +640,6 @@ def __init__(self, predictiontable, blockdata, submitted_recent, submmited_remot
602
640
self .array5m = array5m
603
641
self .array30m = array30m
604
642
self .gprecs = None
605
- self .minlow = 1
606
643
self .make_gasprice_report ()
607
644
608
645
@@ -613,7 +650,6 @@ def make_gasprice_report(self):
613
650
speed = self .blockdata .speed
614
651
array5m = self .array5m
615
652
array30m = self .array30m
616
- minlow = self .minlow
617
653
block = self .block
618
654
619
655
if self .submitted_remote .safe :
@@ -626,44 +662,35 @@ def make_gasprice_report(self):
626
662
else :
627
663
average = self .blockdata .avg
628
664
629
- def get_wait (gasprice ):
630
- try :
631
- wait = prediction_table .loc [prediction_table ['gasprice' ]== gasprice , 'expectedTime' ].values [0 ]
632
- except :
633
- wait = 0
634
- wait = round (wait , 1 )
635
- return float (wait )
636
-
637
665
console .info ('safelow: ' + str (safelow ))
638
666
console .info ('avg: ' + str (average ))
639
- if np .isnan (safelow ):
640
- safelow = MAX_GP
641
- if np .isnan (average ):
642
- average = MAX_GP
643
- array30m .append (safelow )
644
- array5m .append (average )
645
667
646
668
gprecs = {}
647
- gprecs ['safeLow' ] = np .percentile (array30m , 50 )
648
- gprecs ['average' ] = np .percentile (array5m , 50 )
649
669
gprecs ['fast' ] = self .blockdata .fast
650
- if np .isnan (gprecs ['fast' ]):
651
- gprecs ['fast' ] = MAX_GP
652
670
gprecs ['fastest' ] = self .blockdata .fastest
653
- if np .isnan (gprecs ['fastest' ]):
654
- gprecs ['fastest' ] = MAX_GP
671
+ if self .submitted_remote .nomine_gp :
672
+ gprecs ['nomine' ] = self .submitted_remote .nomine_gp .astype (float )
673
+ else :
674
+ gprecs ['nomine' ] = self .submitted_remote .nomine_gp
675
+
676
+ for rec in [safelow , average , gprecs ['fast' ], gprecs ['fastest' ]]:
677
+ if np .isnan (rec ):
678
+ rec = MAX_GP
679
+
680
+
681
+ array30m .append (safelow )
682
+ array5m .append (average )
655
683
684
+
685
+ gprecs ['safeLow' ] = np .percentile (array30m , 50 )
686
+ gprecs ['average' ] = np .percentile (array5m , 50 )
687
+
656
688
if (gprecs ['fast' ] < gprecs ['average' ]):
657
689
gprecs ['fast' ] = gprecs ['average' ]
658
690
659
691
if (gprecs ['safeLow' ] > gprecs ['average' ]):
660
692
gprecs ['safeLow' ] = gprecs ['average' ]
661
693
662
- gprecs ['safeLowWait' ] = get_wait (gprecs ['safeLow' ])
663
- gprecs ['avgWait' ] = get_wait (gprecs ['average' ])
664
-
665
- gprecs ['fastWait' ] = get_wait (gprecs ['fast' ])
666
- gprecs ['fastestWait' ] = get_wait (gprecs ['fastest' ])
667
694
gprecs ['block_time' ] = block_time
668
695
gprecs ['blockNum' ] = block
669
696
gprecs ['speed' ] = speed
@@ -677,11 +704,24 @@ def get_wait(gasprice):
677
704
self .array5m = array5m
678
705
self .array30m = array30m
679
706
707
+ def get_wait (self , prediction_table ):
708
+ def lookup (gasprice ):
709
+ try :
710
+ wait = prediction_table .at [prediction_table .index [gasprice ], 'expectedTime' ]
711
+ except Exception as e :
712
+ print (e )
713
+ wait = round (wait , 1 )
714
+ return float (wait )
715
+ self .gprecs ['safeLowWait' ] = lookup (self .gprecs ['safeLow' ])
716
+ self .gprecs ['avgWait' ] = lookup (self .gprecs ['average' ])
717
+ self .gprecs ['fastWait' ] = lookup (self .gprecs ['fast' ])
718
+ self .gprecs ['fastestWait' ] = lookup (self .gprecs ['fastest' ])
680
719
681
720
def write_to_json (self ):
682
721
"""write json data"""
683
722
global exporter
684
723
try :
724
+ print (self .gprecs )
685
725
exporter .write_json ('ethgasAPI' , self .gprecs )
686
726
except Exception as e :
687
727
console .error ("write_to_json: Exception caught: " + str (e ))
0 commit comments