Skip to content

Commit 40f907d

Browse files
yann300Aniket-Engg
authored andcommitted
set the provider only when it is initiated
1 parent e5c6921 commit 40f907d

File tree

3 files changed

+78
-17
lines changed

3 files changed

+78
-17
lines changed

apps/remix-ide-e2e/src/tests/transactionExecution.test.ts

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,28 @@ module.exports = {
213213
'uint256 num': '24'
214214
}
215215
})
216-
.end()
216+
},
217+
218+
'Should switch to the mainnet VM fork and execute a tx to query ENS #group5': function (browser: NightwatchBrowser) {
219+
let addressRef
220+
browser
221+
.addFile('mainnet_ens.sol', sources[7]['mainnet_ens.sol'])
222+
.clickLaunchIcon('solidity')
223+
.setSolidityCompilerVersion('soljson-v0.8.17+commit.8df45f5f.js')
224+
.clickLaunchIcon('udapp')
225+
.switchEnvironment('vm-mainnet-fork')
226+
.waitForElementPresent('select[data-id="runTabSelectAccount"] option[value="0xdD870fA1b7C4700F2BD7f44238821C26f7392148"]') // wait for the udapp to load the list of accounts
227+
.selectContract('MyResolver')
228+
.createContract('')
229+
.clickInstance(0)
230+
.getAddressAtPosition(0, (address) => {
231+
addressRef = address
232+
})
233+
.clickFunction('resolve - call')
234+
.perform((done) => {
235+
browser.verifyCallReturnValue(addressRef, ['0:address: 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'])
236+
.perform(() => done())
237+
})
217238
}
218239
}
219240

@@ -431,5 +452,31 @@ contract C {
431452
}
432453
}`
433454
}
455+
}, {
456+
'mainnet_ens.sol': {
457+
content:
458+
`
459+
import "https://github.com/ensdomains/ens-contracts/blob/master/contracts/utils/NameEncoder.sol";
460+
461+
abstract contract ENS {
462+
function resolver(bytes32 node) public virtual view returns (Resolver);
463+
}
464+
465+
abstract contract Resolver {
466+
function addr(bytes32 node) public virtual view returns (address);
467+
}
468+
469+
contract MyResolver {
470+
// Same address for Mainet, Ropsten, Rinkerby, Gorli and other networks;
471+
ENS ens = ENS(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e);
472+
473+
function resolve() public view returns(address) {
474+
(,bytes32 node) = NameEncoder.dnsEncodeName("vitalik.eth");
475+
Resolver resolver = ens.resolver(node);
476+
return resolver.addr(node);
477+
}
478+
}
479+
`
480+
}
434481
}
435482
]

apps/remix-ide/src/blockchain/providers/vm.js

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,27 +24,30 @@ class VMProvider {
2424
this.worker = new Worker(new URL('./worker-vm', import.meta.url))
2525
const provider = this.executionContext.getProviderObject()
2626

27-
this.worker.postMessage({ cmd: 'init', fork: this.executionContext.getCurrentFork(), nodeUrl: provider?.options['nodeUrl'], blockNumber: provider?.options['blockNumber']})
28-
2927
let incr = 0
3028
const stamps = {}
3129
this.worker.addEventListener('message', (msg) => {
32-
if (stamps[msg.data.stamp]) {
30+
if (msg.data.cmd === 'sendAsyncResult' && stamps[msg.data.stamp]) {
3331
stamps[msg.data.stamp](msg.data.error, msg.data.result)
32+
} else if (msg.data.cmd === 'initiateResult') {
33+
if (!msg.data.error) {
34+
this.provider = {
35+
sendAsync: (query, callback) => {
36+
const stamp = Date.now() + incr
37+
incr++
38+
stamps[stamp] = callback
39+
this.worker.postMessage({ cmd: 'sendAsync', query, stamp })
40+
}
41+
}
42+
this.web3 = new Web3(this.provider)
43+
extend(this.web3)
44+
this.accounts = {}
45+
this.executionContext.setWeb3(this.executionContext.getProvider(), this.web3)
46+
}
3447
}
3548
})
36-
this.provider = {
37-
sendAsync: (query, callback) => {
38-
const stamp = Date.now() + incr
39-
incr++
40-
stamps[stamp] = callback
41-
this.worker.postMessage({ cmd: 'sendAsync', query, stamp })
42-
}
43-
}
44-
this.web3 = new Web3(this.provider)
45-
extend(this.web3)
46-
this.accounts = {}
47-
this.executionContext.setWeb3(this.executionContext.getProvider(), this.web3)
49+
50+
this.worker.postMessage({ cmd: 'init', fork: this.executionContext.getCurrentFork(), nodeUrl: provider?.options['nodeUrl'], blockNumber: provider?.options['blockNumber']})
4851
}
4952

5053
// TODO: is still here because of the plugin API

apps/remix-ide/src/blockchain/providers/worker-vm.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,18 @@ self.onmessage = (e: MessageEvent) => {
77
case 'init':
88
{
99
provider = new Provider({ fork: data.fork, nodeUrl: data.nodeUrl, blockNumber: data.blockNumber })
10-
if (provider) provider.init()
10+
provider.init().then(() => {
11+
self.postMessage({
12+
cmd: 'initiateResult',
13+
stamp: data.stamp
14+
})
15+
}).catch((error) => {
16+
self.postMessage({
17+
cmd: 'initiateResult',
18+
error,
19+
stamp: data.stamp
20+
})
21+
})
1122
break
1223
}
1324
case 'sendAsync':

0 commit comments

Comments
 (0)