fix listen on transactions

compilertrigger^2
yann300 2 years ago committed by Aniket
parent 660af26643
commit 3d54c20e42
  1. 25
      apps/remix-ide-e2e/src/tests/terminal.test.ts
  2. 35
      libs/remix-lib/src/execution/txListener.ts
  3. 1
      libs/remix-ui/terminal/src/lib/remix-ui-terminal.tsx

@ -217,13 +217,30 @@ module.exports = {
.addFile('scripts/log_tx_block.js', { content: scriptBlockAndTransaction } ) .addFile('scripts/log_tx_block.js', { content: scriptBlockAndTransaction } )
.pause(1000) .pause(1000)
.executeScriptInTerminal('remix.execute(\'scripts/log_tx_block.js\')') .executeScriptInTerminal('remix.execute(\'scripts/log_tx_block.js\')')
.pause(10000)
// check if the input of the transaction is being logged (web3 call) // check if the input of the transaction is being logged (web3 call)
.journalChildIncludes('0x775526410000000000000000000000000000000000000000000000000000000000000060464c0335b2f1609abd9de25141c0a3b49db516fc7375970dc737c32b986e88e3000000000000000000000000000000000000000000000000000000000000039e000000000000000000000000000000000000000000000000000000000000000602926b30b10e7a514d92bc71e085f5bff2687fac2856ae43ef7621bf1756fa370516d310bec5727543089be9a4d5f68471174ee528e95a2520b0ca36c2b6c6eb0000000000000000000000000000000000000000000000000000000000046f49036f5e4ea4dd042801c8841e3db8e654124305da0f11824fc1db60c405dbb39f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000') .waitForElementContainsText('*[data-id="terminalJournal"]', '0x775526410000000000000000000000000000000000000000000000000000000000000060464c0335b2f1609abd9de25141c0a3b49db516fc7375970dc737c32b986e88e3000000000000000000000000000000000000000000000000000000000000039e000000000000000000000000000000000000000000000000000000000000000602926b30b10e7a514d92bc71e085f5bff2687fac2856ae43ef7621bf1756fa370516d310bec5727543089be9a4d5f68471174ee528e95a2520b0ca36c2b6c6eb0000000000000000000000000000000000000000000000000000000000046f49036f5e4ea4dd042801c8841e3db8e654124305da0f11824fc1db60c405dbb39f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 120000)
// check if the logsBloom is being logged (web3 call) // check if the logsBloom is being logged (web3 call)
.journalChildIncludes('0x00000000000000000000000000100000000000000000020000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000040000000060000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000100000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000001') .waitForElementContainsText('*[data-id="terminalJournal"]', '0x00000000000000000000000000100000000000000000020000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000040000000060000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000100000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000001', 120000)
// check if the logsBloom is being logged (ethers.js call) // check if the logsBloom is being logged (ethers.js call)
.journalChildIncludes('"hex":"0x025cd8"') .waitForElementContainsText('*[data-id="terminalJournal"]', '"hex":"0x025cd8"', 120000)
},
'Should listen on all transactions #group7': function (browser: NightwatchBrowser) {
browser // it's already connected to goerli
.click('[data-id="terminalClearConsole"]') // clear the console
.click('[data-id="listenNetworkCheckInput"]') // start to listen
.waitForElementContainsText('*[data-id="terminalJournal"]', 'from:', 200000)
.waitForElementContainsText('*[data-id="terminalJournal"]', 'to:', 200000)
.click('[data-id="terminalClearConsole"]') // clear the console
.waitForElementContainsText('*[data-id="terminalJournal"]', 'from:', 200000)
.waitForElementContainsText('*[data-id="terminalJournal"]', 'to:', 200000)
.click('[data-id="listenNetworkCheckInput"]') // stop to listen
.pause(20000)
.execute(function () {
return (document.querySelector('[data-id="terminalJournal"]') as any).innerText
}, [], function (result) {
browser.assert.equal(result.value, '', 'terminal log should be empty')
})
} }
} }

@ -34,7 +34,6 @@ export class TxListener {
_listenOnNetwork:boolean _listenOnNetwork:boolean
_loopId _loopId
blocks blocks
lastBlock
constructor (opt, executionContext) { constructor (opt, executionContext) {
this.event = new EventManager() this.event = new EventManager()
@ -123,9 +122,7 @@ export class TxListener {
if (this._loopId) { if (this._loopId) {
clearInterval(this._loopId) clearInterval(this._loopId)
} }
if (this._listenOnNetwork) { this._listenOnNetwork ? this._startListenOnNetwork() : this.stopListening()
this._startListenOnNetwork()
}
} }
/** /**
@ -133,7 +130,6 @@ export class TxListener {
*/ */
init () { init () {
this.blocks = [] this.blocks = []
this.lastBlock = -1
} }
/** /**
@ -164,26 +160,33 @@ export class TxListener {
this._isListening = false this._isListening = false
} }
_startListenOnNetwork () { async _startListenOnNetwork () {
let lastSeenBlock = this.executionContext.lastBlock?.number
this._loopId = setInterval(() => { this._loopId = setInterval(() => {
const currentLoopId = this._loopId const currentLoopId = this._loopId
this.executionContext.web3().eth.getBlockNumber((error, blockNumber) => {
if (this._loopId === null) return if (this._loopId === null) return
if (error) return console.log(error) if (!lastSeenBlock) {
if (currentLoopId === this._loopId && blockNumber > this.lastBlock) { lastSeenBlock = this.executionContext.lastBlock?.number // trying to resynchronize
let current = this.lastBlock + 1 console.log('listen on blocks, resynchronising')
this.lastBlock = blockNumber return
while (blockNumber >= current) { }
const current = this.executionContext.lastBlock?.number
if (!current) {
console.error(new Error('no last block found'))
return
}
if (currentLoopId === this._loopId && lastSeenBlock < current) {
while (lastSeenBlock <= current) {
try { try {
this._manageBlock(current) this._manageBlock(lastSeenBlock)
} catch (e) { } catch (e) {
console.log(e) console.log(e)
} }
current++ lastSeenBlock++
} }
lastSeenBlock = current
} }
}) }, 10000)
}, 2000)
} }
_manageBlock (blockNumber) { _manageBlock (blockNumber) {

@ -461,6 +461,7 @@ export const RemixUiTerminal = (props: RemixUiTerminalProps) => {
className="pt-1 form-check-label custom-control-label text-nowrap" className="pt-1 form-check-label custom-control-label text-nowrap"
title="If checked Remix will listen on all transactions mined in the current environment and not only transactions created by you" title="If checked Remix will listen on all transactions mined in the current environment and not only transactions created by you"
htmlFor="listenNetworkCheck" htmlFor="listenNetworkCheck"
data-id="listenNetworkCheckInput"
> >
listen on all transactions listen on all transactions
</label> </label>

Loading…
Cancel
Save