diff options
author | Leonid Logvinov <logvinov.leon@gmail.com> | 2017-09-05 01:08:14 +0800 |
---|---|---|
committer | Leonid Logvinov <logvinov.leon@gmail.com> | 2017-09-05 01:08:14 +0800 |
commit | c9e490bdaec53e3a93b5da8daaaf0b1d87d9de76 (patch) | |
tree | 49aa1f687e3b0727ff9a00815848c92cb64311f3 | |
parent | 6325a038188293658ad3d209cb95a2741911f5b9 (diff) | |
download | dexon-sol-tools-c9e490bdaec53e3a93b5da8daaaf0b1d87d9de76.tar dexon-sol-tools-c9e490bdaec53e3a93b5da8daaaf0b1d87d9de76.tar.gz dexon-sol-tools-c9e490bdaec53e3a93b5da8daaaf0b1d87d9de76.tar.bz2 dexon-sol-tools-c9e490bdaec53e3a93b5da8daaaf0b1d87d9de76.tar.lz dexon-sol-tools-c9e490bdaec53e3a93b5da8daaaf0b1d87d9de76.tar.xz dexon-sol-tools-c9e490bdaec53e3a93b5da8daaaf0b1d87d9de76.tar.zst dexon-sol-tools-c9e490bdaec53e3a93b5da8daaaf0b1d87d9de76.zip |
Implement zeroEx.awaitTransactionMined
-rw-r--r-- | src/0x.ts | 14 | ||||
-rw-r--r-- | src/web3_wrapper.ts | 4 | ||||
-rw-r--r-- | test/exchange_wrapper_test.ts | 8 | ||||
-rw-r--r-- | test/utils/blockchain_lifecycle.ts | 3 |
4 files changed, 22 insertions, 7 deletions
@@ -1,5 +1,6 @@ import * as _ from 'lodash'; import * as BigNumber from 'bignumber.js'; +import * as Web3 from 'web3'; import {SchemaValidator, schemas} from '0x-json-schemas'; import {bigNumberConfigs} from './bignumber_config'; import * as ethUtil from 'ethereumjs-util'; @@ -248,4 +249,17 @@ export class ZeroEx { throw new Error(ZeroExError.InvalidSignature); } + public async awaitTransactionMined(txHash: string, + pollingIntervalMs: number = 500): Promise<Web3.TransactionReceipt> { + const txReceiptPromise = new Promise((resolve: (receipt: Web3.TransactionReceipt) => void, reject) => { + const intervalId = setInterval(async () => { + const transactionReceipt = await this._web3Wrapper.getTransactionReceiptAsync(txHash); + if (!_.isNull(transactionReceipt)) { + clearInterval(intervalId); + resolve(transactionReceipt); + } + }, pollingIntervalMs); + }); + return txReceiptPromise; + } } diff --git a/src/web3_wrapper.ts b/src/web3_wrapper.ts index 129017e7c..f3fe8a00b 100644 --- a/src/web3_wrapper.ts +++ b/src/web3_wrapper.ts @@ -27,6 +27,10 @@ export class Web3Wrapper { const nodeVersion = await promisify(this.web3.version.getNode)(); return nodeVersion; } + public async getTransactionReceiptAsync(txHash: string): Promise<Web3.TransactionReceipt> { + const transactionReceipt = await promisify(this.web3.eth.getTransactionReceipt)(txHash); + return transactionReceipt; + } public getCurrentProvider(): Web3.Provider { return this.web3.currentProvider; } diff --git a/test/exchange_wrapper_test.ts b/test/exchange_wrapper_test.ts index 15e957ee1..99e61a751 100644 --- a/test/exchange_wrapper_test.ts +++ b/test/exchange_wrapper_test.ts @@ -205,7 +205,7 @@ describe('ExchangeWrapper', () => { ); const txHash = await zeroEx.exchange.fillOrderAsync( signedOrder, fillTakerAmount, shouldThrowOnInsufficientBalanceOrAllowance, takerAddress); - await blockchainLifecycle.waitUntilMinedAsync(txHash); + await zeroEx.awaitTransactionMined(txHash); expect(await zeroEx.token.getBalanceAsync(zrxTokenAddress, feeRecipient)) .to.be.bignumber.equal(makerFee.plus(takerFee)); }); @@ -246,7 +246,7 @@ describe('ExchangeWrapper', () => { it('should successfully fill multiple orders', async () => { const txHash = await zeroEx.exchange.batchFillOrdersAsync( orderFillBatch, shouldThrowOnInsufficientBalanceOrAllowance, takerAddress); - await blockchainLifecycle.waitUntilMinedAsync(txHash); + await zeroEx.awaitTransactionMined(txHash); const filledAmount = await zeroEx.exchange.getFilledTakerAmountAsync(signedOrderHashHex); const anotherFilledAmount = await zeroEx.exchange.getFilledTakerAmountAsync(anotherOrderHashHex); expect(filledAmount).to.be.bignumber.equal(fillTakerAmount); @@ -282,7 +282,7 @@ describe('ExchangeWrapper', () => { const txHash = await zeroEx.exchange.fillOrdersUpToAsync( signedOrders, fillUpToAmount, shouldThrowOnInsufficientBalanceOrAllowance, takerAddress, ); - await blockchainLifecycle.waitUntilMinedAsync(txHash); + await zeroEx.awaitTransactionMined(txHash); const filledAmount = await zeroEx.exchange.getFilledTakerAmountAsync(signedOrderHashHex); const anotherFilledAmount = await zeroEx.exchange.getFilledTakerAmountAsync(anotherOrderHashHex); expect(filledAmount).to.be.bignumber.equal(fillableAmount); @@ -316,7 +316,7 @@ describe('ExchangeWrapper', () => { describe('successful cancels', () => { it('should cancel an order', async () => { const txHash = await zeroEx.exchange.cancelOrderAsync(signedOrder, cancelAmount); - await blockchainLifecycle.waitUntilMinedAsync(txHash); + await zeroEx.awaitTransactionMined(txHash); const cancelledAmount = await zeroEx.exchange.getCanceledTakerAmountAsync(orderHashHex); expect(cancelledAmount).to.be.bignumber.equal(cancelAmount); }); diff --git a/test/utils/blockchain_lifecycle.ts b/test/utils/blockchain_lifecycle.ts index b4f742e63..50eb57b95 100644 --- a/test/utils/blockchain_lifecycle.ts +++ b/test/utils/blockchain_lifecycle.ts @@ -17,7 +17,4 @@ export class BlockchainLifecycle { throw new Error(`Snapshot with id #${this.snapshotId} failed to revert`); } } - public async waitUntilMinedAsync(txHash: string): Promise<void> { - return undefined; - } } |