@@ -3880,6 +3880,10 @@ export class Client {
38803880 orderIDs : string [ ] ,
38813881 marketName : string
38823882 ) : Promise < CancelledOrder [ ] > {
3883+ if ( orderIDs . length === 0 ) {
3884+ return [ ]
3885+ }
3886+
38833887 const [ a , b ] = marketName . split ( '_' )
38843888 await this . prefillRPoolIfNeededForAssets (
38853889 a as CryptoCurrency ,
@@ -3894,10 +3898,8 @@ export class Client {
38943898 } )
38953899 )
38963900
3897- const names = [ 'A' , 'B' , 'C' , 'D' , 'E' , 'F' ] . slice (
3898- 0 ,
3899- cancelOrdersPayloads . length
3900- )
3901+ const names = this . generateNames ( cancelOrdersPayloads . length )
3902+
39013903 const params = names
39023904 . map ( name => `$p${ name } :CancelOrderParams!, $s${ name } :Signature!` )
39033905 . join ( ',' )
@@ -3927,17 +3929,19 @@ export class Client {
39273929 public async placeLimitOrders (
39283930 params : PlaceLimitOrderParams [ ]
39293931 ) : Promise < OrdersPlaced > {
3932+ if ( params . length === 0 ) {
3933+ return {
3934+ orders : [ ]
3935+ }
3936+ }
39303937 await this . prefillRPoolIfNeededForAssets (
39313938 params [ 0 ] . limitPrice . currencyA ,
39323939 params [ 0 ] . limitPrice . currencyB
39333940 )
39343941
39353942 const placeLimitOrderPayloads = await this . generatePlaceOrdersParams ( params )
3943+ const names = this . generateNames ( placeLimitOrderPayloads . length )
39363944
3937- const names = [ 'A' , 'B' , 'C' , 'D' , 'E' , 'F' ] . slice (
3938- 0 ,
3939- placeLimitOrderPayloads . length
3940- )
39413945 const paramNames = names
39423946 . map ( name => `$p${ name } :PlaceLimitOrderParams!, $s${ name } :Signature!` )
39433947 . join ( ',' )
@@ -3971,48 +3975,16 @@ export class Client {
39713975 ) as OrderPlaced [ ]
39723976 }
39733977 } catch ( e ) {
3978+ if ( e . message . includes ( MISSING_NONCES ) ) {
3979+ await this . updateTradedAssetNonces ( )
3980+ }
39743981 return {
39753982 error : e ,
39763983 orders : [ ]
39773984 }
39783985 }
39793986 }
39803987
3981- private generatePlaceOrdersParams = async (
3982- params : PlaceLimitOrderParams [ ]
3983- ) : Promise < PayloadSignature [ ] > => {
3984- return await Promise . all (
3985- params . map ( async param => {
3986- const { nonceOrder, noncesFrom, noncesTo } = this . getNoncesForTrade (
3987- param . marketName ,
3988- param . buyOrSell
3989- )
3990- const normalizedAmount = normalizeAmountForMarket (
3991- param . amount ,
3992- this . marketData [ param . marketName ]
3993- )
3994- const normalizedLimitPrice = normalizePriceForMarket (
3995- param . limitPrice ,
3996- this . marketData [ param . marketName ]
3997- )
3998- const placeLimitOrderParams = createPlaceLimitOrderParams (
3999- param . allowTaker ,
4000- normalizedAmount ,
4001- param . buyOrSell ,
4002- param . cancellationPolicy ,
4003- normalizedLimitPrice ,
4004- param . marketName ,
4005- noncesFrom ,
4006- noncesTo ,
4007- nonceOrder ,
4008- param . cancelAt
4009- )
4010- const signedPayload = await this . signPayload ( placeLimitOrderParams )
4011- return signedPayload
4012- } )
4013- )
4014- }
4015-
40163988 /**
40173989 * Cancel a list of orders by ID.
40183990 *
@@ -4046,8 +4018,7 @@ export class Client {
40464018
40474019 const placeLimitOrderPayloads = await this . generatePlaceOrdersParams ( orders )
40484020
4049- const allNames = [ 'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'I' , 'J' , 'K' ]
4050- const cancelNames = allNames . slice ( 0 , cancelOrdersPayloads . length )
4021+ const cancelNames = this . generateNames ( cancelOrdersPayloads . length )
40514022 const cancelParams = cancelNames
40524023 . map ( name => `$p${ name } :CancelOrderParams!, $s${ name } :Signature!` )
40534024 . join ( ',' )
@@ -4058,10 +4029,11 @@ export class Client {
40584029 )
40594030 . join ( '\n' )
40604031
4061- const placeNames = allNames . slice (
4062- cancelOrdersPayloads . length ,
4063- cancelOrdersPayloads . length + orders . length
4032+ const placeNames = this . generateNames (
4033+ orders . length ,
4034+ cancelOrdersPayloads . length
40644035 )
4036+
40654037 const placeOrderParams = placeNames
40664038 . map ( name => `$p${ name } :PlaceLimitOrderParams!, $s${ name } :Signature!` )
40674039 . join ( ',' )
@@ -4107,11 +4079,73 @@ export class Client {
41074079 . map ( k => result . data [ k ] ) as CancelledOrder [ ]
41084080 }
41094081 } catch ( e ) {
4082+ if ( e . message . includes ( MISSING_NONCES ) ) {
4083+ await this . updateTradedAssetNonces ( )
4084+ }
41104085 return {
41114086 error : e ,
41124087 orders : [ ] ,
41134088 cancelled : [ ]
41144089 }
41154090 }
41164091 }
4092+
4093+ private generatePlaceOrdersParams = async (
4094+ params : PlaceLimitOrderParams [ ]
4095+ ) : Promise < PayloadSignature [ ] > => {
4096+ return await Promise . all (
4097+ params . map ( async param => {
4098+ const { nonceOrder, noncesFrom, noncesTo } = this . getNoncesForTrade (
4099+ param . marketName ,
4100+ param . buyOrSell
4101+ )
4102+ const normalizedAmount = normalizeAmountForMarket (
4103+ param . amount ,
4104+ this . marketData [ param . marketName ]
4105+ )
4106+ const normalizedLimitPrice = normalizePriceForMarket (
4107+ param . limitPrice ,
4108+ this . marketData [ param . marketName ]
4109+ )
4110+ const placeLimitOrderParams = createPlaceLimitOrderParams (
4111+ param . allowTaker ,
4112+ normalizedAmount ,
4113+ param . buyOrSell ,
4114+ param . cancellationPolicy ,
4115+ normalizedLimitPrice ,
4116+ param . marketName ,
4117+ noncesFrom ,
4118+ noncesTo ,
4119+ nonceOrder ,
4120+ param . cancelAt
4121+ )
4122+ const signedPayload = await this . signPayload ( placeLimitOrderParams )
4123+ return signedPayload
4124+ } )
4125+ )
4126+ }
4127+
4128+ private generateNames = ( total : number , offset : number = 0 ) : string [ ] => {
4129+ const names = [
4130+ 'A' ,
4131+ 'B' ,
4132+ 'C' ,
4133+ 'D' ,
4134+ 'E' ,
4135+ 'F' ,
4136+ 'G' ,
4137+ 'H' ,
4138+ 'I' ,
4139+ 'J' ,
4140+ 'K' ,
4141+ 'L' ,
4142+ 'M' ,
4143+ 'N' ,
4144+ 'O' ,
4145+ 'P' ,
4146+ 'Q'
4147+ ]
4148+
4149+ return names . slice ( offset , offset + total )
4150+ }
41174151}
0 commit comments