Merge branch 'master' into cache_net_version
This commit is contained in:
@@ -5,6 +5,8 @@ v0.9.0 - TBD
|
||||
* Move `zeroEx.exchange.getAvailableContractAddressesAsync` to `zeroEx.getAvailableExchangeContractAddressesAsync` (#94)
|
||||
* Move `zeroEx.exchange.getProxyAuthorizedContractAddressesAsync` to `zeroEx.getProxyAuthorizedExchangeContractAddressesAsync` (#94)
|
||||
* Cache `net_version` requests and invalidate the cache on calls to `setProvider` (#95)
|
||||
* Rename `zeroEx.exchange.batchCancelOrderAsync` to `zeroEx.exchange.batchCancelOrdersAsync`
|
||||
* Rename `zeroEx.exchange.batchFillOrderAsync` to `zeroEx.exchange.batchFillOrdersAsync`
|
||||
|
||||
v0.8.0 - _Jul. 4, 2017_
|
||||
------------------------
|
||||
|
||||
@@ -85,8 +85,8 @@
|
||||
"typedoc": "^0.7.1",
|
||||
"typescript": "^2.3.3",
|
||||
"web3-provider-engine": "^13.0.1",
|
||||
"web3-typescript-typings": "^0.0.10",
|
||||
"webpack": "^2.6.0"
|
||||
"web3-typescript-typings": "^0.0.11",
|
||||
"webpack": "^3.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"bignumber.js": "^4.0.2",
|
||||
|
||||
@@ -297,8 +297,8 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
* Must be available via the supplied Web3.Provider passed to 0x.js.
|
||||
*/
|
||||
@decorators.contractCallErrorHandler
|
||||
public async batchFillOrderAsync(orderFillRequests: OrderFillRequest[],
|
||||
shouldCheckTransfer: boolean, takerAddress: string): Promise<void> {
|
||||
public async batchFillOrdersAsync(orderFillRequests: OrderFillRequest[],
|
||||
shouldCheckTransfer: boolean, takerAddress: string): Promise<void> {
|
||||
assert.doesConformToSchema('orderFillRequests', orderFillRequests, orderFillRequestsSchema);
|
||||
const exchangeContractAddresses = _.map(
|
||||
orderFillRequests,
|
||||
@@ -520,7 +520,7 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
* interface.
|
||||
*/
|
||||
@decorators.contractCallErrorHandler
|
||||
public async batchCancelOrderAsync(orderCancellationRequests: OrderCancellationRequest[]): Promise<void> {
|
||||
public async batchCancelOrdersAsync(orderCancellationRequests: OrderCancellationRequest[]): Promise<void> {
|
||||
assert.doesConformToSchema('orderCancellationRequests', orderCancellationRequests,
|
||||
orderCancellationRequestsSchema);
|
||||
const exchangeContractAddresses = _.map(
|
||||
|
||||
@@ -163,7 +163,7 @@ describe('ZeroEx library', () => {
|
||||
_.each(stubs, s => s.restore());
|
||||
stubs = [];
|
||||
});
|
||||
it ('Should return the correct ECSignature on TestPRC nodeVersion', async () => {
|
||||
it('Should return the correct ECSignature on TestPRC nodeVersion', async () => {
|
||||
const orderHash = '0x6927e990021d23b1eb7b8789f6a6feaf98fe104bb0cf8259421b79f9a34222b0';
|
||||
const expectedECSignature = {
|
||||
v: 27,
|
||||
@@ -173,7 +173,7 @@ describe('ZeroEx library', () => {
|
||||
const ecSignature = await zeroEx.signOrderHashAsync(orderHash, makerAddress);
|
||||
expect(ecSignature).to.deep.equal(expectedECSignature);
|
||||
});
|
||||
it ('should return the correct ECSignature on Parity > V1.6.6', async () => {
|
||||
it('should return the correct ECSignature on Parity > V1.6.6', async () => {
|
||||
const newParityNodeVersion = 'Parity//v1.6.7-beta-e128418-20170518/x86_64-macos/rustc1.17.0';
|
||||
const orderHash = '0x34decbedc118904df65f379a175bb39ca18209d6ce41d5ed549d54e6e0a95004';
|
||||
// tslint:disable-next-line: max-line-length
|
||||
@@ -194,7 +194,7 @@ describe('ZeroEx library', () => {
|
||||
const ecSignature = await zeroEx.signOrderHashAsync(orderHash, makerAddress);
|
||||
expect(ecSignature).to.deep.equal(expectedECSignature);
|
||||
});
|
||||
it ('should return the correct ECSignature on Parity < V1.6.6', async () => {
|
||||
it('should return the correct ECSignature on Parity < V1.6.6', async () => {
|
||||
const newParityNodeVersion = 'Parity//v1.6.6-beta-8c6e3f3-20170411/x86_64-macos/rustc1.16.0';
|
||||
const orderHash = '0xc793e33ffded933b76f2f48d9aa3339fc090399d5e7f5dec8d3660f5480793f7';
|
||||
// tslint:disable-next-line: max-line-length
|
||||
|
||||
@@ -386,7 +386,7 @@ describe('ExchangeWrapper', () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
describe('#batchFillOrderAsync', () => {
|
||||
describe('#batchFillOrdersAsync', () => {
|
||||
let signedOrder: SignedOrder;
|
||||
let signedOrderHashHex: string;
|
||||
let anotherSignedOrder: SignedOrder;
|
||||
@@ -414,10 +414,10 @@ describe('ExchangeWrapper', () => {
|
||||
});
|
||||
describe('successful batch fills', () => {
|
||||
it('should no-op for an empty batch', async () => {
|
||||
await zeroEx.exchange.batchFillOrderAsync([], shouldCheckTransfer, takerAddress);
|
||||
await zeroEx.exchange.batchFillOrdersAsync([], shouldCheckTransfer, takerAddress);
|
||||
});
|
||||
it('should successfully fill multiple orders', async () => {
|
||||
await zeroEx.exchange.batchFillOrderAsync(orderFillBatch, shouldCheckTransfer, takerAddress);
|
||||
await zeroEx.exchange.batchFillOrdersAsync(orderFillBatch, shouldCheckTransfer, takerAddress);
|
||||
const filledAmount = await zeroEx.exchange.getFilledTakerAmountAsync(
|
||||
signedOrderHashHex, exchangeContractAddress,
|
||||
);
|
||||
@@ -531,7 +531,7 @@ describe('ExchangeWrapper', () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
describe('#batchCancelOrderAsync', () => {
|
||||
describe('#batchCancelOrdersAsync', () => {
|
||||
let anotherSignedOrder: SignedOrder;
|
||||
let anotherOrderHashHex: string;
|
||||
let cancelBatch: OrderCancellationRequest[];
|
||||
@@ -556,7 +556,7 @@ describe('ExchangeWrapper', () => {
|
||||
const signedOrderWithDifferentMaker = await fillScenarios.createFillableSignedOrderAsync(
|
||||
makerTokenAddress, takerTokenAddress, takerAddress, takerAddress, fillableAmount,
|
||||
);
|
||||
return expect(zeroEx.exchange.batchCancelOrderAsync([
|
||||
return expect(zeroEx.exchange.batchCancelOrdersAsync([
|
||||
cancelBatch[0],
|
||||
{
|
||||
order: signedOrderWithDifferentMaker,
|
||||
@@ -567,7 +567,7 @@ describe('ExchangeWrapper', () => {
|
||||
});
|
||||
describe('successful batch cancels', () => {
|
||||
it('should cancel a batch of orders', async () => {
|
||||
await zeroEx.exchange.batchCancelOrderAsync(cancelBatch);
|
||||
await zeroEx.exchange.batchCancelOrdersAsync(cancelBatch);
|
||||
const cancelledAmount = await zeroEx.exchange.getCanceledTakerAmountAsync(
|
||||
orderHashHex, exchangeContractAddress,
|
||||
);
|
||||
@@ -603,19 +603,19 @@ describe('ExchangeWrapper', () => {
|
||||
orderHash = zeroEx.getOrderHashHex(signedOrder);
|
||||
});
|
||||
describe('#getUnavailableTakerAmountAsync', () => {
|
||||
it ('should throw if passed an invalid orderHash', async () => {
|
||||
it('should throw if passed an invalid orderHash', async () => {
|
||||
const invalidOrderHashHex = '0x123';
|
||||
return expect(zeroEx.exchange.getUnavailableTakerAmountAsync(
|
||||
invalidOrderHashHex, exchangeContractAddress,
|
||||
)).to.be.rejected();
|
||||
});
|
||||
it ('should return zero if passed a valid but non-existent orderHash', async () => {
|
||||
it('should return zero if passed a valid but non-existent orderHash', async () => {
|
||||
const unavailableValueT = await zeroEx.exchange.getUnavailableTakerAmountAsync(
|
||||
NON_EXISTENT_ORDER_HASH, exchangeContractAddress,
|
||||
);
|
||||
expect(unavailableValueT).to.be.bignumber.equal(0);
|
||||
});
|
||||
it ('should return the unavailableValueT for a valid and partially filled orderHash', async () => {
|
||||
it('should return the unavailableValueT for a valid and partially filled orderHash', async () => {
|
||||
const unavailableValueT = await zeroEx.exchange.getUnavailableTakerAmountAsync(
|
||||
orderHash, exchangeContractAddress,
|
||||
);
|
||||
@@ -623,19 +623,19 @@ describe('ExchangeWrapper', () => {
|
||||
});
|
||||
});
|
||||
describe('#getFilledTakerAmountAsync', () => {
|
||||
it ('should throw if passed an invalid orderHash', async () => {
|
||||
it('should throw if passed an invalid orderHash', async () => {
|
||||
const invalidOrderHashHex = '0x123';
|
||||
return expect(zeroEx.exchange.getFilledTakerAmountAsync(
|
||||
invalidOrderHashHex, exchangeContractAddress,
|
||||
)).to.be.rejected();
|
||||
});
|
||||
it ('should return zero if passed a valid but non-existent orderHash', async () => {
|
||||
it('should return zero if passed a valid but non-existent orderHash', async () => {
|
||||
const filledValueT = await zeroEx.exchange.getFilledTakerAmountAsync(
|
||||
NON_EXISTENT_ORDER_HASH, exchangeContractAddress,
|
||||
);
|
||||
expect(filledValueT).to.be.bignumber.equal(0);
|
||||
});
|
||||
it ('should return the filledValueT for a valid and partially filled orderHash', async () => {
|
||||
it('should return the filledValueT for a valid and partially filled orderHash', async () => {
|
||||
const filledValueT = await zeroEx.exchange.getFilledTakerAmountAsync(
|
||||
orderHash, exchangeContractAddress,
|
||||
);
|
||||
@@ -643,25 +643,25 @@ describe('ExchangeWrapper', () => {
|
||||
});
|
||||
});
|
||||
describe('#getCanceledTakerAmountAsync', () => {
|
||||
it ('should throw if passed an invalid orderHash', async () => {
|
||||
it('should throw if passed an invalid orderHash', async () => {
|
||||
const invalidOrderHashHex = '0x123';
|
||||
return expect(zeroEx.exchange.getCanceledTakerAmountAsync(
|
||||
invalidOrderHashHex, exchangeContractAddress,
|
||||
)).to.be.rejected();
|
||||
});
|
||||
it ('should return zero if passed a valid but non-existent orderHash', async () => {
|
||||
it('should return zero if passed a valid but non-existent orderHash', async () => {
|
||||
const cancelledValueT = await zeroEx.exchange.getCanceledTakerAmountAsync(
|
||||
NON_EXISTENT_ORDER_HASH, exchangeContractAddress,
|
||||
);
|
||||
expect(cancelledValueT).to.be.bignumber.equal(0);
|
||||
});
|
||||
it ('should return the cancelledValueT for a valid and partially filled orderHash', async () => {
|
||||
it('should return the cancelledValueT for a valid and partially filled orderHash', async () => {
|
||||
const cancelledValueT = await zeroEx.exchange.getCanceledTakerAmountAsync(
|
||||
orderHash, exchangeContractAddress,
|
||||
);
|
||||
expect(cancelledValueT).to.be.bignumber.equal(0);
|
||||
});
|
||||
it ('should return the cancelledValueT for a valid and cancelled orderHash', async () => {
|
||||
it('should return the cancelledValueT for a valid and cancelled orderHash', async () => {
|
||||
const cancelAmount = fillableAmount.minus(partialFillAmount);
|
||||
await zeroEx.exchange.cancelOrderAsync(signedOrder, cancelAmount);
|
||||
const cancelledValueT = await zeroEx.exchange.getCanceledTakerAmountAsync(
|
||||
|
||||
@@ -71,37 +71,15 @@ export class FillScenarios {
|
||||
makerAddress: string, takerAddress: string,
|
||||
makerFillableAmount: BigNumber.BigNumber, takerFillableAmount: BigNumber.BigNumber,
|
||||
feeRecepient: string, expirationUnixTimestampSec?: BigNumber.BigNumber): Promise<SignedOrder> {
|
||||
await this.zeroEx.token.transferAsync(makerTokenAddress, this.coinbase, makerAddress, makerFillableAmount);
|
||||
const oldMakerAllowance = await this.zeroEx.token.getProxyAllowanceAsync(makerTokenAddress, makerAddress);
|
||||
const newMakerAllowance = oldMakerAllowance.plus(makerFillableAmount);
|
||||
await this.zeroEx.token.setProxyAllowanceAsync(
|
||||
makerTokenAddress, makerAddress, newMakerAllowance,
|
||||
);
|
||||
await this.zeroEx.token.transferAsync(takerTokenAddress, this.coinbase, takerAddress, takerFillableAmount);
|
||||
const oldTakerAllowance = await this.zeroEx.token.getProxyAllowanceAsync(takerTokenAddress, takerAddress);
|
||||
const newTakerAllowance = oldTakerAllowance.plus(takerFillableAmount);
|
||||
await this.zeroEx.token.setProxyAllowanceAsync(
|
||||
takerTokenAddress, takerAddress, newTakerAllowance,
|
||||
);
|
||||
|
||||
if (!makerFee.isZero()) {
|
||||
await this.zeroEx.token.transferAsync(this.zrxTokenAddress, this.coinbase, makerAddress, makerFee);
|
||||
const oldMakerFeeAllowance =
|
||||
await this.zeroEx.token.getProxyAllowanceAsync(this.zrxTokenAddress, makerAddress);
|
||||
const newMakerFeeAllowance = oldMakerFeeAllowance.plus(makerFee);
|
||||
await this.zeroEx.token.setProxyAllowanceAsync(
|
||||
this.zrxTokenAddress, makerAddress, newMakerFeeAllowance,
|
||||
);
|
||||
}
|
||||
if (!takerFee.isZero()) {
|
||||
await this.zeroEx.token.transferAsync(this.zrxTokenAddress, this.coinbase, takerAddress, takerFee);
|
||||
const oldTakerFeeAllowance =
|
||||
await this.zeroEx.token.getProxyAllowanceAsync(this.zrxTokenAddress, takerAddress);
|
||||
const newTakerFeeAllowance = oldTakerFeeAllowance.plus(takerFee);
|
||||
await this.zeroEx.token.setProxyAllowanceAsync(
|
||||
this.zrxTokenAddress, takerAddress, newTakerFeeAllowance,
|
||||
);
|
||||
}
|
||||
await Promise.all([
|
||||
this.increaseBalanceAndAllowanceAsync(makerTokenAddress, makerAddress, makerFillableAmount),
|
||||
this.increaseBalanceAndAllowanceAsync(takerTokenAddress, takerAddress, takerFillableAmount),
|
||||
]);
|
||||
await Promise.all([
|
||||
this.increaseBalanceAndAllowanceAsync(this.zrxTokenAddress, makerAddress, makerFee),
|
||||
this.increaseBalanceAndAllowanceAsync(this.zrxTokenAddress, takerAddress, takerFee),
|
||||
]);
|
||||
|
||||
const signedOrder = await orderFactory.createSignedOrderAsync(this.zeroEx,
|
||||
makerAddress, takerAddress, makerFee, takerFee,
|
||||
@@ -109,4 +87,26 @@ export class FillScenarios {
|
||||
this.exchangeContractAddress, feeRecepient, expirationUnixTimestampSec);
|
||||
return signedOrder;
|
||||
}
|
||||
private async increaseBalanceAndAllowanceAsync(
|
||||
tokenAddress: string, address: string, amount: BigNumber.BigNumber): Promise<void> {
|
||||
if (amount.isZero()) {
|
||||
return; // noop
|
||||
}
|
||||
await Promise.all([
|
||||
this.increaseBalanceAsync(tokenAddress, address, amount),
|
||||
this.increaseAllowanceAsync(tokenAddress, address, amount),
|
||||
]);
|
||||
}
|
||||
private async increaseBalanceAsync(
|
||||
tokenAddress: string, address: string, amount: BigNumber.BigNumber): Promise<void> {
|
||||
await this.zeroEx.token.transferAsync(tokenAddress, this.coinbase, address, amount);
|
||||
}
|
||||
private async increaseAllowanceAsync(
|
||||
tokenAddress: string, address: string, amount: BigNumber.BigNumber): Promise<void> {
|
||||
const oldMakerAllowance = await this.zeroEx.token.getProxyAllowanceAsync(tokenAddress, address);
|
||||
const newMakerAllowance = oldMakerAllowance.plus(amount);
|
||||
await this.zeroEx.token.setProxyAllowanceAsync(
|
||||
tokenAddress, address, newMakerAllowance,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user