aboutsummaryrefslogtreecommitdiffstats
path: root/packages/contracts/src/utils/new_order_factory.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/contracts/src/utils/new_order_factory.ts')
-rw-r--r--packages/contracts/src/utils/new_order_factory.ts69
1 files changed, 64 insertions, 5 deletions
diff --git a/packages/contracts/src/utils/new_order_factory.ts b/packages/contracts/src/utils/new_order_factory.ts
index 715e38d6d..7de7be3bd 100644
--- a/packages/contracts/src/utils/new_order_factory.ts
+++ b/packages/contracts/src/utils/new_order_factory.ts
@@ -12,11 +12,15 @@ import {
FeeRecipientAddressScenario,
OrderAmountScenario,
OrderScenario,
+ TakerScenario,
} from './types';
const TEN_UNITS_EIGHTEEN_DECIMALS = new BigNumber(10000000000000000000);
+const FIVE_UNITS_EIGHTEEN_DECIMALS = new BigNumber(5000000000000000000);
const POINT_ONE_UNITS_EIGHTEEN_DECIMALS = new BigNumber(100000000000000000);
+const POINT_ZERO_FIVE_UNITS_EIGHTEEN_DECIMALS = new BigNumber(50000000000000000);
const TEN_UNITS_FIVE_DECIMALS = new BigNumber(1000000);
+const FIVE_UNITS_FIVE_DECIMALS = new BigNumber(500000);
const ONE_NFT_UNIT = new BigNumber(1);
export class NewOrderFactory {
@@ -46,7 +50,7 @@ export class NewOrderFactory {
}
public generateOrder(orderScenario: OrderScenario): Order {
const makerAddress = this._userAddresses[1];
- const takerAddress = this._userAddresses[2];
+ let takerAddress = this._userAddresses[2];
const erc721MakerAssetIds = this._erc721Balances[makerAddress][this._erc721Token.address];
const erc721TakerAssetIds = this._erc721Balances[takerAddress][this._erc721Token.address];
let feeRecipientAddress;
@@ -114,7 +118,7 @@ export class NewOrderFactory {
}
switch (orderScenario.makerAssetAmountScenario) {
- case OrderAmountScenario.NonZero:
+ case OrderAmountScenario.Large:
switch (orderScenario.makerAssetDataScenario) {
case AssetDataScenario.ZRXFeeToken:
case AssetDataScenario.ERC20NonZRXEighteenDecimals:
@@ -130,6 +134,22 @@ export class NewOrderFactory {
throw errorUtils.spawnSwitchErr('AssetDataScenario', orderScenario.makerAssetDataScenario);
}
break;
+ case OrderAmountScenario.Small:
+ switch (orderScenario.makerAssetDataScenario) {
+ case AssetDataScenario.ZRXFeeToken:
+ case AssetDataScenario.ERC20NonZRXEighteenDecimals:
+ makerAssetAmount = FIVE_UNITS_EIGHTEEN_DECIMALS;
+ break;
+ case AssetDataScenario.ERC20FiveDecimals:
+ makerAssetAmount = FIVE_UNITS_FIVE_DECIMALS;
+ break;
+ case AssetDataScenario.ERC721:
+ makerAssetAmount = ONE_NFT_UNIT;
+ break;
+ default:
+ throw errorUtils.spawnSwitchErr('AssetDataScenario', orderScenario.makerAssetDataScenario);
+ }
+ break;
case OrderAmountScenario.Zero:
makerAssetAmount = new BigNumber(0);
break;
@@ -138,7 +158,7 @@ export class NewOrderFactory {
}
switch (orderScenario.takerAssetAmountScenario) {
- case OrderAmountScenario.NonZero:
+ case OrderAmountScenario.Large:
switch (orderScenario.takerAssetDataScenario) {
case AssetDataScenario.ERC20NonZRXEighteenDecimals:
case AssetDataScenario.ZRXFeeToken:
@@ -154,6 +174,22 @@ export class NewOrderFactory {
throw errorUtils.spawnSwitchErr('AssetDataScenario', orderScenario.takerAssetDataScenario);
}
break;
+ case OrderAmountScenario.Small:
+ switch (orderScenario.takerAssetDataScenario) {
+ case AssetDataScenario.ERC20NonZRXEighteenDecimals:
+ case AssetDataScenario.ZRXFeeToken:
+ takerAssetAmount = FIVE_UNITS_EIGHTEEN_DECIMALS;
+ break;
+ case AssetDataScenario.ERC20FiveDecimals:
+ takerAssetAmount = FIVE_UNITS_FIVE_DECIMALS;
+ break;
+ case AssetDataScenario.ERC721:
+ takerAssetAmount = ONE_NFT_UNIT;
+ break;
+ default:
+ throw errorUtils.spawnSwitchErr('AssetDataScenario', orderScenario.takerAssetDataScenario);
+ }
+ break;
case OrderAmountScenario.Zero:
takerAssetAmount = new BigNumber(0);
break;
@@ -162,9 +198,12 @@ export class NewOrderFactory {
}
switch (orderScenario.makerFeeScenario) {
- case OrderAmountScenario.NonZero:
+ case OrderAmountScenario.Large:
makerFee = POINT_ONE_UNITS_EIGHTEEN_DECIMALS;
break;
+ case OrderAmountScenario.Small:
+ makerFee = POINT_ZERO_FIVE_UNITS_EIGHTEEN_DECIMALS;
+ break;
case OrderAmountScenario.Zero:
makerFee = new BigNumber(0);
break;
@@ -173,9 +212,12 @@ export class NewOrderFactory {
}
switch (orderScenario.takerFeeScenario) {
- case OrderAmountScenario.NonZero:
+ case OrderAmountScenario.Large:
takerFee = POINT_ONE_UNITS_EIGHTEEN_DECIMALS;
break;
+ case OrderAmountScenario.Small:
+ takerFee = POINT_ZERO_FIVE_UNITS_EIGHTEEN_DECIMALS;
+ break;
case OrderAmountScenario.Zero:
takerFee = new BigNumber(0);
break;
@@ -197,6 +239,23 @@ export class NewOrderFactory {
);
}
+ switch (orderScenario.takerScenario) {
+ case TakerScenario.CorrectlySpecified:
+ break; // noop since takerAddress is already specified
+
+ case TakerScenario.IncorrectlySpecified:
+ const notTaker = this._userAddresses[3];
+ takerAddress = notTaker;
+ break;
+
+ case TakerScenario.Unspecified:
+ takerAddress = constants.NULL_ADDRESS;
+ break;
+
+ default:
+ throw errorUtils.spawnSwitchErr('TakerScenario', orderScenario.takerScenario);
+ }
+
const order: Order = {
senderAddress: constants.NULL_ADDRESS,
makerAddress,