diff options
author | Leonid Logvinov <logvinov.leon@gmail.com> | 2017-06-06 21:36:07 +0800 |
---|---|---|
committer | Leonid Logvinov <logvinov.leon@gmail.com> | 2017-06-06 21:36:07 +0800 |
commit | 8aa673aabe292e7d4684f7cc98ec6ef2ea55ca09 (patch) | |
tree | 355dfea06c3e9d1489dbcc91e4792aa506c06762 /src/contract_wrappers/exchange_wrapper.ts | |
parent | 403ec236fffb0ed565e7c933d3608b554c007613 (diff) | |
download | dexon-0x-contracts-8aa673aabe292e7d4684f7cc98ec6ef2ea55ca09.tar dexon-0x-contracts-8aa673aabe292e7d4684f7cc98ec6ef2ea55ca09.tar.gz dexon-0x-contracts-8aa673aabe292e7d4684f7cc98ec6ef2ea55ca09.tar.bz2 dexon-0x-contracts-8aa673aabe292e7d4684f7cc98ec6ef2ea55ca09.tar.lz dexon-0x-contracts-8aa673aabe292e7d4684f7cc98ec6ef2ea55ca09.tar.xz dexon-0x-contracts-8aa673aabe292e7d4684f7cc98ec6ef2ea55ca09.tar.zst dexon-0x-contracts-8aa673aabe292e7d4684f7cc98ec6ef2ea55ca09.zip |
Add initial implementation with success test
Diffstat (limited to 'src/contract_wrappers/exchange_wrapper.ts')
-rw-r--r-- | src/contract_wrappers/exchange_wrapper.ts | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/src/contract_wrappers/exchange_wrapper.ts b/src/contract_wrappers/exchange_wrapper.ts index d3a53a9f7..b8e34b9e8 100644 --- a/src/contract_wrappers/exchange_wrapper.ts +++ b/src/contract_wrappers/exchange_wrapper.ts @@ -9,9 +9,9 @@ import { ExchangeContractErrs, OrderValues, OrderAddresses, + Order, SignedOrder, ContractEvent, - ZeroExError, ExchangeEvents, SubscriptionOpts, IndexFilterValues, @@ -169,6 +169,53 @@ export class ExchangeWrapper extends ContractWrapper { this.throwErrorLogsAsErrors(response.logs); } /** + * Cancels the order. + */ + public async cancelOrderAsync(order: Order, cancelAmount: BigNumber.BigNumber): Promise<void> { + assert.doesConformToSchema('order', + SchemaValidator.convertToJSONSchemaCompatibleObject(order as object), + signedOrderSchema); + assert.isBigNumber('cancelAmount', cancelAmount); + await assert.isSenderAddressAvailableAsync(this.web3Wrapper, order.maker); + + const exchangeInstance = await this.getExchangeContractAsync(); + await this.validateCancelOrderAndThrowIfInvalidAsync(order, cancelAmount); + + const orderAddresses: OrderAddresses = [ + order.maker, + order.taker, + order.makerTokenAddress, + order.takerTokenAddress, + order.feeRecipient, + ]; + const orderValues: OrderValues = [ + order.makerTokenAmount, + order.takerTokenAmount, + order.makerFee, + order.takerFee, + order.expirationUnixTimestampSec, + order.salt, + ]; + const gas = await exchangeInstance.cancel.estimateGas( + orderAddresses, + orderValues, + cancelAmount, + { + from: order.maker, + }, + ); + const response: ContractResponse = await exchangeInstance.cancel( + orderAddresses, + orderValues, + cancelAmount, + { + from: order.maker, + gas, + }, + ); + this.throwErrorLogsAsErrors(response.logs); + } + /** * Subscribe to an event type emitted by the Exchange smart contract */ public async subscribeAsync(eventName: ExchangeEvents, subscriptionOpts: SubscriptionOpts, @@ -225,6 +272,10 @@ export class ExchangeWrapper extends ContractWrapper { throw new Error(ExchangeContractErrs.ORDER_FILL_ROUNDING_ERROR); } } + private async validateCancelOrderAndThrowIfInvalidAsync(order: Order, + cancelAmount: BigNumber.BigNumber): Promise<void> { + // TODO + } /** * This method does not currently validate the edge-case where the makerToken or takerToken is also the token used |