@@ -573,101 +573,62 @@ public static string JSDateToUnixTimestamp(string dateString)
573
573
574
574
public async static Task < BigInteger > GetLegacyGasPriceAsync ( BigInteger chainId , string clientId = null , string bundleId = null )
575
575
{
576
- var web3 = GetWeb3 ( chainId , clientId , bundleId ) ;
577
- var gasPrice = ( await web3 . Eth . GasPrice . SendRequestAsync ( ) ) . Value ;
578
- return BigInteger . Multiply ( gasPrice , 10 ) / 9 ;
576
+ var client = GetWeb3 ( chainId , clientId , bundleId ) . Client ;
577
+ var hex = new HexBigInteger ( await client . SendRequestAsync < string > ( "eth_gasPrice" ) ) ;
578
+ return BigInteger . Multiply ( hex . Value , 10 ) / 9 ;
579
579
}
580
580
581
581
public async static Task < GasPriceParameters > GetGasPriceAsync ( BigInteger chainId , string clientId = null , string bundleId = null )
582
582
{
583
- BigInteger ? priorityOverride = null ;
584
- if ( chainId == 137 || chainId == 80001 )
585
- {
586
- try
587
- {
588
- return await GetPolygonGasPriceParameters ( ( int ) chainId ) ;
589
- }
590
- catch ( System . Exception e )
591
- {
592
- ThirdwebDebug . LogWarning ( $ "Failed to get gas price from Polygon gas station, using default method: { e . Message } ") ;
593
- priorityOverride = GweiToWei ( chainId == 137 ? 40 : 1 ) ;
594
- }
595
- }
596
-
597
- var web3 = GetWeb3 ( chainId , clientId , bundleId ) ;
598
- var gasPrice = ( await web3 . Eth . GasPrice . SendRequestAsync ( ) ) . Value ;
583
+ var client = GetWeb3 ( chainId , clientId , bundleId ) . Client ;
584
+ var gasPrice = await GetLegacyGasPriceAsync ( chainId , clientId , bundleId ) ;
599
585
600
- if ( chainId == 42220 ) // celo mainnet
586
+ if ( chainId == 137 || chainId == 80001 )
601
587
{
602
- gasPrice = BigInteger . Multiply ( gasPrice , 3 ) / 2 ;
603
- return new GasPriceParameters ( gasPrice , gasPrice ) ;
588
+ return new GasPriceParameters ( gasPrice * 3 / 2 , gasPrice * 4 / 3 ) ;
604
589
}
605
590
606
- if (
607
- chainId == 1 // mainnet
608
- || chainId == 11155111 // sepolia
609
- || chainId == 42161 // arbitrum
610
- || chainId == 421614 // arbitrum sepolia
611
- || chainId == 534352 // scroll
612
- || chainId == 534351 // scroll sepolia
613
- || chainId == 5000 // mantle
614
- || chainId == 22222 // nautilus
615
- || chainId == 8453 // base
616
- || chainId == 53935 // dfk
617
- || chainId == 44787 // celo alfajores
618
- || chainId == 43114 // avalanche
619
- || chainId == 43113 // avalanche fuji
620
- || chainId == 8453 // base
621
- || chainId == 84532 // base sepolia
622
- )
591
+ try
623
592
{
624
- gasPrice = BigInteger . Multiply ( gasPrice , 10 ) / 9 ;
625
- return new GasPriceParameters ( gasPrice , priorityOverride ?? gasPrice ) ;
626
- }
627
-
628
- var maxPriorityFeePerGas = new BigInteger ( 2000000000 ) > gasPrice ? gasPrice : new BigInteger ( 2000000000 ) ;
593
+ if (
594
+ // chainId == 1 // mainnet
595
+ // || chainId == 11155111 // sepolia
596
+ // || chainId == 42161 // arbitrum
597
+ // || chainId == 421614 // arbitrum sepolia
598
+ // || chainId == 534352 // scroll
599
+ // || chainId == 534351 // scroll sepolia
600
+ // || chainId == 5000 // mantle
601
+ // || chainId == 22222 // nautilus
602
+ // || chainId == 8453 // base
603
+ // || chainId == 53935 // dfk
604
+ // || chainId == 43114 // avalanche
605
+ // || chainId == 43113 // avalanche fuji
606
+ // || chainId == 8453 // base
607
+ // || chainId == 84532 // base sepolia
608
+ chainId == 42220 // celo
609
+ || chainId == 44787 // celo-alfajores-testnet
610
+ || chainId == 62320 // celo-baklava-testnet
611
+ )
612
+ {
613
+ return new GasPriceParameters ( gasPrice , gasPrice ) ;
614
+ }
629
615
630
- var feeHistory = await web3 . Eth . FeeHistory . SendRequestAsync ( new Nethereum . Hex . HexTypes . HexBigInteger ( 20 ) , Nethereum . RPC . Eth . DTOs . BlockParameter . CreateLatest ( ) , new double [ ] { 20 } ) ;
616
+ var block = await client . SendRequestAsync < JObject > ( method : "eth_getBlockByNumber" , route : null , paramList : new object [ ] { "latest" , true } ) ;
617
+ var baseBlockFee = block [ "baseFeePerGas" ] ? . ToObject < HexBigInteger > ( ) ;
618
+ var maxFeePerGas = baseBlockFee . Value * 2 ;
619
+ var maxPriorityFeePerGas = ( ( await client . SendRequestAsync < HexBigInteger > ( "eth_maxPriorityFeePerGas" ) ) ? . Value ) ?? maxFeePerGas / 2 ;
631
620
632
- if ( feeHistory . Reward == null )
633
- {
634
- gasPrice = BigInteger . Multiply ( gasPrice , 3 ) / 2 ;
635
- maxPriorityFeePerGas = gasPrice ;
636
- }
637
- else
638
- {
639
- var feeAverage = feeHistory . Reward . Select ( r => r [ 0 ] ) . Aggregate ( BigInteger . Zero , ( acc , cur ) => cur + acc ) / 10 ;
640
- if ( feeAverage > gasPrice )
621
+ if ( maxPriorityFeePerGas > maxFeePerGas )
641
622
{
642
- gasPrice = feeAverage ;
623
+ maxPriorityFeePerGas = maxFeePerGas / 2 ;
643
624
}
644
- maxPriorityFeePerGas = gasPrice ;
645
- }
646
-
647
- return new GasPriceParameters ( gasPrice , priorityOverride ?? maxPriorityFeePerGas ) ;
648
- }
649
625
650
- public async static Task < GasPriceParameters > GetPolygonGasPriceParameters ( int chainId )
651
- {
652
- using var httpClient = new HttpClient ( ) ;
653
- string gasStationUrl ;
654
- switch ( chainId )
626
+ return new GasPriceParameters ( ( maxFeePerGas + maxPriorityFeePerGas ) * 10 / 9 , maxPriorityFeePerGas * 10 / 9 ) ;
627
+ }
628
+ catch
655
629
{
656
- case 137 :
657
- gasStationUrl = "https://gasstation.polygon.technology/v2" ;
658
- break ;
659
- case 80001 :
660
- gasStationUrl = "https://gasstation-testnet.polygon.technology/v2" ;
661
- break ;
662
- default :
663
- throw new UnityException ( "Unsupported chain id" ) ;
630
+ return new GasPriceParameters ( gasPrice , gasPrice ) ;
664
631
}
665
-
666
- var response = await httpClient . GetAsync ( gasStationUrl ) ;
667
- response . EnsureSuccessStatusCode ( ) ;
668
- string responseBody = await response . Content . ReadAsStringAsync ( ) ;
669
- var data = JsonConvert . DeserializeObject < PolygonGasStationResult > ( responseBody ) ;
670
- return new GasPriceParameters ( GweiToWei ( data . fast . maxFee ) , GweiToWei ( data . fast . maxPriorityFee ) ) ;
671
632
}
672
633
673
634
public static BigInteger GweiToWei ( decimal gweiAmount )
0 commit comments