Skip to content

Commit 45712f1

Browse files
committed
exchange: use same sequence for both buy/sell orders (so they can be ordered by time)
1 parent be9ac72 commit 45712f1

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

contracts/Exchange.sol

+9-8
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,9 @@ contract Exchange {
2929
uint amount;
3030
}
3131

32-
Order[] public buyTokenOrders;
33-
Order[] public sellTokenOrders;
32+
uint64 public orderCount;
33+
mapping(uint64 => Order) public buyTokenOrders;
34+
mapping(uint64 => Order) public sellTokenOrders;
3435

3536
uint64[] private activeBuyOrders;
3637
uint64[] private activeSellOrders;
@@ -55,8 +56,8 @@ contract Exchange {
5556
require(price > 0);
5657
require(msg.value > 0);
5758

58-
uint64 index = uint64(activeBuyOrders.length);
59-
orderId = uint64(buyTokenOrders.push(Order(index, msg.sender, price, msg.value)) - 1);
59+
orderId = ++orderCount;
60+
buyTokenOrders[orderId] = Order(uint64(activeBuyOrders.length), msg.sender, price, msg.value);
6061
activeBuyOrders.push(orderId);
6162

6263
NewOrder(orderId, msg.sender, price, 0, msg.value);
@@ -123,15 +124,15 @@ contract Exchange {
123124
// orders are encoded as [id, maker, price, amount]
124125
function getActiveBuyOrders(uint offset) external view returns (uint[4][CHUNK_SIZE] response) {
125126
for (uint8 i = 0; i < CHUNK_SIZE && i + offset < activeBuyOrders.length; i++) {
126-
uint orderId = activeBuyOrders[offset + i];
127+
uint64 orderId = activeBuyOrders[offset + i];
127128
Order storage order = buyTokenOrders[orderId];
128129
response[i] = [orderId, uint(order.maker), order.price, order.amount];
129130
}
130131
}
131132

132133
function getActiveSellOrders(uint offset) external view returns (uint[4][CHUNK_SIZE] response) {
133134
for (uint8 i = 0; i < CHUNK_SIZE && i + offset < activeSellOrders.length; i++) {
134-
uint orderId = activeSellOrders[offset + i];
135+
uint64 orderId = activeSellOrders[offset + i];
135136
Order storage order = sellTokenOrders[orderId];
136137
response[i] = [orderId, uint(order.maker), order.price, order.amount];
137138
}
@@ -192,8 +193,8 @@ contract Exchange {
192193
require(price > 0);
193194
require(tokenAmount > 0);
194195

195-
uint64 index = uint64(activeSellOrders.length);
196-
orderId = uint64(sellTokenOrders.push(Order(index, maker, price, tokenAmount)) - 1);
196+
orderId = ++orderCount;
197+
sellTokenOrders[orderId] = Order(uint64(activeSellOrders.length), maker, price, tokenAmount);
197198
activeSellOrders.push(orderId);
198199

199200
NewOrder(orderId, maker, price, tokenAmount, 0);

0 commit comments

Comments
 (0)