@@ -31,7 +31,7 @@ import {
31
31
CurrencyMenuItem ,
32
32
} from './types'
33
33
import {
34
- API_NAME ,
34
+ SWAP_API ,
35
35
GWEI_DECIMALS ,
36
36
COIN_DECIMALS ,
37
37
API_GAS_LIMITS ,
@@ -192,6 +192,7 @@ class QuickSwap extends PureComponent<IUniversalObj, ComponentState> {
192
192
gasLimit : '' ,
193
193
blockReason : undefined ,
194
194
serviceFee : false ,
195
+ zeroxApiKey : window . zeroxApiKey || '' ,
195
196
}
196
197
}
197
198
@@ -314,7 +315,7 @@ class QuickSwap extends PureComponent<IUniversalObj, ComponentState> {
314
315
const { coin, blockchain } = getCoinInfo ( currency . value )
315
316
const network = externalConfig . evmNetworks [ blockchain || coin ]
316
317
317
- return ! ! API_NAME [ network ?. networkVersion ]
318
+ return ! ! SWAP_API [ network ?. networkVersion ]
318
319
} )
319
320
}
320
321
@@ -346,7 +347,7 @@ class QuickSwap extends PureComponent<IUniversalObj, ComponentState> {
346
347
347
348
const feeOptsKey = fromWallet ?. standard || fromWallet ?. currency
348
349
const currentFeeOpts = externalConfig . opts . fee [ feeOptsKey ?. toLowerCase ( ) ]
349
- const correctFeeRepresentation = ! Number . isNaN ( window ?. zeroxFeePercent )
350
+ const correctFeeRepresentation = ! Number . isNaN ( window ?. zeroxFeePercent )
350
351
&& window . zeroxFeePercent >= 0
351
352
&& window . zeroxFeePercent <= 100
352
353
@@ -502,8 +503,8 @@ class QuickSwap extends PureComponent<IUniversalObj, ComponentState> {
502
503
} ) )
503
504
}
504
505
505
- createSwapRequest = ( skipValidation = false ) => {
506
- const { slippage, spendedAmount, fromWallet, toWallet, serviceFee } = this . state
506
+ buildSwapParams = ( route : '/price' | '/quote' , skipValidation = false ) => {
507
+ const { slippage, spendedAmount, fromWallet, toWallet, serviceFee, zeroxApiKey } = this . state
507
508
508
509
const sellToken = fromWallet ?. contractAddress || EVM_COIN_ADDRESS
509
510
const buyToken = toWallet ?. contractAddress || EVM_COIN_ADDRESS
@@ -516,7 +517,7 @@ class QuickSwap extends PureComponent<IUniversalObj, ComponentState> {
516
517
const enoughBalanceForSwap = new BigNumber ( fromWallet . balance ) . isGreaterThan ( new BigNumber ( spendedAmount ) )
517
518
518
519
const request = [
519
- `/swap/v1/quote ?` ,
520
+ `/swap/v1${ route } ?` ,
520
521
`buyToken=${ buyToken } &` ,
521
522
`sellToken=${ sellToken } &` ,
522
523
`sellAmount=${ sellAmount } ` ,
@@ -531,7 +532,6 @@ class QuickSwap extends PureComponent<IUniversalObj, ComponentState> {
531
532
532
533
if ( serviceFee ) {
533
534
const { address, percent } = serviceFee
534
-
535
535
request . push ( `&feeRecipient=${ address } ` )
536
536
request . push ( `&buyTokenPercentageFee=${ percent } ` )
537
537
}
@@ -544,11 +544,13 @@ class QuickSwap extends PureComponent<IUniversalObj, ComponentState> {
544
544
// allow users to enter an amount up to 100, because it's more easy then enter the amount from 0 to 1
545
545
// and now convert it into the api format
546
546
const correctValue = new BigNumber ( slippage ) . dividedBy ( MAX_PERCENT )
547
-
548
547
request . push ( `&slippagePercentage=${ correctValue } ` )
549
548
}
550
549
551
- return request . join ( '' )
550
+ return {
551
+ headers : { '0x-api-key' : zeroxApiKey } ,
552
+ endpoint : request . join ( '' ) ,
553
+ }
552
554
}
553
555
554
556
onInputDataChange = async ( ) => {
@@ -640,7 +642,11 @@ class QuickSwap extends PureComponent<IUniversalObj, ComponentState> {
640
642
}
641
643
642
644
fetchSwapAPIData = async ( ) => {
643
- const { network, spendedAmount, isPending } = this . state
645
+ const { isSourceMode, network, spendedAmount, isPending, zeroxApiKey } = this . state
646
+
647
+ if ( ! isSourceMode && ! zeroxApiKey ) {
648
+ return console . log ( '%c0x API key is not set' , 'color:red' )
649
+ }
644
650
645
651
const dontFetch = (
646
652
new BigNumber ( spendedAmount ) . isNaN ( )
@@ -656,31 +662,37 @@ class QuickSwap extends PureComponent<IUniversalObj, ComponentState> {
656
662
} ) )
657
663
658
664
let repeatRequest = true
659
- let swapRequest = this . createSwapRequest ( )
665
+ // TODO Send basic requests to /price to avoid exceeding API limits
666
+ const params = this . buildSwapParams ( '/quote' )
667
+ let { headers, endpoint } = params
660
668
661
669
while ( repeatRequest ) {
662
- const swap : any = await apiLooper . get ( API_NAME [ network . networkVersion ] , swapRequest , {
663
- reportErrors : ( error ) => {
670
+ const swap : any = await apiLooper . get ( SWAP_API [ network . networkVersion ] . name , endpoint , {
671
+ headers,
672
+ sourceError : true ,
673
+ reportErrors : ( error : IError ) => {
664
674
if ( ! repeatRequest ) {
665
675
this . reportError ( error )
666
676
}
667
677
} ,
668
- sourceError : true ,
669
678
} )
670
679
680
+ console . table ( swap )
681
+
671
682
if ( ! ( swap instanceof Error ) ) {
672
683
repeatRequest = false
673
684
674
685
await this . calculateDataFromSwap ( {
675
686
swap,
676
- withoutValidation : swapRequest . match ( / s k i p V a l i d a t i o n / ) ,
687
+ withoutValidation : endpoint . match ( / s k i p V a l i d a t i o n / ) ,
677
688
} )
678
689
} else if ( this . tryToSkipValidation ( swap ) ) {
679
690
// it's a special error. Will be a new request
680
- swapRequest = this . createSwapRequest ( true )
691
+ const p = this . buildSwapParams ( '/quote' , true )
692
+ headers = p . headers
693
+ endpoint = p . endpoint
681
694
} else {
682
695
this . reportError ( swap )
683
-
684
696
repeatRequest = false
685
697
}
686
698
}
@@ -828,9 +840,9 @@ class QuickSwap extends PureComponent<IUniversalObj, ComponentState> {
828
840
wallet = toWallet
829
841
}
830
842
831
- const spender = isSourceMode
843
+ const spender : `0x${ number } ` = isSourceMode
832
844
? LIQUIDITY_SOURCE_DATA [ network . networkVersion ] ?. router
833
- : externalConfig . swapContract . zerox
845
+ : externalConfig . swapContract [ SWAP_API [ network . networkVersion ] . spender ]
834
846
835
847
if ( ! wallet . isToken ) {
836
848
this . setNeedApprove ( direction , false )
0 commit comments