@@ -64,16 +64,18 @@ const SLEEP_TIME_MS = 1000 // 1 second between iterations
64
64
export class GSReaper {
65
65
private log : Logger
66
66
private repo : BaseOrdersRepository < UniswapXOrderEntity >
67
+ private unresolvedOrderStatus : ORDER_STATUS
67
68
private providers : Map < ChainId , ethers . providers . StaticJsonRpcProvider >
68
69
private cursors : Map < ChainId , string | undefined > = new Map ( )
69
70
70
- constructor ( repo : BaseOrdersRepository < UniswapXOrderEntity > ) {
71
+ constructor ( repo : BaseOrdersRepository < UniswapXOrderEntity > , unresolvedOrderStatus : ORDER_STATUS ) {
71
72
this . log = bunyan . createLogger ( {
72
73
name : 'GSReaper' ,
73
74
serializers : bunyan . stdSerializers ,
74
75
level : 'info' ,
75
76
} )
76
77
this . repo = repo
78
+ this . unresolvedOrderStatus = unresolvedOrderStatus
77
79
this . providers = new Map < ChainId , ethers . providers . StaticJsonRpcProvider > ( )
78
80
this . initializeProviders ( )
79
81
}
@@ -130,8 +132,9 @@ export class GSReaper {
130
132
switch ( state . stage ) {
131
133
case ReaperStage . GET_OPEN_ORDERS : {
132
134
this . log . info ( `GET_OPEN_ORDERS for chainId ${ state . chainId } ` )
133
- const { orderHashes, cursor } = await getOpenOrderHashes (
134
- this . repo ,
135
+ const { orderHashes, cursor } = await getUnresolvedOrderHashes (
136
+ this . repo ,
137
+ this . unresolvedOrderStatus ,
135
138
state . chainId ,
136
139
MAX_ORDERS_PER_CHAIN ,
137
140
this . log ,
@@ -384,8 +387,9 @@ async function updateOrders(
384
387
/**
385
388
* Get hashes of open orders from the database, continuing from the provided cursor if present
386
389
*/
387
- async function getOpenOrderHashes (
388
- repo : BaseOrdersRepository < UniswapXOrderEntity > ,
390
+ async function getUnresolvedOrderHashes (
391
+ repo : BaseOrdersRepository < UniswapXOrderEntity > ,
392
+ unresolvedOrderStatus : ORDER_STATUS ,
389
393
chainId : ChainId ,
390
394
maxOrders : number ,
391
395
log : Logger ,
@@ -399,7 +403,7 @@ async function getOpenOrderHashes(
399
403
const openOrders : QueryResult < UniswapXOrderEntity > = await repo . getOrders (
400
404
DYNAMO_BATCH_WRITE_MAX ,
401
405
{
402
- orderStatus : ORDER_STATUS . OPEN ,
406
+ orderStatus : unresolvedOrderStatus ,
403
407
chainId : chainId ,
404
408
} ,
405
409
cursor
@@ -432,7 +436,7 @@ async function getOpenOrderHashes(
432
436
// If cursor is invalid, start from the beginning
433
437
if ( error instanceof Error && error . message . includes ( 'Invalid cursor' ) ) {
434
438
log . info ( `Invalid cursor for chainId ${ chainId } , starting from beginning` )
435
- return getOpenOrderHashes ( repo , chainId , maxOrders , log , undefined )
439
+ return getUnresolvedOrderHashes ( repo , unresolvedOrderStatus , chainId , maxOrders , log , undefined )
436
440
}
437
441
throw error
438
442
}
@@ -482,18 +486,24 @@ async function getOrderFillInfo(
482
486
}
483
487
484
488
async function startReapers ( ) {
485
- const dutchReaper = new GSReaper ( DutchOrdersRepository . create ( new DynamoDB . DocumentClient ( ) ) )
486
- const limitReaper = new GSReaper ( LimitOrdersRepository . create ( new DynamoDB . DocumentClient ( ) ) )
489
+ const dutchOpenOrderReaper = new GSReaper ( DutchOrdersRepository . create ( new DynamoDB . DocumentClient ( ) ) , ORDER_STATUS . OPEN )
490
+ const limitOpenOrderReaper = new GSReaper ( LimitOrdersRepository . create ( new DynamoDB . DocumentClient ( ) ) , ORDER_STATUS . OPEN )
491
+ const dutchInsufficientFundsOrderReaper = new GSReaper ( DutchOrdersRepository . create ( new DynamoDB . DocumentClient ( ) ) , ORDER_STATUS . INSUFFICIENT_FUNDS )
492
+ const limitInsufficientFundsOrderReaper = new GSReaper ( LimitOrdersRepository . create ( new DynamoDB . DocumentClient ( ) ) , ORDER_STATUS . INSUFFICIENT_FUNDS )
493
+ const reapers = [
494
+ dutchOpenOrderReaper ,
495
+ limitOpenOrderReaper ,
496
+ dutchInsufficientFundsOrderReaper ,
497
+ limitInsufficientFundsOrderReaper
498
+ ]
487
499
// eslint-disable-next-line no-constant-condition
488
500
while ( true ) {
489
- await dutchReaper . start ( ) . catch ( error => {
490
- console . error ( 'Fatal error in GS Reaper:' , error )
491
- process . exit ( 1 )
492
- } )
493
- await limitReaper . start ( ) . catch ( error => {
494
- console . error ( 'Fatal error in GS Reaper:' , error )
495
- process . exit ( 1 )
496
- } )
501
+ for ( const reaper of reapers ) {
502
+ await reaper . start ( ) . catch ( error => {
503
+ console . error ( 'Fatal error in GS Reaper:' , error )
504
+ process . exit ( 1 )
505
+ } )
506
+ }
497
507
}
498
508
}
499
509
0 commit comments