@0x/contracts-exchange: Rename marketSellOrders and marketBuyOrders back to marketSellOrdersNoThrow and marketBuyOrdersNoThrow.

`@0x/contracts-exchange`: Introduce new `marketSellOrdersFillOrKill` and `marketBuyOrdersFillOrKill` functions.
`@0x/contracts-exchange`: Add new rich error types: `IncompleteMarketBuyError` and `IncompleteMarketSellError`.
`@0x/contracts-exchange`: Use `abi.decode()` in `LibExchangeRichErrorDecoder` over `LibBytes`.
This commit is contained in:
Lawrence Forman
2019-08-16 16:51:35 -04:00
parent 1698519a6a
commit 96bef08ac2
10 changed files with 964 additions and 537 deletions

View File

@@ -191,13 +191,14 @@ blockchainTests.resets('Exchange wrappers', env => {
it('should revert if entire takerAssetFillAmount not filled', async () => {
const signedOrder = await orderFactory.newSignedOrderAsync();
const takerAssetFillAmount = signedOrder.takerAssetAmount.dividedToIntegerBy(2);
await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, {
takerAssetFillAmount: signedOrder.takerAssetAmount.div(2),
takerAssetFillAmount,
});
const orderHashHex = orderHashUtils.getOrderHashHex(signedOrder);
const expectedError = new ExchangeRevertErrors.IncompleteFillError(orderHashHex);
const expectedError = new ExchangeRevertErrors.IncompleteFillError(takerAssetFillAmount, orderHashHex);
const tx = exchangeWrapper.fillOrKillOrderAsync(signedOrder, takerAddress);
return expect(tx).to.revertWith(expectedError);
});
@@ -771,19 +772,19 @@ blockchainTests.resets('Exchange wrappers', env => {
});
});
describe('marketSellOrders', () => {
describe('marketSellOrdersNoThrow', () => {
it('should stop when the entire takerAssetFillAmount is filled', async () => {
const takerAssetFillAmount = signedOrders[0].takerAssetAmount.plus(
signedOrders[1].takerAssetAmount.div(2),
);
const fillResults = await exchange.marketSellOrders.callAsync(
const fillResults = await exchange.marketSellOrdersNoThrow.callAsync(
signedOrders,
takerAssetFillAmount,
signedOrders.map(signedOrder => signedOrder.signature),
{ from: takerAddress },
);
await exchangeWrapper.marketSellOrdersAsync(signedOrders, takerAddress, {
await exchangeWrapper.marketSellOrdersNoThrowAsync(signedOrders, takerAddress, {
takerAssetFillAmount,
// HACK(albrow): We need to hardcode the gas estimate here because
// the Geth gas estimator doesn't work with the way we use
@@ -852,13 +853,13 @@ blockchainTests.resets('Exchange wrappers', env => {
].plus(signedOrder.makerFee.plus(signedOrder.takerFee));
});
const fillResults = await exchange.marketSellOrders.callAsync(
const fillResults = await exchange.marketSellOrdersNoThrow.callAsync(
signedOrders,
takerAssetFillAmount,
signedOrders.map(signedOrder => signedOrder.signature),
{ from: takerAddress },
);
await exchangeWrapper.marketSellOrdersAsync(signedOrders, takerAddress, {
await exchangeWrapper.marketSellOrdersNoThrowAsync(signedOrders, takerAddress, {
takerAssetFillAmount,
// HACK(albrow): We need to hardcode the gas estimate here because
// the Geth gas estimator doesn't work with the way we use
@@ -926,13 +927,13 @@ blockchainTests.resets('Exchange wrappers', env => {
].plus(signedOrder.makerFee.plus(signedOrder.takerFee));
});
const fillResults = await exchange.marketSellOrders.callAsync(
const fillResults = await exchange.marketSellOrdersNoThrow.callAsync(
signedOrders,
takerAssetFillAmount,
signedOrders.map(signedOrder => signedOrder.signature),
{ from: takerAddress },
);
await exchangeWrapper.marketSellOrdersAsync(signedOrders, takerAddress, {
await exchangeWrapper.marketSellOrdersNoThrowAsync(signedOrders, takerAddress, {
takerAssetFillAmount,
// HACK(albrow): We need to hardcode the gas estimate here because
// the Geth gas estimator doesn't work with the way we use
@@ -967,19 +968,19 @@ blockchainTests.resets('Exchange wrappers', env => {
});
});
describe('marketBuyOrders', () => {
describe('marketBuyOrdersNoThrow', () => {
it('should stop when the entire makerAssetFillAmount is filled', async () => {
const makerAssetFillAmount = signedOrders[0].makerAssetAmount.plus(
signedOrders[1].makerAssetAmount.div(2),
);
const fillResults = await exchange.marketBuyOrders.callAsync(
const fillResults = await exchange.marketBuyOrdersNoThrow.callAsync(
signedOrders,
makerAssetFillAmount,
signedOrders.map(signedOrder => signedOrder.signature),
{ from: takerAddress },
);
await exchangeWrapper.marketBuyOrdersAsync(signedOrders, takerAddress, {
await exchangeWrapper.marketBuyOrdersNoThrowAsync(signedOrders, takerAddress, {
makerAssetFillAmount,
// HACK(albrow): We need to hardcode the gas estimate here because
// the Geth gas estimator doesn't work with the way we use
@@ -1048,13 +1049,13 @@ blockchainTests.resets('Exchange wrappers', env => {
].plus(signedOrder.makerFee.plus(signedOrder.takerFee));
});
const fillResults = await exchange.marketBuyOrders.callAsync(
const fillResults = await exchange.marketBuyOrdersNoThrow.callAsync(
signedOrders,
makerAssetFillAmount,
signedOrders.map(signedOrder => signedOrder.signature),
{ from: takerAddress },
);
await exchangeWrapper.marketBuyOrdersAsync(signedOrders, takerAddress, {
await exchangeWrapper.marketBuyOrdersNoThrowAsync(signedOrders, takerAddress, {
makerAssetFillAmount,
// HACK(albrow): We need to hardcode the gas estimate here because
// the Geth gas estimator doesn't work with the way we use
@@ -1123,13 +1124,13 @@ blockchainTests.resets('Exchange wrappers', env => {
].plus(signedOrder.makerFee.plus(signedOrder.takerFee));
});
const fillResults = await exchange.marketBuyOrders.callAsync(
const fillResults = await exchange.marketBuyOrdersNoThrow.callAsync(
signedOrders,
makerAssetFillAmount,
signedOrders.map(signedOrder => signedOrder.signature),
{ from: takerAddress },
);
await exchangeWrapper.marketBuyOrdersAsync(signedOrders, takerAddress, {
await exchangeWrapper.marketBuyOrdersNoThrowAsync(signedOrders, takerAddress, {
makerAssetFillAmount,
// HACK(albrow): We need to hardcode the gas estimate here because
// the Geth gas estimator doesn't work with the way we use