Temp push
This commit is contained in:
parent
886ed9180d
commit
28dee77db8
@ -6,7 +6,7 @@ import promisify = require('es6-promisify');
|
|||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import {BlockchainLifecycle} from './utils/blockchain_lifecycle';
|
import {BlockchainLifecycle} from './utils/blockchain_lifecycle';
|
||||||
import * as BigNumber from 'bignumber.js';
|
import * as BigNumber from 'bignumber.js';
|
||||||
import {createSignedOrder} from './utils/order';
|
import {orderFactory} from './utils/order';
|
||||||
import {Token} from '../src/types';
|
import {Token} from '../src/types';
|
||||||
import * as Web3 from 'web3';
|
import * as Web3 from 'web3';
|
||||||
|
|
||||||
@ -101,34 +101,31 @@ describe('ExchangeWrapper', () => {
|
|||||||
});
|
});
|
||||||
describe('#fillOrderAsync', () => {
|
describe('#fillOrderAsync', () => {
|
||||||
let tokens: Token[];
|
let tokens: Token[];
|
||||||
|
let addressBySymbol: {[symbol: string]: string} = {};
|
||||||
|
let networkId: number;
|
||||||
const setBalance = async (toAddress: string,
|
const setBalance = async (toAddress: string,
|
||||||
amountInBaseUnits: BigNumber.BigNumber|number,
|
amountInBaseUnits: BigNumber.BigNumber|number,
|
||||||
symbol: string) => {
|
tokenAddress: string) => {
|
||||||
const amount = _.isNumber(amountInBaseUnits) ? new BigNumber(amountInBaseUnits) : amountInBaseUnits;
|
const amount = _.isNumber(amountInBaseUnits) ? new BigNumber(amountInBaseUnits) : amountInBaseUnits;
|
||||||
const token = _.find(tokens, {symbol});
|
await zeroEx.token.transferAsync(tokenAddress, userAddresses[0], toAddress, amount);
|
||||||
if (_.isUndefined(token)) {
|
|
||||||
throw new Error(`Token ${symbol} not found`);
|
|
||||||
} else {
|
|
||||||
await zeroEx.token.transferAsync(token.address, userAddresses[0], toAddress, amount);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
const setAllowance = async (ownerAddress: string,
|
const setAllowance = async (ownerAddress: string,
|
||||||
amountInBaseUnits: BigNumber.BigNumber|number,
|
amountInBaseUnits: BigNumber.BigNumber|number,
|
||||||
symbol: string) => {
|
tokenAddress: string) => {
|
||||||
const amount = _.isNumber(amountInBaseUnits) ? new BigNumber(amountInBaseUnits) : amountInBaseUnits;
|
const amount = _.isNumber(amountInBaseUnits) ? new BigNumber(amountInBaseUnits) : amountInBaseUnits;
|
||||||
const token = _.find(tokens, {symbol});
|
await zeroEx.token.setProxyAllowanceAsync(tokenAddress, ownerAddress, amount);
|
||||||
if (_.isUndefined(token)) {
|
|
||||||
throw new Error(`Token ${symbol} not found`);
|
|
||||||
} else {
|
|
||||||
await zeroEx.token.setProxyAllowanceAsync(token.address, ownerAddress, amount);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
before('fetch tokens', async () => {
|
before('fetch tokens', async () => {
|
||||||
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
||||||
|
_.forEach(tokens, token => {
|
||||||
|
addressBySymbol[token.symbol] = token.address;
|
||||||
|
});
|
||||||
|
networkId = await promisify(web3.version.getNetwork)();
|
||||||
});
|
});
|
||||||
describe('failed fills', () => {
|
describe('failed fills', () => {
|
||||||
it('should throw when the fill amount is zero', async () => {
|
it('should throw when the fill amount is zero', async () => {
|
||||||
const signedOrder = await createSignedOrder(zeroEx, tokens, 5, 'MLN', 5, 'GNT');
|
const signedOrder = await orderFactory.createSignedOrderAsync(zeroEx, networkId, userAddresses[0],
|
||||||
|
5, addressBySymbol.MLN, 5, addressBySymbol.GNT);
|
||||||
const fillAmount = new BigNumber(0);
|
const fillAmount = new BigNumber(0);
|
||||||
expect(zeroEx.exchange.fillOrderAsync(signedOrder, fillAmount))
|
expect(zeroEx.exchange.fillOrderAsync(signedOrder, fillAmount))
|
||||||
.to.be.rejectedWith('This order has already been filled or cancelled');
|
.to.be.rejectedWith('This order has already been filled or cancelled');
|
||||||
@ -139,13 +136,23 @@ describe('ExchangeWrapper', () => {
|
|||||||
web3.eth.defaultAccount = userAddresses[0];
|
web3.eth.defaultAccount = userAddresses[0];
|
||||||
});
|
});
|
||||||
it('should fill the valid order', async () => {
|
it('should fill the valid order', async () => {
|
||||||
await setAllowance(userAddresses[0], 5, 'MLN');
|
const maker = userAddresses[0];
|
||||||
await setBalance(userAddresses[1], 5, 'GNT');
|
const taker = userAddresses[1];
|
||||||
await setAllowance(userAddresses[1], 5, 'GNT');
|
await setAllowance(maker, 5, addressBySymbol.MLN);
|
||||||
const signedOrder = await createSignedOrder(zeroEx, tokens, 5, 'MLN', 5, 'GNT');
|
await setBalance(taker, 5, addressBySymbol.GNT);
|
||||||
|
await setAllowance(taker, 5, addressBySymbol.GNT);
|
||||||
|
const signedOrder = await orderFactory.createSignedOrderAsync(zeroEx, networkId, maker,
|
||||||
|
5, addressBySymbol.MLN, 5, addressBySymbol.GNT);
|
||||||
const fillAmount = new BigNumber(5);
|
const fillAmount = new BigNumber(5);
|
||||||
web3.eth.defaultAccount = userAddresses[1];
|
web3.eth.defaultAccount = taker;
|
||||||
|
expect(await zeroEx.token.getBalanceAsync(addressBySymbol.MLN, maker)).to.be.bignumber.greaterThan(5);
|
||||||
|
expect(await zeroEx.token.getBalanceAsync(addressBySymbol.MLN, taker)).to.be.bignumber.equal(0);
|
||||||
|
expect(await zeroEx.token.getBalanceAsync(addressBySymbol.GNT, taker)).to.be.bignumber.equal(5);
|
||||||
|
expect(await zeroEx.token.getProxyAllowanceAsync(addressBySymbol.MLN, maker)).to.be.bignumber.equal(5);
|
||||||
|
expect(await zeroEx.token.getProxyAllowanceAsync(addressBySymbol.GNT, taker)).to.be.bignumber.equal(5);
|
||||||
await zeroEx.exchange.fillOrderAsync(signedOrder, fillAmount);
|
await zeroEx.exchange.fillOrderAsync(signedOrder, fillAmount);
|
||||||
|
expect(await zeroEx.token.getBalanceAsync(addressBySymbol.MLN, taker)).to.be.bignumber.equal(5);
|
||||||
|
expect(await zeroEx.token.getBalanceAsync(addressBySymbol.GNT, taker)).to.be.bignumber.equal(0);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -3,40 +3,36 @@ import * as BigNumber from 'bignumber.js';
|
|||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import {ZeroEx} from '../../src/0x.js';
|
import {ZeroEx} from '../../src/0x.js';
|
||||||
import {constants} from './constants';
|
import {constants} from './constants';
|
||||||
|
import * as ExchangeArtifacts from '../../src/artifacts/Exchange.json';
|
||||||
|
|
||||||
export async function createSignedOrder(
|
export const orderFactory = {
|
||||||
zeroEx: ZeroEx,
|
async createSignedOrderAsync(
|
||||||
tokens: Token[],
|
zeroEx: ZeroEx,
|
||||||
makerTokenAmount: BigNumber.BigNumber|number,
|
networkId: number,
|
||||||
makerTokenSymbol: string,
|
maker: string,
|
||||||
takerTokenAmount: BigNumber.BigNumber|number,
|
makerTokenAmount: BigNumber.BigNumber|number,
|
||||||
takerTokenSymbol: string): Promise<SignedOrder> {
|
makerTokenAddress: string,
|
||||||
// TODO: fetch properly
|
takerTokenAmount: BigNumber.BigNumber|number,
|
||||||
const EXCHANGE_ADDRESS = '0xb69e673309512a9d726f87304c6984054f87a93b';
|
takerTokenAddress: string): Promise<SignedOrder> {
|
||||||
const INF_TIMESTAMP = 2524604400;
|
// TODO refactor and check
|
||||||
const makerToken = _.find(tokens, {symbol: makerTokenSymbol});
|
const exchangeAddress: string = (ExchangeArtifacts as any).networks[networkId].address;
|
||||||
const takerToken = _.find(tokens, {symbol: takerTokenSymbol});
|
const INF_TIMESTAMP = 2524604400;
|
||||||
if (_.isUndefined(makerToken)) {
|
const order = {
|
||||||
throw new Error(`Token ${makerTokenSymbol} not found`);
|
maker,
|
||||||
|
taker: undefined,
|
||||||
|
makerFee: new BigNumber(0),
|
||||||
|
takerFee: new BigNumber(0),
|
||||||
|
makerTokenAmount: _.isNumber(makerTokenAmount) ? new BigNumber(makerTokenAmount) : makerTokenAmount,
|
||||||
|
takerTokenAmount: _.isNumber(takerTokenAmount) ? new BigNumber(takerTokenAmount) : takerTokenAmount,
|
||||||
|
makerTokenAddress,
|
||||||
|
takerTokenAddress,
|
||||||
|
salt: ZeroEx.generatePseudoRandomSalt(),
|
||||||
|
feeRecipient: constants.NULL_ADDRESS,
|
||||||
|
expirationUnixTimestampSec: new BigNumber(INF_TIMESTAMP),
|
||||||
|
};
|
||||||
|
const orderHash = ZeroEx.getOrderHashHex(exchangeAddress, order);
|
||||||
|
const ecSignature = await zeroEx.signOrderHashAsync(orderHash);
|
||||||
|
const signedOrder: SignedOrder = _.assign(order, {ecSignature});
|
||||||
|
return signedOrder;
|
||||||
}
|
}
|
||||||
if (_.isUndefined(takerToken)) {
|
|
||||||
throw new Error(`Token ${takerTokenSymbol} not found`);
|
|
||||||
}
|
|
||||||
const order = {
|
|
||||||
maker: '0x5409ed021d9299bf6814279a6a1411a7e866a631',
|
|
||||||
taker: undefined,
|
|
||||||
makerFee: new BigNumber(0),
|
|
||||||
takerFee: new BigNumber(0),
|
|
||||||
makerTokenAmount: _.isNumber(makerTokenAmount) ? new BigNumber(makerTokenAmount) : makerTokenAmount,
|
|
||||||
takerTokenAmount: _.isNumber(takerTokenAmount) ? new BigNumber(takerTokenAmount) : takerTokenAmount,
|
|
||||||
makerTokenAddress: makerToken.address,
|
|
||||||
takerTokenAddress: takerToken.address,
|
|
||||||
salt: ZeroEx.generatePseudoRandomSalt(),
|
|
||||||
feeRecipient: constants.NULL_ADDRESS,
|
|
||||||
expirationUnixTimestampSec: new BigNumber(INF_TIMESTAMP),
|
|
||||||
};
|
|
||||||
const orderHash = ZeroEx.getOrderHashHex(EXCHANGE_ADDRESS, order);
|
|
||||||
const ecSignature = await zeroEx.signOrderHashAsync(orderHash);
|
|
||||||
const signedOrder: SignedOrder = _.assign(order, {ecSignature});
|
|
||||||
return signedOrder;
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user