aboutsummaryrefslogtreecommitdiffstats
path: root/packages/web3-wrapper
diff options
context:
space:
mode:
authorAlex Browne <stephenalexbrowne@gmail.com>2018-05-24 09:12:41 +0800
committerGitHub <noreply@github.com>2018-05-24 09:12:41 +0800
commit2f7ab3e32d1c54f42c435503426bc421fa89afd8 (patch)
treedfa0fb838fb4b1bdb36a45eaa820351bfaf1f04f /packages/web3-wrapper
parent2f1a4042bf924cf5d07d724d5d1a1c0a2c181f4f (diff)
parentf6f2818a02d0ef1880f6e4391840659cc8dc2395 (diff)
downloaddexon-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.ts26
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);