aboutsummaryrefslogtreecommitdiffstats
path: root/packages
diff options
context:
space:
mode:
Diffstat (limited to 'packages')
-rw-r--r--packages/contracts/contracts/extensions/DutchAuction/DutchAuction.sol4
-rw-r--r--packages/contracts/test/extensions/dutch_auction.ts51
-rw-r--r--packages/types/CHANGELOG.json4
-rw-r--r--packages/types/src/index.ts6
4 files changed, 51 insertions, 14 deletions
diff --git a/packages/contracts/contracts/extensions/DutchAuction/DutchAuction.sol b/packages/contracts/contracts/extensions/DutchAuction/DutchAuction.sol
index 60077746d..9b8fec54a 100644
--- a/packages/contracts/contracts/extensions/DutchAuction/DutchAuction.sol
+++ b/packages/contracts/contracts/extensions/DutchAuction/DutchAuction.sol
@@ -154,9 +154,9 @@ contract DutchAuction is
// | Params | | 2 * 32 | parameters: |
// | | -64 | 32 | 1. auction begin unix timestamp |
// | | -32 | 32 | 2. auction begin begin amount |
- // ERC20 asset data length is 4+32, 64 for auction details results in min length if 100
+ // ERC20 asset data length is 4+32, 64 for auction details results in min length 100
require(
- makerAssetDataLength > 10,
+ makerAssetDataLength >= 100,
"INVALID_ASSET_DATA"
);
uint256 auctionBeginTimeSeconds = order.makerAssetData.readUint256(makerAssetDataLength - 64);
diff --git a/packages/contracts/test/extensions/dutch_auction.ts b/packages/contracts/test/extensions/dutch_auction.ts
index b3408e27d..c133d8c60 100644
--- a/packages/contracts/test/extensions/dutch_auction.ts
+++ b/packages/contracts/test/extensions/dutch_auction.ts
@@ -1,6 +1,6 @@
import { BlockchainLifecycle } from '@0x/dev-utils';
import { assetDataUtils, generatePseudoRandomSalt } from '@0x/order-utils';
-import { SignedOrder } from '@0x/types';
+import { RevertReason, SignedOrder } from '@0x/types';
import { BigNumber } from '@0x/utils';
import { Web3Wrapper } from '@0x/web3-wrapper';
import * as chai from 'chai';
@@ -268,7 +268,7 @@ describe(ContractName.DutchAuction, () => {
erc20Balances[makerAddress][wethContract.address].plus(afterAuctionDetails.currentAmount),
);
expect(newBalances[takerAddress][wethContract.address]).to.be.bignumber.gte(
- erc20Balances[takerAddress][wethContract.address].minus(afterAuctionDetails.currentAmount),
+ erc20Balances[takerAddress][wethContract.address].minus(beforeAuctionDetails.currentAmount),
);
});
it('should have valid getAuctionDetails at some block in the future', async () => {
@@ -346,9 +346,15 @@ describe(ContractName.DutchAuction, () => {
);
});
it('should revert when auction expires', async () => {
- auctionEndTimeSeconds = new BigNumber(currentBlockTimestamp - 100);
+ auctionBeginTimeSeconds = new BigNumber(currentBlockTimestamp - tenMinutesInSeconds * 2);
+ auctionEndTimeSeconds = new BigNumber(currentBlockTimestamp - tenMinutesInSeconds);
sellOrder = await sellerOrderFactory.newSignedOrderAsync({
expirationTimeSeconds: auctionEndTimeSeconds,
+ makerAssetData: extendMakerAssetData(
+ assetDataUtils.encodeERC20AssetData(defaultMakerAssetAddress),
+ auctionBeginTimeSeconds,
+ auctionBeginAmount,
+ ),
});
return expectTransactionFailedAsync(
dutchAuctionContract.matchOrders.sendTransactionAsync(
@@ -360,7 +366,7 @@ describe(ContractName.DutchAuction, () => {
from: takerAddress,
},
),
- 'AUCTION_EXPIRED' as any,
+ RevertReason.AuctionExpired,
);
});
it('cannot be filled for less than the current price', async () => {
@@ -378,14 +384,35 @@ describe(ContractName.DutchAuction, () => {
from: takerAddress,
},
),
- 'INVALID_AMOUNT' as any,
+ RevertReason.AuctionInvalidAmount,
+ );
+ });
+ it('auction begin amount must be higher than final amount ', async () => {
+ sellOrder = await sellerOrderFactory.newSignedOrderAsync({
+ takerAssetAmount: auctionBeginAmount.plus(1),
+ });
+ return expectTransactionFailedAsync(
+ dutchAuctionContract.matchOrders.sendTransactionAsync(
+ buyOrder,
+ sellOrder,
+ buyOrder.signature,
+ sellOrder.signature,
+ {
+ from: takerAddress,
+ },
+ ),
+ RevertReason.AuctionInvalidAmount,
);
});
- it('cannot match an expired auction', async () => {
- auctionBeginTimeSeconds = new BigNumber(currentBlockTimestamp - 1000);
- auctionEndTimeSeconds = new BigNumber(currentBlockTimestamp - 100);
+ it('begin time is less than end time', async () => {
+ auctionBeginTimeSeconds = new BigNumber(auctionEndTimeSeconds).plus(tenMinutesInSeconds);
sellOrder = await sellerOrderFactory.newSignedOrderAsync({
expirationTimeSeconds: auctionEndTimeSeconds,
+ makerAssetData: extendMakerAssetData(
+ assetDataUtils.encodeERC20AssetData(defaultMakerAssetAddress),
+ auctionBeginTimeSeconds,
+ auctionBeginAmount,
+ ),
});
return expectTransactionFailedAsync(
dutchAuctionContract.matchOrders.sendTransactionAsync(
@@ -397,12 +424,12 @@ describe(ContractName.DutchAuction, () => {
from: takerAddress,
},
),
- 'AUCTION_EXPIRED' as any,
+ RevertReason.AuctionInvalidBeginTime,
);
});
- it('auction begin amount must be higher than final amount ', async () => {
+ it('asset data contains auction parameters', async () => {
sellOrder = await sellerOrderFactory.newSignedOrderAsync({
- takerAssetAmount: auctionBeginAmount.plus(1),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultMakerAssetAddress),
});
return expectTransactionFailedAsync(
dutchAuctionContract.matchOrders.sendTransactionAsync(
@@ -414,7 +441,7 @@ describe(ContractName.DutchAuction, () => {
from: takerAddress,
},
),
- 'INVALID_AMOUNT' as any,
+ RevertReason.InvalidAssetData,
);
});
describe('ERC721', () => {
diff --git a/packages/types/CHANGELOG.json b/packages/types/CHANGELOG.json
index 53b24aff0..b09859101 100644
--- a/packages/types/CHANGELOG.json
+++ b/packages/types/CHANGELOG.json
@@ -5,6 +5,10 @@
{
"note": "Add `LengthMismatch` and `LengthGreaterThan3Required` revert reasons",
"pr": 1224
+ },
+ {
+ "note": "Add RevertReasons for DutchAuction contract",
+ "pr": 1225
}
]
},
diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts
index 26d8f8e22..6b728af71 100644
--- a/packages/types/src/index.ts
+++ b/packages/types/src/index.ts
@@ -237,6 +237,12 @@ export enum RevertReason {
TxFullyConfirmed = 'TX_FULLY_CONFIRMED',
TxNotFullyConfirmed = 'TX_NOT_FULLY_CONFIRMED',
TimeLockIncomplete = 'TIME_LOCK_INCOMPLETE',
+ // DutchAuction
+ AuctionInvalidAmount = 'INVALID_AMOUNT',
+ AuctionExpired = 'AUCTION_EXPIRED',
+ AuctionNotStarted = 'AUCTION_NOT_STARTED',
+ AuctionInvalidBeginTime = 'INVALID_BEGIN_TIME',
+ InvalidAssetData = 'INVALID_ASSET_DATA',
}
export enum StatusCodes {