UNPKG

web3x

Version:

Typescript port of web3.js

93 lines (90 loc) 6.63 kB
"use strict"; /* This file is part of web3x. web3x is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. web3x is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with web3x. If not, see <http://www.gnu.org/licenses/>. */ Object.defineProperty(exports, "__esModule", { value: true }); class SentTransaction { constructor(eth, txHashPromise) { this.eth = eth; this.txHashPromise = txHashPromise; this.blocksSinceSent = 0; } async getTxHash() { return this.txHashPromise; } async getReceipt(numConfirmations = 1, confirmationCallback) { if (this.receipt) { return this.receipt; } return new Promise(async (resolve, reject) => { try { const txHash = await this.getTxHash(); this.receipt = await this.eth.getTransactionReceipt(txHash); if (this.receipt) { this.receipt = await this.handleReceipt(this.receipt); if (numConfirmations === 1) { if (confirmationCallback) { confirmationCallback(1, this.receipt); } resolve(this.receipt); return; } } this.eth .subscribe('newBlockHeaders') .on('data', async (blockHeader, sub) => { try { this.blocksSinceSent++; if (!this.receipt) { this.receipt = await this.eth.getTransactionReceipt(txHash); if (this.receipt) { this.receipt = await this.handleReceipt(this.receipt); } } if (!this.receipt) { if (this.blocksSinceSent > 50) { sub.unsubscribe(); reject(new Error('No receipt after 50 blocks.')); } return; } const confirmations = 1 + blockHeader.number - this.receipt.blockNumber; if (confirmationCallback) { confirmationCallback(confirmations, this.receipt); } if (confirmations >= numConfirmations) { sub.unsubscribe(); resolve(this.receipt); } } catch (err) { sub.unsubscribe(); reject(err); } }) .on('error', reject); } catch (err) { reject(err); } }); } async handleReceipt(receipt) { if (receipt.status === false) { throw new Error('Transaction has been reverted by the EVM.'); } return receipt; } } exports.SentTransaction = SentTransaction; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC10eC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ldGgvc2VuZC10eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7OztFQWVFOztBQWNGLE1BQWEsZUFBZTtJQUkxQixZQUFzQixHQUFRLEVBQVksYUFBdUM7UUFBM0QsUUFBRyxHQUFILEdBQUcsQ0FBSztRQUFZLGtCQUFhLEdBQWIsYUFBYSxDQUEwQjtRQUZ6RSxvQkFBZSxHQUFHLENBQUMsQ0FBQztJQUV3RCxDQUFDO0lBRTlFLEtBQUssQ0FBQyxTQUFTO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVUsQ0FDckIsbUJBQTJCLENBQUMsRUFDNUIsb0JBQTBFO1FBRTFFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDckI7UUFFRCxPQUFPLElBQUksT0FBTyxDQUFxQixLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQy9ELElBQUk7Z0JBQ0YsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUU1RCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ2hCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDdEQsSUFBSSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUU7d0JBQzFCLElBQUksb0JBQW9CLEVBQUU7NEJBQ3hCLG9CQUFvQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7eUJBQ3ZDO3dCQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ3RCLE9BQU87cUJBQ1I7aUJBQ0Y7Z0JBRUQsSUFBSSxDQUFDLEdBQUc7cUJBQ0wsU0FBUyxDQUFDLGlCQUFpQixDQUFDO3FCQUM1QixFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFnQyxFQUFFLEdBQUcsRUFBRSxFQUFFO29CQUMxRCxJQUFJO3dCQUNGLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzt3QkFFdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7NEJBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDOzRCQUM1RCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0NBQ2hCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzs2QkFDdkQ7eUJBQ0Y7d0JBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7NEJBQ2pCLElBQUksSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLEVBQUU7Z0NBQzdCLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQ0FDbEIsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQzs2QkFDbEQ7NEJBQ0QsT0FBTzt5QkFDUjt3QkFFRCxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQzt3QkFFekUsSUFBSSxvQkFBb0IsRUFBRTs0QkFDeEIsb0JBQW9CLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt5QkFDbkQ7d0JBRUQsSUFBSSxhQUFhLElBQUksZ0JBQWdCLEVBQUU7NEJBQ3JDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQzs0QkFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt5QkFDdkI7cUJBQ0Y7b0JBQUMsT0FBTyxHQUFHLEVBQUU7d0JBQ1osR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO3dCQUNsQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ2I7Z0JBQ0gsQ0FBQyxDQUFDO3FCQUNELEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDeEI7WUFBQyxPQUFPLEdBQUcsRUFBRTtnQkFDWixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDYjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBMkI7UUFDdkQsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRTtZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0Y7QUFuRkQsMENBbUZDIn0=