@@ -1506,7 +1506,8 @@ function EtherDelta() {
1506
1506
this.secondsPerBlock = 14;
1507
1507
this.usersWithOrdersToUpdate = {};
1508
1508
this.apiServerNonce = undefined;
1509
- this.ordersResult = { orders: [], blockNumber: 0 };
1509
+ this.ordersResultByPair = { orders: [], blockNumber: 0 };
1510
+ this.topOrdersResult = { orders: [], blockNumber: 0 };
1510
1511
this.selectedContract = undefined;
1511
1512
this.web3 = undefined;
1512
1513
this.startEtherDelta();
@@ -2461,6 +2462,88 @@ EtherDelta.prototype.getOrders = function getOrders(callback) {
2461
2462
}
2462
2463
});
2463
2464
};
2465
+ EtherDelta.prototype.getOrdersByPair = function getOrdersByPair(tokenA, tokenB, callback) {
2466
+ utility.getURL(`${this.config.apiServer}/orders/${this.apiServerNonce}/${tokenA}/${tokenB}`, (err, result) => {
2467
+ if (!err) {
2468
+ try {
2469
+ const res = JSON.parse(result);
2470
+ const blockNumber = res.blockNumber;
2471
+ let orders;
2472
+ if (Array.isArray(res.orders)) {
2473
+ orders = res.orders;
2474
+ } else {
2475
+ orders = Object.values(res.orders);
2476
+ }
2477
+ orders.forEach((x) => {
2478
+ Object.assign(x, {
2479
+ price: new BigNumber(x.price),
2480
+ // amount: new BigNumber(x.amount),
2481
+ // availableVolume: new BigNumber(x.availableVolume),
2482
+ // ethAvailableVolume: x.ethAvailableVolume,
2483
+ order: Object.assign(x.order, {
2484
+ amountGet: new BigNumber(x.order.amountGet),
2485
+ amountGive: new BigNumber(x.order.amountGive),
2486
+ expires: Number(x.order.expires),
2487
+ nonce: Number(x.order.nonce),
2488
+ tokenGet: x.order.tokenGet,
2489
+ tokenGive: x.order.tokenGive,
2490
+ user: x.order.user,
2491
+ r: x.order.r,
2492
+ s: x.order.s,
2493
+ v: x.order.v ? Number(x.order.v) : undefined,
2494
+ }),
2495
+ });
2496
+ });
2497
+ callback(null, { orders, blockNumber });
2498
+ } catch (errCatch) {
2499
+ callback(err, undefined);
2500
+ }
2501
+ } else {
2502
+ callback(err, undefined);
2503
+ }
2504
+ });
2505
+ };
2506
+ EtherDelta.prototype.getTopOrders = function getTopOrders(callback) {
2507
+ utility.getURL(`${this.config.apiServer}/topOrders/${this.apiServerNonce}`, (err, result) => {
2508
+ if (!err) {
2509
+ try {
2510
+ const res = JSON.parse(result);
2511
+ const blockNumber = res.blockNumber;
2512
+ let orders;
2513
+ if (Array.isArray(res.orders)) {
2514
+ orders = res.orders;
2515
+ } else {
2516
+ orders = Object.values(res.orders);
2517
+ }
2518
+ orders.forEach((x) => {
2519
+ Object.assign(x, {
2520
+ price: new BigNumber(x.price),
2521
+ // amount: new BigNumber(x.amount),
2522
+ // availableVolume: new BigNumber(x.availableVolume),
2523
+ // ethAvailableVolume: x.ethAvailableVolume,
2524
+ order: Object.assign(x.order, {
2525
+ amountGet: new BigNumber(x.order.amountGet),
2526
+ amountGive: new BigNumber(x.order.amountGive),
2527
+ expires: Number(x.order.expires),
2528
+ nonce: Number(x.order.nonce),
2529
+ tokenGet: x.order.tokenGet,
2530
+ tokenGive: x.order.tokenGive,
2531
+ user: x.order.user,
2532
+ r: x.order.r,
2533
+ s: x.order.s,
2534
+ v: x.order.v ? Number(x.order.v) : undefined,
2535
+ }),
2536
+ });
2537
+ });
2538
+ callback(null, { orders, blockNumber });
2539
+ } catch (errCatch) {
2540
+ callback(err, undefined);
2541
+ }
2542
+ } else {
2543
+ callback(err, undefined);
2544
+ }
2545
+ });
2546
+ };
2464
2547
EtherDelta.prototype.displayOrderbook = function displayOrderbook(ordersIn, blockNumber, callback) {
2465
2548
// only look at orders for the selected token and base
2466
2549
let orders = ordersIn.filter(
@@ -3343,7 +3426,7 @@ EtherDelta.prototype.selectToken = function selectToken(addrOrToken, name, decim
3343
3426
const token = this.getToken(addrOrToken, name, decimals);
3344
3427
if (token) {
3345
3428
this.selectedToken = token;
3346
- this.ordersResult = { orders: [], blockNumber: 0 };
3429
+ this.ordersResultByPair = { orders: [], blockNumber: 0 };
3347
3430
this.loading(() => {});
3348
3431
this.refresh(() => {}, true, true, this.selectedToken, this.selectedBase);
3349
3432
ga('send', {
@@ -3358,7 +3441,7 @@ EtherDelta.prototype.selectBase = function selectBase(addrOrToken, name, decimal
3358
3441
const base = this.getToken(addrOrToken, name, decimals);
3359
3442
if (base) {
3360
3443
this.selectedBase = base;
3361
- this.ordersResult = { orders: [], blockNumber: 0 };
3444
+ this.ordersResultByPair = { orders: [], blockNumber: 0 };
3362
3445
this.loading(() => {});
3363
3446
this.refresh(() => {}, true, true, this.selectedToken, this.selectedBase);
3364
3447
ga('send', {
@@ -3375,7 +3458,7 @@ EtherDelta.prototype.selectTokenAndBase = function selectTokenAndBase(tokenAddr,
3375
3458
if (token && base) {
3376
3459
this.selectedToken = token;
3377
3460
this.selectedBase = base;
3378
- this.ordersResult = { orders: [], blockNumber: 0 };
3461
+ this.ordersResultByPair = { orders: [], blockNumber: 0 };
3379
3462
this.loading(() => {});
3380
3463
this.refresh(() => {}, true, true, this.selectedToken, this.selectedBase);
3381
3464
ga('send', {
@@ -3559,38 +3642,59 @@ EtherDelta.prototype.refresh = function refresh(callback, forceEventRead, initMa
3559
3642
});
3560
3643
},
3561
3644
(callbackParallel) => {
3562
- this.getOrders((err, result) => {
3563
- if (!err && result) {
3564
- this.ordersResult = result;
3565
- } else {
3566
- console.log('Order book has not changed since last refresh.');
3567
- }
3568
- async.parallel(
3569
- [
3570
- (callbackParallel2) => {
3571
- this.displayMyTransactions(
3572
- this.ordersResult.orders,
3573
- this.ordersResult.blockNumber,
3574
- () => {
3645
+ async.parallel(
3646
+ [
3647
+ (callbackParallel2) => {
3648
+ this.getTopOrders((err, result) => {
3649
+ if (!err && result) {
3650
+ this.topOrdersResult = result;
3651
+ } else {
3652
+ console.log('Top levels have not changed since last refresh.');
3653
+ }
3654
+ callbackParallel2(null, undefined);
3655
+ });
3656
+ },
3657
+ (callbackParallel2) => {
3658
+ this.getOrdersByPair(
3659
+ this.selectedToken.addr,
3660
+ this.selectedBase.addr,
3661
+ (err, result) => {
3662
+ if (!err && result) {
3663
+ this.ordersResultByPair = result;
3664
+ } else {
3665
+ console.log('Order book has not changed since last refresh.');
3666
+ }
3667
+ callbackParallel2(null, undefined);
3668
+ });
3669
+ },
3670
+ ],
3671
+ () => {
3672
+ async.parallel(
3673
+ [
3674
+ (callbackParallel2) => {
3675
+ this.displayMyTransactions(
3676
+ this.ordersResultByPair.orders,
3677
+ this.ordersResultByPair.blockNumber,
3678
+ () => {
3679
+ callbackParallel2(null, undefined);
3680
+ });
3681
+ },
3682
+ (callbackParallel2) => {
3683
+ this.displayOrderbook(this.ordersResultByPair.orders,
3684
+ this.ordersResultByPair.blockNumber, () => {
3575
3685
callbackParallel2(null, undefined);
3576
3686
});
3577
- },
3578
- (callbackParallel2) => {
3579
- this.displayOrderbook(this.ordersResult.orders,
3580
- this.ordersResult.blockNumber, () => {
3581
- callbackParallel2(null, undefined);
3582
- });
3583
- },
3584
- (callbackParallel2) => {
3585
- this.displayVolumes(this.ordersResult.orders,
3586
- this.ordersResult.blockNumber, () => {
3587
- callbackParallel2(null, undefined);
3588
- });
3589
- }],
3590
- () => {
3591
- callbackParallel(null, undefined);
3592
- });
3593
- });
3687
+ },
3688
+ (callbackParallel2) => {
3689
+ this.displayVolumes(this.topOrdersResult.orders,
3690
+ this.topOrdersResult.blockNumber, () => {
3691
+ callbackParallel2(null, undefined);
3692
+ });
3693
+ }],
3694
+ () => {
3695
+ callbackParallel(null, undefined);
3696
+ });
3697
+ });
3594
3698
}],
3595
3699
() => {
3596
3700
callbackSeries(null, undefined);
0 commit comments