Skip to content

Commit e373a32

Browse files
committed
update
1 parent a753fc3 commit e373a32

File tree

3 files changed

+328
-69
lines changed

3 files changed

+328
-69
lines changed

api.js

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -707,7 +707,7 @@ API.updateOrder = function updateOrder(orderIn, callback) {
707707
order.order.s,
708708
],
709709
(errFilled, resultFilled) => {
710-
if (!errFilled) {
710+
if (!errFilled && resultFilled) {
711711
const amountFilled = resultFilled;
712712
if (amountFilled.lessThan(order.order.amountGet)) {
713713
order.updated = new Date();
@@ -747,6 +747,57 @@ API.updateOrder = function updateOrder(orderIn, callback) {
747747
});
748748
};
749749

750+
/*
751+
sell EDG/ETH, tokenGive: EDG, tokenGet: ETH 0.23
752+
buy: amount +, price: 1/0.23
753+
sell: amount -, price: 0.23
754+
sell EDG/ETH, tokenGive: EDG, tokenGet: ETH 0.20
755+
buy: amount +, price: 1/0.20
756+
sell: amount -, price: 0.20
757+
buy EDG/ETH, tokenGive: ETH, tokenGet: EDG 0.15
758+
buy: amount +, price: 0.15
759+
sell: amount -, price/0.15
760+
buy EDG/ETH, tokenGive: ETH, tokenGet: EDG 0.12
761+
buy: amount +, price: 0.12
762+
sell: amount -, price/0.12
763+
*/
764+
API.getTopOrders = function getTopOrders() {
765+
const buys = {};
766+
const sells = {};
767+
Object.keys(API.ordersCache).forEach((key) => {
768+
const order = API.ordersCache[key];
769+
const keyKind = key.split('_')[1];
770+
const tokenPair = `${order.order.tokenGive}/${order.order.tokenGet}_${keyKind}`;
771+
if (keyKind === 'buy') {
772+
if (!buys[tokenPair]) {
773+
buys[tokenPair] = order;
774+
} else if (Number(order.price) > Number(buys[tokenPair].price)) {
775+
buys[tokenPair] = order;
776+
}
777+
} else if (keyKind === 'sell') {
778+
if (!sells[tokenPair]) {
779+
sells[tokenPair] = order;
780+
} else if (Number(order.price) < Number(sells[tokenPair].price)) {
781+
sells[tokenPair] = order;
782+
}
783+
}
784+
});
785+
const orders = Object.values(buys).concat(Object.values(sells));
786+
return orders;
787+
};
788+
789+
API.getOrdersByPair = function getOrdersByPair(tokenA, tokenB) {
790+
const orders = [];
791+
Object.keys(API.ordersCache).forEach((key) => {
792+
const order = API.ordersCache[key];
793+
if ((order.order.tokenGive === tokenA && order.order.tokenGet === tokenB)
794+
|| (order.order.tokenGive === tokenB && order.order.tokenGet === tokenA)) {
795+
orders.push(order);
796+
}
797+
});
798+
return orders;
799+
};
800+
750801
API.getOrdersRemote = function getOrdersRemote(callback) {
751802
utility.getURL(`${this.config.apiServer}/orders`, (err, result) => {
752803
if (!err) {

js/bundle.js

Lines changed: 138 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1506,7 +1506,8 @@ function EtherDelta() {
15061506
this.secondsPerBlock = 14;
15071507
this.usersWithOrdersToUpdate = {};
15081508
this.apiServerNonce = undefined;
1509-
this.ordersResult = { orders: [], blockNumber: 0 };
1509+
this.ordersResultByPair = { orders: [], blockNumber: 0 };
1510+
this.topOrdersResult = { orders: [], blockNumber: 0 };
15101511
this.selectedContract = undefined;
15111512
this.web3 = undefined;
15121513
this.startEtherDelta();
@@ -2461,6 +2462,88 @@ EtherDelta.prototype.getOrders = function getOrders(callback) {
24612462
}
24622463
});
24632464
};
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+
};
24642547
EtherDelta.prototype.displayOrderbook = function displayOrderbook(ordersIn, blockNumber, callback) {
24652548
// only look at orders for the selected token and base
24662549
let orders = ordersIn.filter(
@@ -3343,7 +3426,7 @@ EtherDelta.prototype.selectToken = function selectToken(addrOrToken, name, decim
33433426
const token = this.getToken(addrOrToken, name, decimals);
33443427
if (token) {
33453428
this.selectedToken = token;
3346-
this.ordersResult = { orders: [], blockNumber: 0 };
3429+
this.ordersResultByPair = { orders: [], blockNumber: 0 };
33473430
this.loading(() => {});
33483431
this.refresh(() => {}, true, true, this.selectedToken, this.selectedBase);
33493432
ga('send', {
@@ -3358,7 +3441,7 @@ EtherDelta.prototype.selectBase = function selectBase(addrOrToken, name, decimal
33583441
const base = this.getToken(addrOrToken, name, decimals);
33593442
if (base) {
33603443
this.selectedBase = base;
3361-
this.ordersResult = { orders: [], blockNumber: 0 };
3444+
this.ordersResultByPair = { orders: [], blockNumber: 0 };
33623445
this.loading(() => {});
33633446
this.refresh(() => {}, true, true, this.selectedToken, this.selectedBase);
33643447
ga('send', {
@@ -3375,7 +3458,7 @@ EtherDelta.prototype.selectTokenAndBase = function selectTokenAndBase(tokenAddr,
33753458
if (token && base) {
33763459
this.selectedToken = token;
33773460
this.selectedBase = base;
3378-
this.ordersResult = { orders: [], blockNumber: 0 };
3461+
this.ordersResultByPair = { orders: [], blockNumber: 0 };
33793462
this.loading(() => {});
33803463
this.refresh(() => {}, true, true, this.selectedToken, this.selectedBase);
33813464
ga('send', {
@@ -3559,38 +3642,59 @@ EtherDelta.prototype.refresh = function refresh(callback, forceEventRead, initMa
35593642
});
35603643
},
35613644
(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, () => {
35753685
callbackParallel2(null, undefined);
35763686
});
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+
});
35943698
}],
35953699
() => {
35963700
callbackSeries(null, undefined);

0 commit comments

Comments
 (0)