Add success test for fill with fees
This commit is contained in:
parent
a07a9d8571
commit
d8587875b8
@ -9,9 +9,9 @@ import promisify = require('es6-promisify');
|
|||||||
import {web3Factory} from './utils/web3_factory';
|
import {web3Factory} from './utils/web3_factory';
|
||||||
import {ZeroEx} from '../src/0x.js';
|
import {ZeroEx} from '../src/0x.js';
|
||||||
import {BlockchainLifecycle} from './utils/blockchain_lifecycle';
|
import {BlockchainLifecycle} from './utils/blockchain_lifecycle';
|
||||||
import {orderFactory} from './utils/order_factory';
|
|
||||||
import {FillOrderValidationErrs, Token} from '../src/types';
|
import {FillOrderValidationErrs, Token} from '../src/types';
|
||||||
import {FillScenarios} from './utils/fill_scenarios';
|
import {FillScenarios} from './utils/fill_scenarios';
|
||||||
|
import {TokenUtils} from './utils/token_utils';
|
||||||
|
|
||||||
chai.use(dirtyChai);
|
chai.use(dirtyChai);
|
||||||
chai.use(ChaiBigNumber());
|
chai.use(ChaiBigNumber());
|
||||||
@ -111,15 +111,19 @@ describe('ExchangeWrapper', () => {
|
|||||||
let coinBase: string;
|
let coinBase: string;
|
||||||
let makerAddress: string;
|
let makerAddress: string;
|
||||||
let takerAddress: string;
|
let takerAddress: string;
|
||||||
|
let feeRecipient: string;
|
||||||
|
let zrxTokenAddress: string;
|
||||||
const fillTakerAmountInBaseUnits = new BigNumber(5);
|
const fillTakerAmountInBaseUnits = new BigNumber(5);
|
||||||
const shouldCheckTransfer = false;
|
const shouldCheckTransfer = false;
|
||||||
before('fetch tokens', async () => {
|
before('fetch tokens', async () => {
|
||||||
[coinBase, makerAddress, takerAddress] = userAddresses;
|
[coinBase, makerAddress, takerAddress, feeRecipient] = userAddresses;
|
||||||
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
||||||
const [makerToken, takerToken] = tokens;
|
const tokenUtils = new TokenUtils(tokens);
|
||||||
|
const [makerToken, takerToken] = tokenUtils.getNonProtocolTokens();
|
||||||
makerTokenAddress = makerToken.address;
|
makerTokenAddress = makerToken.address;
|
||||||
takerTokenAddress = takerToken.address;
|
takerTokenAddress = takerToken.address;
|
||||||
fillScenarios = new FillScenarios(zeroEx, userAddresses, tokens);
|
zrxTokenAddress = tokenUtils.getProtocolTokenOrThrow().address;
|
||||||
|
fillScenarios = new FillScenarios(zeroEx, userAddresses, tokens, zrxTokenAddress);
|
||||||
});
|
});
|
||||||
afterEach('reset default account', () => {
|
afterEach('reset default account', () => {
|
||||||
zeroEx.setTransactionSenderAccount(userAddresses[0]);
|
zeroEx.setTransactionSenderAccount(userAddresses[0]);
|
||||||
@ -262,6 +266,19 @@ describe('ExchangeWrapper', () => {
|
|||||||
expect(await zeroEx.token.getBalanceAsync(takerTokenAddress, takerAddress))
|
expect(await zeroEx.token.getBalanceAsync(takerTokenAddress, takerAddress))
|
||||||
.to.be.bignumber.equal(fillableAmount.minus(partialFillAmount));
|
.to.be.bignumber.equal(fillableAmount.minus(partialFillAmount));
|
||||||
});
|
});
|
||||||
|
it('should fill the valid orders with fees', async () => {
|
||||||
|
const fillableAmount = new BigNumber(5);
|
||||||
|
const makerFee = new BigNumber(1);
|
||||||
|
const takerFee = new BigNumber(2);
|
||||||
|
const signedOrder = await fillScenarios.createFillableSignedOrderWithFeesAsync(
|
||||||
|
makerTokenAddress, takerTokenAddress, makerFee, takerFee,
|
||||||
|
makerAddress, takerAddress, fillableAmount, feeRecipient,
|
||||||
|
);
|
||||||
|
zeroEx.setTransactionSenderAccount(takerAddress);
|
||||||
|
await zeroEx.exchange.fillOrderAsync(signedOrder, fillTakerAmountInBaseUnits, shouldCheckTransfer);
|
||||||
|
expect(await zeroEx.token.getBalanceAsync(zrxTokenAddress, feeRecipient))
|
||||||
|
.to.be.bignumber.equal(makerFee.plus(takerFee));
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -9,11 +9,13 @@ export class FillScenarios {
|
|||||||
private userAddresses: string[];
|
private userAddresses: string[];
|
||||||
private tokens: Token[];
|
private tokens: Token[];
|
||||||
private coinBase: string;
|
private coinBase: string;
|
||||||
constructor(zeroEx: ZeroEx, userAddresses: string[], tokens: Token[]) {
|
private zrxTokenAddress: string;
|
||||||
|
constructor(zeroEx: ZeroEx, userAddresses: string[], tokens: Token[], zrxTokenAddress: string) {
|
||||||
this.zeroEx = zeroEx;
|
this.zeroEx = zeroEx;
|
||||||
this.userAddresses = userAddresses;
|
this.userAddresses = userAddresses;
|
||||||
this.tokens = tokens;
|
this.tokens = tokens;
|
||||||
this.coinBase = userAddresses[0];
|
this.coinBase = userAddresses[0];
|
||||||
|
this.zrxTokenAddress = zrxTokenAddress;
|
||||||
}
|
}
|
||||||
public async createFillableSignedOrderAsync(makerTokenAddress: string, takerTokenAddress: string,
|
public async createFillableSignedOrderAsync(makerTokenAddress: string, takerTokenAddress: string,
|
||||||
makerAddress: string, takerAddress: string,
|
makerAddress: string, takerAddress: string,
|
||||||
@ -60,6 +62,15 @@ export class FillScenarios {
|
|||||||
await this.zeroEx.token.transferAsync(takerTokenAddress, this.coinBase, takerAddress, takerFillableAmount);
|
await this.zeroEx.token.transferAsync(takerTokenAddress, this.coinBase, takerAddress, takerFillableAmount);
|
||||||
await this.zeroEx.token.setProxyAllowanceAsync(takerTokenAddress, takerAddress, takerFillableAmount);
|
await this.zeroEx.token.setProxyAllowanceAsync(takerTokenAddress, takerAddress, takerFillableAmount);
|
||||||
|
|
||||||
|
if (!makerFee.isZero()) {
|
||||||
|
await this.zeroEx.token.transferAsync(this.zrxTokenAddress, this.coinBase, makerAddress, makerFee);
|
||||||
|
await this.zeroEx.token.setProxyAllowanceAsync(this.zrxTokenAddress, makerAddress, makerFee);
|
||||||
|
}
|
||||||
|
if (!takerFee.isZero()) {
|
||||||
|
await this.zeroEx.token.transferAsync(this.zrxTokenAddress, this.coinBase, takerAddress, takerFee);
|
||||||
|
await this.zeroEx.token.setProxyAllowanceAsync(this.zrxTokenAddress, takerAddress, takerFee);
|
||||||
|
}
|
||||||
|
|
||||||
const transactionSenderAccount = await this.zeroEx.getTransactionSenderAccountIfExistsAsync();
|
const transactionSenderAccount = await this.zeroEx.getTransactionSenderAccountIfExistsAsync();
|
||||||
this.zeroEx.setTransactionSenderAccount(makerAddress);
|
this.zeroEx.setTransactionSenderAccount(makerAddress);
|
||||||
const signedOrder = await orderFactory.createSignedOrderAsync(this.zeroEx,
|
const signedOrder = await orderFactory.createSignedOrderAsync(this.zeroEx,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user