diff options
author | Alex Browne <stephenalexbrowne@gmail.com> | 2018-05-24 09:12:41 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-24 09:12:41 +0800 |
commit | 2f7ab3e32d1c54f42c435503426bc421fa89afd8 (patch) | |
tree | dfa0fb838fb4b1bdb36a45eaa820351bfaf1f04f /packages/web3-wrapper | |
parent | 2f1a4042bf924cf5d07d724d5d1a1c0a2c181f4f (diff) | |
parent | f6f2818a02d0ef1880f6e4391840659cc8dc2395 (diff) | |
download | dexon-sol-tools-2f7ab3e32d1c54f42c435503426bc421fa89afd8.tar dexon-sol-tools-2f7ab3e32d1c54f42c435503426bc421fa89afd8.tar.gz dexon-sol-tools-2f7ab3e32d1c54f42c435503426bc421fa89afd8.tar.bz2 dexon-sol-tools-2f7ab3e32d1c54f42c435503426bc421fa89afd8.tar.lz dexon-sol-tools-2f7ab3e32d1c54f42c435503426bc421fa89afd8.tar.xz dexon-sol-tools-2f7ab3e32d1c54f42c435503426bc421fa89afd8.tar.zst dexon-sol-tools-2f7ab3e32d1c54f42c435503426bc421fa89afd8.zip |
Merge pull request #613 from 0xProject/check-tx-receipt-status
Check transaction receipt status
Diffstat (limited to 'packages/web3-wrapper')
-rw-r--r-- | packages/web3-wrapper/src/web3_wrapper.ts | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/packages/web3-wrapper/src/web3_wrapper.ts b/packages/web3-wrapper/src/web3_wrapper.ts index 91a1af870..40a554522 100644 --- a/packages/web3-wrapper/src/web3_wrapper.ts +++ b/packages/web3-wrapper/src/web3_wrapper.ts @@ -328,6 +328,10 @@ export class Web3Wrapper { } /** * Waits for a transaction to be mined and returns the transaction receipt. + * Note that just because a transaction was mined does not mean it was + * successful. You need to check the status code of the transaction receipt + * to find out if it was successful, or use the helper method + * awaitTransactionSuccessAsync. * @param txHash Transaction hash * @param pollingIntervalMs How often (in ms) should we check if the transaction is mined. * @param timeoutMs How long (in ms) to poll for transaction mined until aborting. @@ -377,6 +381,28 @@ export class Web3Wrapper { const txReceipt = await txReceiptPromise; return txReceipt; } + /** + * Waits for a transaction to be mined and returns the transaction receipt. + * Unlike awaitTransactionMinedAsync, it will throw if the receipt has a + * status that is not equal to 1. A status of 0 or null indicates that the + * transaction was mined, but failed. See: + * https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethgettransactionreceipt + * @param txHash Transaction hash + * @param pollingIntervalMs How often (in ms) should we check if the transaction is mined. + * @param timeoutMs How long (in ms) to poll for transaction mined until aborting. + * @return Transaction receipt with decoded log args. + */ + public async awaitTransactionSuccessAsync( + txHash: string, + pollingIntervalMs: number = 1000, + timeoutMs?: number, + ): Promise<TransactionReceiptWithDecodedLogs> { + const receipt = await this.awaitTransactionMinedAsync(txHash, pollingIntervalMs, timeoutMs); + if (receipt.status !== 1) { + throw new Error(`Transaction failed: ${txHash}`); + } + return receipt; + } private async _sendRawPayloadAsync<A>(payload: Partial<JSONRPCRequestPayload>): Promise<A> { const sendAsync = this._web3.currentProvider.sendAsync.bind(this._web3.currentProvider); const response = await promisify<JSONRPCResponsePayload>(sendAsync)(payload); |