Updated all existing match order tests to use new format
This commit is contained in:
parent
d291256158
commit
5a1dce15be
@ -21,7 +21,13 @@ import { ERC721Wrapper } from '../utils/erc721_wrapper';
|
|||||||
import { ExchangeWrapper } from '../utils/exchange_wrapper';
|
import { ExchangeWrapper } from '../utils/exchange_wrapper';
|
||||||
import { MatchOrderTester } from '../utils/match_order_tester';
|
import { MatchOrderTester } from '../utils/match_order_tester';
|
||||||
import { OrderFactory } from '../utils/order_factory';
|
import { OrderFactory } from '../utils/order_factory';
|
||||||
import { ERC20BalancesByOwner, ERC721TokenIdsByOwner, OrderInfo, TransferAmountsByMatchOrders as TransferAmounts, OrderStatus } from '../utils/types';
|
import {
|
||||||
|
ERC20BalancesByOwner,
|
||||||
|
ERC721TokenIdsByOwner,
|
||||||
|
OrderInfo,
|
||||||
|
TransferAmountsByMatchOrders as TransferAmounts,
|
||||||
|
OrderStatus,
|
||||||
|
} from '../utils/types';
|
||||||
import { provider, txDefaults, web3Wrapper } from '../utils/web3_wrapper';
|
import { provider, txDefaults, web3Wrapper } from '../utils/web3_wrapper';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
@ -177,7 +183,6 @@ describe.only('matchOrders', () => {
|
|||||||
erc20BalancesByOwner = await erc20Wrapper.getBalancesAsync();
|
erc20BalancesByOwner = await erc20Wrapper.getBalancesAsync();
|
||||||
erc721TokenIdsByOwner = await erc721Wrapper.getBalancesAsync();
|
erc721TokenIdsByOwner = await erc721Wrapper.getBalancesAsync();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
it.only('should transfer the correct amounts when orders completely fill each other', async () => {
|
it.only('should transfer the correct amounts when orders completely fill each other', async () => {
|
||||||
@ -213,7 +218,7 @@ describe.only('matchOrders', () => {
|
|||||||
});
|
});
|
||||||
*/
|
*/
|
||||||
|
|
||||||
it.only('Jacobs Example', async () => {
|
it('Jacobs Example', async () => {
|
||||||
// Create orders to match
|
// Create orders to match
|
||||||
const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
|
const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
|
||||||
makerAddress: makerAddressLeft,
|
makerAddress: makerAddressLeft,
|
||||||
@ -244,8 +249,6 @@ describe.only('matchOrders', () => {
|
|||||||
feePaidByTakerLeft: Web3Wrapper.toBaseUnitAmount(new BigNumber(1), 18), // 100%
|
feePaidByTakerLeft: Web3Wrapper.toBaseUnitAmount(new BigNumber(1), 18), // 100%
|
||||||
feePaidByTakerRight: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 17), // 50%
|
feePaidByTakerRight: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 17), // 50%
|
||||||
};
|
};
|
||||||
const expectedEndStateLeft = OrderStatus.FILLABLE;
|
|
||||||
const expectedEndStateRight = OrderStatus.FULLY_FILLED;
|
|
||||||
// Match signedOrderLeft with signedOrderRight
|
// Match signedOrderLeft with signedOrderRight
|
||||||
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
||||||
signedOrderLeft,
|
signedOrderLeft,
|
||||||
@ -254,44 +257,8 @@ describe.only('matchOrders', () => {
|
|||||||
erc20BalancesByOwner,
|
erc20BalancesByOwner,
|
||||||
erc721TokenIdsByOwner,
|
erc721TokenIdsByOwner,
|
||||||
expectedTransferAmounts,
|
expectedTransferAmounts,
|
||||||
expectedEndStateLeft,
|
|
||||||
expectedEndStateRight
|
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
it.only('Jacobs Example', async () => {
|
|
||||||
// Create orders to match
|
|
||||||
const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
|
|
||||||
makerAddress: makerAddressLeft,
|
|
||||||
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 0),
|
|
||||||
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(3), 0),
|
|
||||||
feeRecipientAddress: feeRecipientAddressLeft,
|
|
||||||
});
|
|
||||||
const signedOrderRight = await orderFactoryRight.newSignedOrderAsync({
|
|
||||||
makerAddress: makerAddressRight,
|
|
||||||
makerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
|
|
||||||
takerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
|
|
||||||
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 0),
|
|
||||||
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(1), 0),
|
|
||||||
feeRecipientAddress: feeRecipientAddressRight,
|
|
||||||
});
|
|
||||||
// Match signedOrderLeft with signedOrderRight
|
|
||||||
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
|
||||||
signedOrderLeft,
|
|
||||||
signedOrderRight,
|
|
||||||
takerAddress,
|
|
||||||
erc20BalancesByOwner,
|
|
||||||
erc721TokenIdsByOwner,
|
|
||||||
);
|
|
||||||
// // Verify left order was fully filled
|
|
||||||
// const leftOrderInfo: OrderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrderLeft);
|
|
||||||
// expect(leftOrderInfo.orderStatus as OrderStatus).to.be.equal(OrderStatus.FULLY_FILLED);
|
|
||||||
// Verify right order was fully filled
|
|
||||||
// const rightOrderInfo: OrderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrderRight);
|
|
||||||
// expect(rightOrderInfo.orderStatus as OrderStatus).to.be.equal(OrderStatus.FULLY_FILLED);
|
|
||||||
});*/
|
|
||||||
|
|
||||||
const reentrancyTest = (functionNames: string[]) => {
|
const reentrancyTest = (functionNames: string[]) => {
|
||||||
_.forEach(functionNames, async (functionName: string, functionId: number) => {
|
_.forEach(functionNames, async (functionName: string, functionId: number) => {
|
||||||
@ -333,19 +300,28 @@ describe.only('matchOrders', () => {
|
|||||||
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
|
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
|
||||||
});
|
});
|
||||||
// Match signedOrderLeft with signedOrderRight
|
// Match signedOrderLeft with signedOrderRight
|
||||||
|
const expectedTransferAmounts = {
|
||||||
|
// Left Maker
|
||||||
|
amountSoldByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
|
||||||
|
amountBoughtByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
feePaidByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
// Right Maker
|
||||||
|
amountSoldByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
amountBoughtByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
|
||||||
|
feePaidByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
// Taker
|
||||||
|
amountReceivedByTaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(3), 18),
|
||||||
|
feePaidByTakerLeft: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16),
|
||||||
|
feePaidByTakerRight: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16),
|
||||||
|
};
|
||||||
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
||||||
signedOrderLeft,
|
signedOrderLeft,
|
||||||
signedOrderRight,
|
signedOrderRight,
|
||||||
takerAddress,
|
takerAddress,
|
||||||
erc20BalancesByOwner,
|
erc20BalancesByOwner,
|
||||||
erc721TokenIdsByOwner,
|
erc721TokenIdsByOwner,
|
||||||
|
expectedTransferAmounts,
|
||||||
);
|
);
|
||||||
// Verify left order was fully filled
|
|
||||||
const leftOrderInfo: OrderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrderLeft);
|
|
||||||
expect(leftOrderInfo.orderStatus as OrderStatus).to.be.equal(OrderStatus.FULLY_FILLED);
|
|
||||||
// Verify right order was fully filled
|
|
||||||
const rightOrderInfo: OrderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrderRight);
|
|
||||||
expect(rightOrderInfo.orderStatus as OrderStatus).to.be.equal(OrderStatus.FULLY_FILLED);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should transfer the correct amounts when orders completely fill each other and taker doesnt take a profit', async () => {
|
it('should transfer the correct amounts when orders completely fill each other and taker doesnt take a profit', async () => {
|
||||||
@ -358,32 +334,29 @@ describe.only('matchOrders', () => {
|
|||||||
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
|
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
|
||||||
});
|
});
|
||||||
// Store original taker balance
|
|
||||||
const takerInitialBalances = _.cloneDeep(erc20BalancesByOwner[takerAddress][defaultERC20MakerAssetAddress]);
|
|
||||||
// Match signedOrderLeft with signedOrderRight
|
// Match signedOrderLeft with signedOrderRight
|
||||||
let newERC20BalancesByOwner: ERC20BalancesByOwner;
|
const expectedTransferAmounts = {
|
||||||
let newERC721TokenIdsByOwner: ERC721TokenIdsByOwner;
|
// Left Maker
|
||||||
// prettier-ignore
|
amountSoldByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
|
||||||
[
|
amountBoughtByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
newERC20BalancesByOwner,
|
feePaidByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
// tslint:disable-next-line:trailing-comma
|
// Right Maker
|
||||||
newERC721TokenIdsByOwner
|
amountSoldByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
] = await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
amountBoughtByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
|
||||||
|
feePaidByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
// Taker
|
||||||
|
amountReceivedByTaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(0), 18),
|
||||||
|
feePaidByTakerLeft: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16),
|
||||||
|
feePaidByTakerRight: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16),
|
||||||
|
};
|
||||||
|
// Match signedOrderLeft with signedOrderRight
|
||||||
|
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
||||||
signedOrderLeft,
|
signedOrderLeft,
|
||||||
signedOrderRight,
|
signedOrderRight,
|
||||||
takerAddress,
|
takerAddress,
|
||||||
erc20BalancesByOwner,
|
erc20BalancesByOwner,
|
||||||
erc721TokenIdsByOwner,
|
erc721TokenIdsByOwner,
|
||||||
);
|
expectedTransferAmounts,
|
||||||
// Verify left order was fully filled
|
|
||||||
const leftOrderInfo: OrderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrderLeft);
|
|
||||||
expect(leftOrderInfo.orderStatus as OrderStatus).to.be.equal(OrderStatus.FULLY_FILLED);
|
|
||||||
// Verify right order was fully filled
|
|
||||||
const rightOrderInfo: OrderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrderRight);
|
|
||||||
expect(rightOrderInfo.orderStatus as OrderStatus).to.be.equal(OrderStatus.FULLY_FILLED);
|
|
||||||
// Verify taker did not take a profit
|
|
||||||
expect(takerInitialBalances).to.be.deep.equal(
|
|
||||||
newERC20BalancesByOwner[takerAddress][defaultERC20MakerAssetAddress],
|
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -397,20 +370,30 @@ describe.only('matchOrders', () => {
|
|||||||
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(20), 18),
|
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(20), 18),
|
||||||
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(4), 18),
|
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(4), 18),
|
||||||
});
|
});
|
||||||
// Match orders
|
// Match signedOrderLeft with signedOrderRight
|
||||||
|
const expectedTransferAmounts = {
|
||||||
|
// Left Maker
|
||||||
|
amountSoldByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
|
||||||
|
amountBoughtByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
feePaidByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
// Right Maker
|
||||||
|
amountSoldByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
amountBoughtByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
|
||||||
|
feePaidByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(50), 16), // 50%
|
||||||
|
// Taker
|
||||||
|
amountReceivedByTaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(3), 18),
|
||||||
|
feePaidByTakerLeft: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 40%
|
||||||
|
feePaidByTakerRight: Web3Wrapper.toBaseUnitAmount(new BigNumber(50), 16), // 100%
|
||||||
|
};
|
||||||
|
// Match signedOrderLeft with signedOrderRight
|
||||||
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
||||||
signedOrderLeft,
|
signedOrderLeft,
|
||||||
signedOrderRight,
|
signedOrderRight,
|
||||||
takerAddress,
|
takerAddress,
|
||||||
erc20BalancesByOwner,
|
erc20BalancesByOwner,
|
||||||
erc721TokenIdsByOwner,
|
erc721TokenIdsByOwner,
|
||||||
|
expectedTransferAmounts,
|
||||||
);
|
);
|
||||||
// Verify left order was fully filled
|
|
||||||
const leftOrderInfo: OrderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrderLeft);
|
|
||||||
expect(leftOrderInfo.orderStatus as OrderStatus).to.be.equal(OrderStatus.FULLY_FILLED);
|
|
||||||
// Verify right order was partially filled
|
|
||||||
const rightOrderInfo: OrderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrderRight);
|
|
||||||
expect(rightOrderInfo.orderStatus as OrderStatus).to.be.equal(OrderStatus.FILLABLE);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should transfer the correct amounts when right order is completely filled and left order is partially filled', async () => {
|
it('should transfer the correct amounts when right order is completely filled and left order is partially filled', async () => {
|
||||||
@ -423,20 +406,30 @@ describe.only('matchOrders', () => {
|
|||||||
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
|
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
|
||||||
});
|
});
|
||||||
// Match orders
|
// Match signedOrderLeft with signedOrderRight
|
||||||
|
const expectedTransferAmounts = {
|
||||||
|
// Left Maker
|
||||||
|
amountSoldByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
|
||||||
|
amountBoughtByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
feePaidByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 16), // 10%
|
||||||
|
// Right Maker
|
||||||
|
amountSoldByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
amountBoughtByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
|
||||||
|
feePaidByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
// Taker
|
||||||
|
amountReceivedByTaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(3), 18),
|
||||||
|
feePaidByTakerLeft: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 16), // 100%
|
||||||
|
feePaidByTakerRight: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 50%
|
||||||
|
};
|
||||||
|
// Match signedOrderLeft with signedOrderRight
|
||||||
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
||||||
signedOrderLeft,
|
signedOrderLeft,
|
||||||
signedOrderRight,
|
signedOrderRight,
|
||||||
takerAddress,
|
takerAddress,
|
||||||
erc20BalancesByOwner,
|
erc20BalancesByOwner,
|
||||||
erc721TokenIdsByOwner,
|
erc721TokenIdsByOwner,
|
||||||
|
expectedTransferAmounts,
|
||||||
);
|
);
|
||||||
// Verify left order was partially filled
|
|
||||||
const leftOrderInfo: OrderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrderLeft);
|
|
||||||
expect(leftOrderInfo.orderStatus as OrderStatus).to.be.equal(OrderStatus.FILLABLE);
|
|
||||||
// Verify right order was fully filled
|
|
||||||
const rightOrderInfo: OrderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrderRight);
|
|
||||||
expect(rightOrderInfo.orderStatus as OrderStatus).to.be.equal(OrderStatus.FULLY_FILLED);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should transfer the correct amounts when consecutive calls are used to completely fill the left order', async () => {
|
it('should transfer the correct amounts when consecutive calls are used to completely fill the left order', async () => {
|
||||||
@ -452,6 +445,20 @@ describe.only('matchOrders', () => {
|
|||||||
// Match orders
|
// Match orders
|
||||||
let newERC20BalancesByOwner: ERC20BalancesByOwner;
|
let newERC20BalancesByOwner: ERC20BalancesByOwner;
|
||||||
let newERC721TokenIdsByOwner: ERC721TokenIdsByOwner;
|
let newERC721TokenIdsByOwner: ERC721TokenIdsByOwner;
|
||||||
|
const expectedTransferAmounts = {
|
||||||
|
// Left Maker
|
||||||
|
amountSoldByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
|
||||||
|
amountBoughtByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
feePaidByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 16), // 10%
|
||||||
|
// Right Maker
|
||||||
|
amountSoldByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
amountBoughtByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
|
||||||
|
feePaidByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
// Taker
|
||||||
|
amountReceivedByTaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(3), 18),
|
||||||
|
feePaidByTakerLeft: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 16), // 100%
|
||||||
|
feePaidByTakerRight: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 50%
|
||||||
|
};
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
[
|
[
|
||||||
newERC20BalancesByOwner,
|
newERC20BalancesByOwner,
|
||||||
@ -463,13 +470,8 @@ describe.only('matchOrders', () => {
|
|||||||
takerAddress,
|
takerAddress,
|
||||||
erc20BalancesByOwner,
|
erc20BalancesByOwner,
|
||||||
erc721TokenIdsByOwner,
|
erc721TokenIdsByOwner,
|
||||||
|
expectedTransferAmounts
|
||||||
);
|
);
|
||||||
// Verify left order was partially filled
|
|
||||||
const leftOrderInfo: OrderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrderLeft);
|
|
||||||
expect(leftOrderInfo.orderStatus as OrderStatus).to.be.equal(OrderStatus.FILLABLE);
|
|
||||||
// Verify right order was fully filled
|
|
||||||
const rightOrderInfo: OrderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrderRight);
|
|
||||||
expect(rightOrderInfo.orderStatus as OrderStatus).to.be.equal(OrderStatus.FULLY_FILLED);
|
|
||||||
// Construct second right order
|
// Construct second right order
|
||||||
// Note: This order needs makerAssetAmount=90/takerAssetAmount=[anything <= 45] to fully fill the right order.
|
// Note: This order needs makerAssetAmount=90/takerAssetAmount=[anything <= 45] to fully fill the right order.
|
||||||
// However, we use 100/50 to ensure a partial fill as we want to go down the "left fill"
|
// However, we use 100/50 to ensure a partial fill as we want to go down the "left fill"
|
||||||
@ -478,24 +480,34 @@ describe.only('matchOrders', () => {
|
|||||||
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 18),
|
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 18),
|
||||||
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(50), 18),
|
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(50), 18),
|
||||||
});
|
});
|
||||||
|
|
||||||
// Match signedOrderLeft with signedOrderRight2
|
// Match signedOrderLeft with signedOrderRight2
|
||||||
const leftTakerAssetFilledAmount = signedOrderRight.makerAssetAmount;
|
const leftTakerAssetFilledAmount = signedOrderRight.makerAssetAmount;
|
||||||
const rightTakerAssetFilledAmount = new BigNumber(0);
|
const rightTakerAssetFilledAmount = new BigNumber(0);
|
||||||
|
const expectedTransferAmounts2 = {
|
||||||
|
// Left Maker
|
||||||
|
amountSoldByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(45), 18),
|
||||||
|
amountBoughtByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(90), 18),
|
||||||
|
feePaidByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(90), 16), // 90% (10% paid earlier)
|
||||||
|
// Right Maker
|
||||||
|
amountSoldByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(90), 18),
|
||||||
|
amountBoughtByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(45), 18),
|
||||||
|
feePaidByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(90), 16), // 90%
|
||||||
|
// Taker
|
||||||
|
amountReceivedByTaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(0), 18),
|
||||||
|
feePaidByTakerLeft: Web3Wrapper.toBaseUnitAmount(new BigNumber(90), 16), // 90% (10% paid earlier)
|
||||||
|
feePaidByTakerRight: Web3Wrapper.toBaseUnitAmount(new BigNumber(90), 16), // 90%
|
||||||
|
};
|
||||||
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
||||||
signedOrderLeft,
|
signedOrderLeft,
|
||||||
signedOrderRight2,
|
signedOrderRight2,
|
||||||
takerAddress,
|
takerAddress,
|
||||||
newERC20BalancesByOwner,
|
newERC20BalancesByOwner,
|
||||||
erc721TokenIdsByOwner,
|
newERC721TokenIdsByOwner,
|
||||||
|
expectedTransferAmounts2,
|
||||||
leftTakerAssetFilledAmount,
|
leftTakerAssetFilledAmount,
|
||||||
rightTakerAssetFilledAmount,
|
rightTakerAssetFilledAmount,
|
||||||
);
|
);
|
||||||
// Verify left order was fully filled
|
|
||||||
const leftOrderInfo2: OrderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrderLeft);
|
|
||||||
expect(leftOrderInfo2.orderStatus as OrderStatus).to.be.equal(OrderStatus.FULLY_FILLED);
|
|
||||||
// Verify second right order was partially filled
|
|
||||||
const rightOrderInfo2: OrderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrderRight2);
|
|
||||||
expect(rightOrderInfo2.orderStatus as OrderStatus).to.be.equal(OrderStatus.FILLABLE);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should transfer the correct amounts when consecutive calls are used to completely fill the right order', async () => {
|
it('should transfer the correct amounts when consecutive calls are used to completely fill the right order', async () => {
|
||||||
@ -512,6 +524,20 @@ describe.only('matchOrders', () => {
|
|||||||
// Match orders
|
// Match orders
|
||||||
let newERC20BalancesByOwner: ERC20BalancesByOwner;
|
let newERC20BalancesByOwner: ERC20BalancesByOwner;
|
||||||
let newERC721TokenIdsByOwner: ERC721TokenIdsByOwner;
|
let newERC721TokenIdsByOwner: ERC721TokenIdsByOwner;
|
||||||
|
const expectedTransferAmounts = {
|
||||||
|
// Left Maker
|
||||||
|
amountSoldByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
amountBoughtByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
|
||||||
|
feePaidByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
// Right Maker
|
||||||
|
amountSoldByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
|
||||||
|
amountBoughtByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(4), 18),
|
||||||
|
feePaidByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(4), 16), // 4%
|
||||||
|
// Taker
|
||||||
|
amountReceivedByTaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(6), 18),
|
||||||
|
feePaidByTakerLeft: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
feePaidByTakerRight: Web3Wrapper.toBaseUnitAmount(new BigNumber(4), 16), // 4%
|
||||||
|
};
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
[
|
[
|
||||||
newERC20BalancesByOwner,
|
newERC20BalancesByOwner,
|
||||||
@ -523,13 +549,9 @@ describe.only('matchOrders', () => {
|
|||||||
takerAddress,
|
takerAddress,
|
||||||
erc20BalancesByOwner,
|
erc20BalancesByOwner,
|
||||||
erc721TokenIdsByOwner,
|
erc721TokenIdsByOwner,
|
||||||
|
expectedTransferAmounts
|
||||||
);
|
);
|
||||||
// Verify left order was partially filled
|
|
||||||
const leftOrderInfo: OrderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrderLeft);
|
|
||||||
expect(leftOrderInfo.orderStatus as OrderStatus).to.be.equal(OrderStatus.FULLY_FILLED);
|
|
||||||
// Verify right order was fully filled
|
|
||||||
const rightOrderInfo: OrderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrderRight);
|
|
||||||
expect(rightOrderInfo.orderStatus as OrderStatus).to.be.equal(OrderStatus.FILLABLE);
|
|
||||||
// Create second left order
|
// Create second left order
|
||||||
// Note: This order needs makerAssetAmount=96/takerAssetAmount=48 to fully fill the right order.
|
// Note: This order needs makerAssetAmount=96/takerAssetAmount=48 to fully fill the right order.
|
||||||
// However, we use 100/50 to ensure a partial fill as we want to go down the "right fill"
|
// However, we use 100/50 to ensure a partial fill as we want to go down the "right fill"
|
||||||
@ -544,23 +566,58 @@ describe.only('matchOrders', () => {
|
|||||||
erc20BalancesByOwner[takerAddress][defaultERC20MakerAssetAddress],
|
erc20BalancesByOwner[takerAddress][defaultERC20MakerAssetAddress],
|
||||||
);
|
);
|
||||||
const rightTakerAssetFilledAmount = signedOrderLeft.makerAssetAmount.minus(takerAmountReceived);
|
const rightTakerAssetFilledAmount = signedOrderLeft.makerAssetAmount.minus(takerAmountReceived);
|
||||||
|
const expectedTransferAmounts2 = {
|
||||||
|
// Left Maker
|
||||||
|
amountSoldByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(96), 18),
|
||||||
|
amountBoughtByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(48), 18),
|
||||||
|
feePaidByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(96), 16), // 96%
|
||||||
|
// Right Maker
|
||||||
|
amountSoldByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(48), 18),
|
||||||
|
amountBoughtByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(96), 18),
|
||||||
|
feePaidByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(96), 16), // 96%
|
||||||
|
// Taker
|
||||||
|
amountReceivedByTaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(0), 18),
|
||||||
|
feePaidByTakerLeft: Web3Wrapper.toBaseUnitAmount(new BigNumber(96), 16), // 96%
|
||||||
|
feePaidByTakerRight: Web3Wrapper.toBaseUnitAmount(new BigNumber(96), 16), // 96%
|
||||||
|
};
|
||||||
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
||||||
signedOrderLeft2,
|
signedOrderLeft2,
|
||||||
signedOrderRight,
|
signedOrderRight,
|
||||||
takerAddress,
|
takerAddress,
|
||||||
newERC20BalancesByOwner,
|
newERC20BalancesByOwner,
|
||||||
erc721TokenIdsByOwner,
|
newERC721TokenIdsByOwner,
|
||||||
|
expectedTransferAmounts2,
|
||||||
leftTakerAssetFilledAmount,
|
leftTakerAssetFilledAmount,
|
||||||
rightTakerAssetFilledAmount,
|
rightTakerAssetFilledAmount,
|
||||||
);
|
);
|
||||||
// Verify second left order was partially filled
|
|
||||||
const leftOrderInfo2: OrderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrderLeft2);
|
|
||||||
expect(leftOrderInfo2.orderStatus as OrderStatus).to.be.equal(OrderStatus.FILLABLE);
|
|
||||||
// Verify right order was fully filled
|
|
||||||
const rightOrderInfo2: OrderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrderRight);
|
|
||||||
expect(rightOrderInfo2.orderStatus as OrderStatus).to.be.equal(OrderStatus.FULLY_FILLED);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
// Match signedOrderLeft with signedOrderRight
|
||||||
|
const expectedTransferAmounts = {
|
||||||
|
// Left Maker
|
||||||
|
amountSoldByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(), 18),
|
||||||
|
amountBoughtByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(), 18),
|
||||||
|
feePaidByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(), 16), // 10%
|
||||||
|
// Right Maker
|
||||||
|
amountSoldByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(), 18),
|
||||||
|
amountBoughtByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(), 18),
|
||||||
|
feePaidByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(), 16), // 100%
|
||||||
|
// Taker
|
||||||
|
amountReceivedByTaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(), 18),
|
||||||
|
feePaidByTakerLeft: Web3Wrapper.toBaseUnitAmount(new BigNumber(), 16), // 100%
|
||||||
|
feePaidByTakerRight: Web3Wrapper.toBaseUnitAmount(new BigNumber(), 16), // 50%
|
||||||
|
};
|
||||||
|
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
||||||
|
signedOrderLeft,
|
||||||
|
signedOrderRight,
|
||||||
|
takerAddress,
|
||||||
|
erc20BalancesByOwner,
|
||||||
|
erc721TokenIdsByOwner,
|
||||||
|
expectedTransferAmounts
|
||||||
|
);
|
||||||
|
|
||||||
|
*/
|
||||||
it('should transfer the correct amounts if fee recipient is the same across both matched orders', async () => {
|
it('should transfer the correct amounts if fee recipient is the same across both matched orders', async () => {
|
||||||
const feeRecipientAddress = feeRecipientAddressLeft;
|
const feeRecipientAddress = feeRecipientAddressLeft;
|
||||||
const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
|
const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
|
||||||
@ -574,12 +631,27 @@ describe.only('matchOrders', () => {
|
|||||||
feeRecipientAddress,
|
feeRecipientAddress,
|
||||||
});
|
});
|
||||||
// Match orders
|
// Match orders
|
||||||
|
const expectedTransferAmounts = {
|
||||||
|
// Left Maker
|
||||||
|
amountSoldByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
|
||||||
|
amountBoughtByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
feePaidByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
// Right Maker
|
||||||
|
amountSoldByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
amountBoughtByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
|
||||||
|
feePaidByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
// Taker
|
||||||
|
amountReceivedByTaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(3), 18),
|
||||||
|
feePaidByTakerLeft: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16),
|
||||||
|
feePaidByTakerRight: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16),
|
||||||
|
};
|
||||||
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
||||||
signedOrderLeft,
|
signedOrderLeft,
|
||||||
signedOrderRight,
|
signedOrderRight,
|
||||||
takerAddress,
|
takerAddress,
|
||||||
erc20BalancesByOwner,
|
erc20BalancesByOwner,
|
||||||
erc721TokenIdsByOwner,
|
erc721TokenIdsByOwner,
|
||||||
|
expectedTransferAmounts,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -595,12 +667,27 @@ describe.only('matchOrders', () => {
|
|||||||
});
|
});
|
||||||
// Match orders
|
// Match orders
|
||||||
takerAddress = signedOrderLeft.makerAddress;
|
takerAddress = signedOrderLeft.makerAddress;
|
||||||
|
const expectedTransferAmounts = {
|
||||||
|
// Left Maker
|
||||||
|
amountSoldByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
|
||||||
|
amountBoughtByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
feePaidByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
// Right Maker
|
||||||
|
amountSoldByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
amountBoughtByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
|
||||||
|
feePaidByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
// Taker
|
||||||
|
amountReceivedByTaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(3), 18),
|
||||||
|
feePaidByTakerLeft: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16),
|
||||||
|
feePaidByTakerRight: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16),
|
||||||
|
};
|
||||||
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
||||||
signedOrderLeft,
|
signedOrderLeft,
|
||||||
signedOrderRight,
|
signedOrderRight,
|
||||||
takerAddress,
|
takerAddress,
|
||||||
erc20BalancesByOwner,
|
erc20BalancesByOwner,
|
||||||
erc721TokenIdsByOwner,
|
erc721TokenIdsByOwner,
|
||||||
|
expectedTransferAmounts,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -616,12 +703,27 @@ describe.only('matchOrders', () => {
|
|||||||
});
|
});
|
||||||
// Match orders
|
// Match orders
|
||||||
takerAddress = signedOrderRight.makerAddress;
|
takerAddress = signedOrderRight.makerAddress;
|
||||||
|
const expectedTransferAmounts = {
|
||||||
|
// Left Maker
|
||||||
|
amountSoldByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
|
||||||
|
amountBoughtByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
feePaidByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
// Right Maker
|
||||||
|
amountSoldByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
amountBoughtByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
|
||||||
|
feePaidByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
// Taker
|
||||||
|
amountReceivedByTaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(3), 18),
|
||||||
|
feePaidByTakerLeft: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16),
|
||||||
|
feePaidByTakerRight: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16),
|
||||||
|
};
|
||||||
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
||||||
signedOrderLeft,
|
signedOrderLeft,
|
||||||
signedOrderRight,
|
signedOrderRight,
|
||||||
takerAddress,
|
takerAddress,
|
||||||
erc20BalancesByOwner,
|
erc20BalancesByOwner,
|
||||||
erc721TokenIdsByOwner,
|
erc721TokenIdsByOwner,
|
||||||
|
expectedTransferAmounts,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -637,12 +739,27 @@ describe.only('matchOrders', () => {
|
|||||||
});
|
});
|
||||||
// Match orders
|
// Match orders
|
||||||
takerAddress = feeRecipientAddressLeft;
|
takerAddress = feeRecipientAddressLeft;
|
||||||
|
const expectedTransferAmounts = {
|
||||||
|
// Left Maker
|
||||||
|
amountSoldByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
|
||||||
|
amountBoughtByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
feePaidByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
// Right Maker
|
||||||
|
amountSoldByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
amountBoughtByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
|
||||||
|
feePaidByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
// Taker
|
||||||
|
amountReceivedByTaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(3), 18),
|
||||||
|
feePaidByTakerLeft: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16),
|
||||||
|
feePaidByTakerRight: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16),
|
||||||
|
};
|
||||||
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
||||||
signedOrderLeft,
|
signedOrderLeft,
|
||||||
signedOrderRight,
|
signedOrderRight,
|
||||||
takerAddress,
|
takerAddress,
|
||||||
erc20BalancesByOwner,
|
erc20BalancesByOwner,
|
||||||
erc721TokenIdsByOwner,
|
erc721TokenIdsByOwner,
|
||||||
|
expectedTransferAmounts,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -658,12 +775,27 @@ describe.only('matchOrders', () => {
|
|||||||
});
|
});
|
||||||
// Match orders
|
// Match orders
|
||||||
takerAddress = feeRecipientAddressRight;
|
takerAddress = feeRecipientAddressRight;
|
||||||
|
const expectedTransferAmounts = {
|
||||||
|
// Left Maker
|
||||||
|
amountSoldByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
|
||||||
|
amountBoughtByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
feePaidByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
// Right Maker
|
||||||
|
amountSoldByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
amountBoughtByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
|
||||||
|
feePaidByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
// Taker
|
||||||
|
amountReceivedByTaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(3), 18),
|
||||||
|
feePaidByTakerLeft: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16),
|
||||||
|
feePaidByTakerRight: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16),
|
||||||
|
};
|
||||||
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
||||||
signedOrderLeft,
|
signedOrderLeft,
|
||||||
signedOrderRight,
|
signedOrderRight,
|
||||||
takerAddress,
|
takerAddress,
|
||||||
erc20BalancesByOwner,
|
erc20BalancesByOwner,
|
||||||
erc721TokenIdsByOwner,
|
erc721TokenIdsByOwner,
|
||||||
|
expectedTransferAmounts,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -678,12 +810,27 @@ describe.only('matchOrders', () => {
|
|||||||
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
|
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
|
||||||
});
|
});
|
||||||
// Match orders
|
// Match orders
|
||||||
|
const expectedTransferAmounts = {
|
||||||
|
// Left Maker
|
||||||
|
amountSoldByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
|
||||||
|
amountBoughtByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
feePaidByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
// Right Maker
|
||||||
|
amountSoldByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
amountBoughtByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
|
||||||
|
feePaidByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
// Taker
|
||||||
|
amountReceivedByTaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(3), 18),
|
||||||
|
feePaidByTakerLeft: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16),
|
||||||
|
feePaidByTakerRight: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16),
|
||||||
|
};
|
||||||
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
||||||
signedOrderLeft,
|
signedOrderLeft,
|
||||||
signedOrderRight,
|
signedOrderRight,
|
||||||
takerAddress,
|
takerAddress,
|
||||||
erc20BalancesByOwner,
|
erc20BalancesByOwner,
|
||||||
erc721TokenIdsByOwner,
|
erc721TokenIdsByOwner,
|
||||||
|
expectedTransferAmounts,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -796,22 +943,31 @@ describe.only('matchOrders', () => {
|
|||||||
takerAssetAmount: new BigNumber(1),
|
takerAssetAmount: new BigNumber(1),
|
||||||
});
|
});
|
||||||
// Match orders
|
// Match orders
|
||||||
|
const expectedTransferAmounts = {
|
||||||
|
// Left Maker
|
||||||
|
amountSoldByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(1), 0),
|
||||||
|
amountBoughtByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
feePaidByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
// Right Maker
|
||||||
|
amountSoldByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
amountBoughtByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(1), 0),
|
||||||
|
feePaidByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
// Taker
|
||||||
|
amountReceivedByTaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(0), 18),
|
||||||
|
feePaidByTakerLeft: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
feePaidByTakerRight: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 50%
|
||||||
|
};
|
||||||
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
||||||
signedOrderLeft,
|
signedOrderLeft,
|
||||||
signedOrderRight,
|
signedOrderRight,
|
||||||
takerAddress,
|
takerAddress,
|
||||||
erc20BalancesByOwner,
|
erc20BalancesByOwner,
|
||||||
erc721TokenIdsByOwner,
|
erc721TokenIdsByOwner,
|
||||||
|
expectedTransferAmounts,
|
||||||
);
|
);
|
||||||
// Verify left order was fully filled
|
|
||||||
const leftOrderInfo: OrderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrderLeft);
|
|
||||||
expect(leftOrderInfo.orderStatus as OrderStatus).to.be.equal(OrderStatus.FULLY_FILLED);
|
|
||||||
// Verify right order was fully filled
|
|
||||||
const rightOrderInfo: OrderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrderRight);
|
|
||||||
expect(rightOrderInfo.orderStatus as OrderStatus).to.be.equal(OrderStatus.FULLY_FILLED);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should transfer correct amounts when right order maker asset is an ERC721 token', async () => {
|
it.only('should transfer correct amounts when right order maker asset is an ERC721 token', async () => {
|
||||||
// Create orders to match
|
// Create orders to match
|
||||||
const erc721TokenToTransfer = erc721RightMakerAssetIds[0];
|
const erc721TokenToTransfer = erc721RightMakerAssetIds[0];
|
||||||
const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
|
const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
|
||||||
@ -822,22 +978,31 @@ describe.only('matchOrders', () => {
|
|||||||
const signedOrderRight = await orderFactoryRight.newSignedOrderAsync({
|
const signedOrderRight = await orderFactoryRight.newSignedOrderAsync({
|
||||||
makerAssetData: assetDataUtils.encodeERC721AssetData(defaultERC721AssetAddress, erc721TokenToTransfer),
|
makerAssetData: assetDataUtils.encodeERC721AssetData(defaultERC721AssetAddress, erc721TokenToTransfer),
|
||||||
makerAssetAmount: new BigNumber(1),
|
makerAssetAmount: new BigNumber(1),
|
||||||
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(8), 18),
|
||||||
});
|
});
|
||||||
// Match orders
|
// Match orders
|
||||||
|
const expectedTransferAmounts = {
|
||||||
|
// Left Maker
|
||||||
|
amountSoldByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
|
||||||
|
amountBoughtByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(1), 0),
|
||||||
|
feePaidByLeftMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
// Right Maker
|
||||||
|
amountSoldByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(1), 0),
|
||||||
|
amountBoughtByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(8), 18),
|
||||||
|
feePaidByRightMaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
// Taker
|
||||||
|
amountReceivedByTaker: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
|
||||||
|
feePaidByTakerLeft: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 100%
|
||||||
|
feePaidByTakerRight: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 16), // 50%
|
||||||
|
};
|
||||||
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
await matchOrderTester.matchOrdersAndVerifyBalancesAsync(
|
||||||
signedOrderLeft,
|
signedOrderLeft,
|
||||||
signedOrderRight,
|
signedOrderRight,
|
||||||
takerAddress,
|
takerAddress,
|
||||||
erc20BalancesByOwner,
|
erc20BalancesByOwner,
|
||||||
erc721TokenIdsByOwner,
|
erc721TokenIdsByOwner,
|
||||||
|
expectedTransferAmounts,
|
||||||
);
|
);
|
||||||
// Verify left order was fully filled
|
});
|
||||||
const leftOrderInfo: OrderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrderLeft);
|
|
||||||
expect(leftOrderInfo.orderStatus as OrderStatus).to.be.equal(OrderStatus.FULLY_FILLED);
|
|
||||||
// Verify right order was fully filled
|
|
||||||
const rightOrderInfo: OrderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrderRight);
|
|
||||||
expect(rightOrderInfo.orderStatus as OrderStatus).to.be.equal(OrderStatus.FULLY_FILLED);
|
|
||||||
});*/
|
|
||||||
});
|
});
|
||||||
}); // tslint:disable-line:max-file-line-count
|
}); // tslint:disable-line:max-file-line-count
|
||||||
|
@ -202,8 +202,6 @@ export class MatchOrderTester {
|
|||||||
erc20BalancesByOwner: ERC20BalancesByOwner,
|
erc20BalancesByOwner: ERC20BalancesByOwner,
|
||||||
erc721TokenIdsByOwner: ERC721TokenIdsByOwner,
|
erc721TokenIdsByOwner: ERC721TokenIdsByOwner,
|
||||||
expectedTransferAmounts: TransferAmounts,
|
expectedTransferAmounts: TransferAmounts,
|
||||||
leftOrderEndState: OrderStatus,
|
|
||||||
rightOrderEndState: OrderStatus,
|
|
||||||
initialTakerAssetFilledAmountLeft?: BigNumber,
|
initialTakerAssetFilledAmountLeft?: BigNumber,
|
||||||
initialTakerAssetFilledAmountRight?: BigNumber,
|
initialTakerAssetFilledAmountRight?: BigNumber,
|
||||||
): Promise<[ERC20BalancesByOwner, ERC721TokenIdsByOwner]> {
|
): Promise<[ERC20BalancesByOwner, ERC721TokenIdsByOwner]> {
|
||||||
@ -234,7 +232,9 @@ export class MatchOrderTester {
|
|||||||
signedOrderRight,
|
signedOrderRight,
|
||||||
orderTakerAssetFilledAmountLeft,
|
orderTakerAssetFilledAmountLeft,
|
||||||
orderTakerAssetFilledAmountRight,
|
orderTakerAssetFilledAmountRight,
|
||||||
expectedTransferAmounts
|
expectedTransferAmounts,
|
||||||
|
initialTakerAssetFilledAmountLeft,
|
||||||
|
initialTakerAssetFilledAmountRight
|
||||||
);
|
);
|
||||||
// Verify balances of makers, taker, and fee recipients
|
// Verify balances of makers, taker, and fee recipients
|
||||||
await this._verifyBalancesAsync(
|
await this._verifyBalancesAsync(
|
||||||
@ -308,7 +308,9 @@ export class MatchOrderTester {
|
|||||||
signedOrderRight: SignedOrder,
|
signedOrderRight: SignedOrder,
|
||||||
orderTakerAssetFilledAmountLeft: BigNumber,
|
orderTakerAssetFilledAmountLeft: BigNumber,
|
||||||
orderTakerAssetFilledAmountRight: BigNumber,
|
orderTakerAssetFilledAmountRight: BigNumber,
|
||||||
expectedTransferAmounts: TransferAmounts
|
expectedTransferAmounts: TransferAmounts,
|
||||||
|
initialTakerAssetFilledAmountLeft?: BigNumber,
|
||||||
|
initialTakerAssetFilledAmountRight?: BigNumber
|
||||||
) {
|
) {
|
||||||
// Verify state for left order: amount bought by left maker
|
// Verify state for left order: amount bought by left maker
|
||||||
let amountBoughtByLeftMaker = await this._exchangeWrapper.getTakerAssetFilledAmountAsync(
|
let amountBoughtByLeftMaker = await this._exchangeWrapper.getTakerAssetFilledAmountAsync(
|
||||||
@ -323,12 +325,18 @@ export class MatchOrderTester {
|
|||||||
amountBoughtByRightMaker = amountBoughtByRightMaker.minus(orderTakerAssetFilledAmountRight);
|
amountBoughtByRightMaker = amountBoughtByRightMaker.minus(orderTakerAssetFilledAmountRight);
|
||||||
expect(expectedTransferAmounts.amountBoughtByRightMaker, "Checking exchange state for right order").to.be.bignumber.equal(amountBoughtByRightMaker);
|
expect(expectedTransferAmounts.amountBoughtByRightMaker, "Checking exchange state for right order").to.be.bignumber.equal(amountBoughtByRightMaker);
|
||||||
// Verify left order status
|
// Verify left order status
|
||||||
|
const maxAmountBoughtByLeftMaker = initialTakerAssetFilledAmountLeft
|
||||||
|
? signedOrderLeft.takerAssetAmount.sub(initialTakerAssetFilledAmountLeft)
|
||||||
|
: signedOrderLeft.takerAssetAmount;
|
||||||
const leftOrderInfo: OrderInfo = await this._exchangeWrapper.getOrderInfoAsync(signedOrderLeft);
|
const leftOrderInfo: OrderInfo = await this._exchangeWrapper.getOrderInfoAsync(signedOrderLeft);
|
||||||
const leftExpectedStatus = (expectedTransferAmounts.amountBoughtByLeftMaker.equals(signedOrderLeft.takerAssetAmount)) ? OrderStatus.FULLY_FILLED : OrderStatus.FILLABLE;
|
const leftExpectedStatus = (expectedTransferAmounts.amountBoughtByLeftMaker.equals(maxAmountBoughtByLeftMaker)) ? OrderStatus.FULLY_FILLED : OrderStatus.FILLABLE;
|
||||||
expect(leftOrderInfo.orderStatus as OrderStatus, "Checking exchange status for left order").to.be.equal(leftExpectedStatus);
|
expect(leftOrderInfo.orderStatus as OrderStatus, "Checking exchange status for left order").to.be.equal(leftExpectedStatus);
|
||||||
// Verify right order status
|
// Verify right order status
|
||||||
|
const maxAmountBoughtByRightMaker = initialTakerAssetFilledAmountRight
|
||||||
|
? signedOrderRight.takerAssetAmount.sub(initialTakerAssetFilledAmountRight)
|
||||||
|
: signedOrderRight.takerAssetAmount;
|
||||||
const rightOrderInfo: OrderInfo = await this._exchangeWrapper.getOrderInfoAsync(signedOrderRight);
|
const rightOrderInfo: OrderInfo = await this._exchangeWrapper.getOrderInfoAsync(signedOrderRight);
|
||||||
const rightExpectedStatus = (expectedTransferAmounts.amountBoughtByRightMaker.equals(signedOrderRight.takerAssetAmount)) ? OrderStatus.FULLY_FILLED : OrderStatus.FILLABLE;
|
const rightExpectedStatus = (expectedTransferAmounts.amountBoughtByRightMaker.equals(maxAmountBoughtByRightMaker)) ? OrderStatus.FULLY_FILLED : OrderStatus.FILLABLE;
|
||||||
expect(rightOrderInfo.orderStatus as OrderStatus, "Checking exchange status for right order").to.be.equal(rightExpectedStatus);
|
expect(rightOrderInfo.orderStatus as OrderStatus, "Checking exchange status for right order").to.be.equal(rightExpectedStatus);
|
||||||
}
|
}
|
||||||
/// @dev Calculates the expected balances of order makers, fee recipients, and the taker,
|
/// @dev Calculates the expected balances of order makers, fee recipients, and the taker,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user