_getReceipts for all hashes

This commit is contained in:
Alexey 2020-09-29 16:57:57 +03:00
parent 7293e2691a
commit 7000e1fffa

@ -35,12 +35,6 @@ class TxManager {
this._web3.eth.defaultAccount = this.address this._web3.eth.defaultAccount = this.address
this._gasPriceOracle = new GasPriceOracle({ defaultRpc: rpcUrl }) this._gasPriceOracle = new GasPriceOracle({ defaultRpc: rpcUrl })
this._mutex = new Mutex() this._mutex = new Mutex()
this._blockSubscription = this._web3.eth.subscribe('newBlockHeaders', this.processNewBlock)
}
processNewBlock(error, block) {
this.currentBlock = block.number
} }
// todo get rid of it // todo get rid of it
@ -80,7 +74,9 @@ class Transaction {
async submit() { async submit() {
await this._prepare() await this._prepare()
return this._send() const _promiEvent = promiEvent()
this._send(_promiEvent)
return _promiEvent
} }
async _prepare() { async _prepare() {
@ -89,8 +85,7 @@ class Transaction {
this.tx.nonce = this.nonce this.tx.nonce = this.nonce
} }
async _send() { async _send(_promiEvent) {
const _promiEvent = promiEvent()
const signedTx = await this._web3.eth.accounts.signTransaction(this.tx, this.privateKey) const signedTx = await this._web3.eth.accounts.signTransaction(this.tx, this.privateKey)
this.tx.date = Date.now() this.tx.date = Date.now()
this.tx.hash = signedTx.transactionHash this.tx.hash = signedTx.transactionHash
@ -110,17 +105,20 @@ class Transaction {
await sleep(this.config.POLL_INTERVAL) await sleep(this.config.POLL_INTERVAL)
} }
// got mined, let's check // got mined, let's check
const receipt = await this._web3.eth.getTransactionReceipt(signedTx.transactionHash) let receipt = await this._getReceipts()
if (!receipt) { if (!receipt) {
// resubmit // resubmit
} }
let confirmations = this.currentBlock - receipt.blockNumber let currentBlock = await this._web3.eth.getBlockNumber()
let confirmations = currentBlock - receipt.blockNumber
while (confirmations < this.config.CONFIRMATIONS) { while (confirmations < this.config.CONFIRMATIONS) {
_promiEvent.emit('confirmations', confirmations) _promiEvent.emit('confirmations', confirmations)
await sleep(this.config.POLL_INTERVAL) await sleep(this.config.POLL_INTERVAL)
confirmations = this.currentBlock - receipt.blockNumber receipt = await this._getReceipts()
currentBlock = await this._web3.eth.getBlockNumber()
confirmations = currentBlock - receipt.blockNumber
} }
// we could have bumped nonce during execution, so get the latest one + 1 // we could have bumped nonce during execution, so get the latest one + 1
@ -128,8 +126,20 @@ class Transaction {
_promiEvent.resolve(receipt) _promiEvent.resolve(receipt)
} catch (e) { } catch (e) {
await this._handleSendError() await this._handleSendError()
// _promiEvent.reject(error) ?
} }
return _promiEvent.eventEmitter }
async _getReceipts() {
let receipt
for (const hash of this.hashes.reverse()) {
receipt = await this._web3.eth.getTransactionReceipt(hash)
if (receipt !== null) {
return receipt
}
}
return receipt
} }
/** /**