Skip to content

Commit d5f6da3

Browse files
jrainvilleiurimatias
authored andcommitted
fix(ens/web3): use blockchain connector for ens and fix global web3
Use the blockchain connector for the ENS module to remove direct web3 usages Fix global web3 being overidden by the code generator
1 parent 604e267 commit d5f6da3

File tree

6 files changed

+61
-85
lines changed

6 files changed

+61
-85
lines changed

src/lib/modules/blockchain_connector/embarkjs.js

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
const __embarkWeb3 = {};
44

5-
__embarkWeb3.init = function (_config) {
6-
this.web3 = new Web3();
7-
if (!global.web3) {
8-
global.web3 = this.web3;
9-
}
5+
__embarkWeb3.init = function(_config) {
6+
this.web3 = global.web3 || new Web3();
7+
global.web3 = global.web3 || this.web3;
8+
};
9+
10+
__embarkWeb3.getInstance = function () {
11+
return this.web3;
1012
};
1113

1214
__embarkWeb3.getAccounts = function () {
@@ -45,4 +47,8 @@ __embarkWeb3.toWei = function () {
4547
return this.web3.toWei(...arguments);
4648
};
4749

50+
__embarkWeb3.getNetworkId = function () {
51+
return this.web3.eth.net.getId();
52+
};
53+
4854

src/lib/modules/code_generator/index.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,6 @@ class CodeGenerator {
371371
code += "\n if (typeof web3 === 'undefined') {";
372372
code += "\n var web3 = new Web3();\n";
373373
code += "\n }";
374-
code += "\nglobal.web3 = web3;\n";
375374

376375
let providerCode = self.generateProvider(false);
377376
code += providerCode;

src/lib/modules/ens/ENSFunctions.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
/*global web3*/
21
const namehash = require('eth-ens-namehash');
32
// Price of ENS registration contract functions
43
const ENS_GAS_PRICE = 700000;
@@ -8,7 +7,7 @@ const reverseAddressSuffix = '.addr.reverse';
87
const NoDecodeAddrErr = 'Error: Couldn\'t decode address from ABI: 0x';
98
const NoDecodeStringErr = 'ERROR: The returned value is not a convertible string: 0x0';
109

11-
function registerSubDomain(ens, registrar, resolver, defaultAccount, subdomain, rootDomain, reverseNode, address, logger, secureSend, callback) {
10+
function registerSubDomain(web3, ens, registrar, resolver, defaultAccount, subdomain, rootDomain, reverseNode, address, logger, secureSend, callback) {
1211
const subnode = namehash.hash(subdomain);
1312
const rootNode = namehash.hash(rootDomain);
1413
const node = namehash.hash(`${subdomain}.${rootDomain}`);

src/lib/modules/ens/embarkjs.js

Lines changed: 37 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/*global EmbarkJS, web3, registerSubDomain, namehash*/
1+
/*global EmbarkJS, Web3, registerSubDomain, namehash*/
22

33
let __embarkENS = {};
44

@@ -153,13 +153,25 @@ __embarkENS.setProvider = function (config) {
153153
self.registration = config.registration;
154154
self.env = config.env;
155155
EmbarkJS.onReady(() => {
156-
web3.eth.net.getId()
156+
EmbarkJS.Blockchain.blockchainConnector.getNetworkId()
157157
.then((id) => {
158158
const registryAddress = self.registryAddresses[id] || config.registryAddress;
159159
self._isAvailable = true;
160-
self.ens = new EmbarkJS.Blockchain.Contract({abi: config.registryAbi, address: registryAddress, web3: web3});
161-
self.registrar = new EmbarkJS.Blockchain.Contract({abi: config.registrarAbi, address: config.registrarAddress, web3: web3});
162-
self.resolver = new EmbarkJS.Blockchain.Contract({abi: config.resolverAbi, address: config.resolverAddress, web3: web3});
160+
self.ens = new EmbarkJS.Blockchain.Contract({
161+
abi: config.registryAbi,
162+
address: registryAddress,
163+
web3: EmbarkJS.Blockchain.blockchainConnector.getInstance()
164+
});
165+
self.registrar = new EmbarkJS.Blockchain.Contract({
166+
abi: config.registrarAbi,
167+
address: config.registrarAddress,
168+
web3: EmbarkJS.Blockchain.blockchainConnector.getInstance()
169+
});
170+
self.resolver = new EmbarkJS.Blockchain.Contract({
171+
abi: config.resolverAbi,
172+
address: config.resolverAddress,
173+
web3: EmbarkJS.Blockchain.blockchainConnector.getInstance()
174+
});
163175
})
164176
.catch(err => {
165177
if (err.message.indexOf('Provider not set or invalid') > -1) {
@@ -188,7 +200,7 @@ __embarkENS.resolve = function (name, callback) {
188200
if (!this.ens) {
189201
resolveOrReject(providerNotSetError);
190202
}
191-
if (!web3.eth.defaultAccount) {
203+
if (!EmbarkJS.Blockchain.blockchainConnector.getDefaultAccount()) {
192204
resolveOrReject(defaultAccountNotSetError);
193205
}
194206

@@ -201,7 +213,7 @@ __embarkENS.resolve = function (name, callback) {
201213
let resolverContract = new EmbarkJS.Blockchain.Contract({
202214
abi: this.resolverInterface,
203215
address: resolvedAddress,
204-
web3: web3
216+
web3: EmbarkJS.Blockchain.blockchainConnector.getInstance()
205217
});
206218
resolverContract.methods.addr(node).call(resolveOrReject);
207219
}).catch(resolveOrReject);
@@ -225,15 +237,15 @@ __embarkENS.lookup = function (address, callback) {
225237
return resolveOrReject(providerNotSetError);
226238
}
227239

228-
if (!web3.eth.defaultAccount) {
240+
if (!EmbarkJS.Blockchain.blockchainConnector.getDefaultAccount()) {
229241
return resolveOrReject(defaultAccountNotSetError);
230242
}
231243

232244
if (address.startsWith("0x")) {
233245
address = address.slice(2);
234246
}
235247

236-
let node = web3.utils.soliditySha3(address.toLowerCase() + reverseAddrSuffix);
248+
let node = Web3.utils.soliditySha3(address.toLowerCase() + reverseAddrSuffix);
237249

238250
this.ens.methods.resolver(node).call().then(resolverAddress => {
239251
if (resolverAddress === voidAddress) {
@@ -242,7 +254,7 @@ __embarkENS.lookup = function (address, callback) {
242254
const resolverContract = new EmbarkJS.Blockchain.Contract({
243255
abi: this.resolverInterface,
244256
address: resolverAddress,
245-
web3: web3
257+
web3: EmbarkJS.Blockchain.blockchainConnector.getInstance()
246258
});
247259
resolverContract.methods.name(node).call(resolveOrReject);
248260
}).catch(resolveOrReject);
@@ -252,7 +264,7 @@ __embarkENS.lookup = function (address, callback) {
252264
__embarkENS.registerSubDomain = function (name, address, callback) {
253265
callback = callback || function () {};
254266

255-
if (!web3.eth.defaultAccount) {
267+
if (!EmbarkJS.Blockchain.blockchainConnector.getDefaultAccount()) {
256268
return callback(defaultAccountNotSetError);
257269
}
258270

@@ -262,13 +274,24 @@ __embarkENS.registerSubDomain = function (name, address, callback) {
262274
if (!this.registration || !this.registration.rootDomain) {
263275
return callback('No rootDomain is declared in config/namesystem.js (register.rootDomain). Unable to register a subdomain until then.');
264276
}
265-
if (!address || !web3.utils.isAddress(address)) {
277+
if (!address || !Web3.utils.isAddress(address)) {
266278
return callback('You need to specify a valid address for the subdomain');
267279
}
268280

269281
// Register function generated by the index
270-
registerSubDomain(this.ens, this.registrar, this.resolver, web3.eth.defaultAccount, name, this.registration.rootDomain,
271-
web3.utils.soliditySha3(address.toLowerCase().substr(2) + reverseAddrSuffix), address, console, EmbarkJS.Utils.secureSend, (err, result) => {
282+
registerSubDomain(
283+
EmbarkJS.Blockchain.blockchainConnector.getInstance(),
284+
this.ens,
285+
this.registrar,
286+
this.resolver,
287+
EmbarkJS.Blockchain.blockchainConnector.getDefaultAccount(),
288+
name,
289+
this.registration.rootDomain,
290+
Web3.utils.soliditySha3(address.toLowerCase().substr(2) + reverseAddrSuffix),
291+
address,
292+
console,
293+
EmbarkJS.Utils.secureSend,
294+
(err, result) => {
272295
if (err && err.indexOf('Transaction has been reverted by the EVM') > -1) {
273296
return callback('Registration was rejected. Are you the owner of the root domain?');
274297
}

src/lib/modules/ens/index.js

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -281,8 +281,10 @@ class ENS {
281281
}
282282

283283
registerSubDomain(defaultAccount, subDomainName, reverseNode, address, secureSend, cb) {
284-
ENSFunctions.registerSubDomain(this.ensContract, this.registrarContract, this.resolverContract, defaultAccount,
285-
subDomainName, this.registration.rootDomain, reverseNode, address, this.logger, secureSend, cb);
284+
this.events.request("blockchain:get", (web3) => {
285+
ENSFunctions.registerSubDomain(web3, this.ensContract, this.registrarContract, this.resolverContract, defaultAccount,
286+
subDomainName, this.registration.rootDomain, reverseNode, address, this.logger, secureSend, cb);
287+
});
286288
}
287289

288290
createResolverContract(config, callback) {
@@ -311,7 +313,7 @@ class ENS {
311313
}
312314
], function (error, address) {
313315
if (error) {
314-
return res.send({error: error.message});
316+
return res.send({error: error.message || error});
315317
}
316318
res.send({address});
317319
});
@@ -328,7 +330,7 @@ class ENS {
328330
}
329331
], function (error, name) {
330332
if (error) {
331-
return res.send({error: error || error.message});
333+
return res.send({error: error.message || error});
332334
}
333335
res.send({name});
334336
});
@@ -340,16 +342,13 @@ class ENS {
340342
'/embark-api/ens/register',
341343
(req, res) => {
342344
self.events.request("blockchain:defaultAccount:get", (defaultAccount) => {
343-
const secureSend = embarkJsUtils.secureSend;
344345
const {subdomain, address} = req.body;
345-
const reverseNode = utils.soliditySha3(address.toLowerCase().substr(2) + reverseAddrSuffix);
346-
ENSFunctions.registerSubDomain(self.ensContract, self.registrarContract, self.resolverContract, defaultAccount,
347-
subdomain, self.registration.rootDomain, reverseNode, address, self.logger, secureSend, (error) => {
348-
if (error) {
349-
return res.send({error: error || error.message});
350-
}
351-
res.send({name: `${req.body.subdomain}.${self.registration.rootDomain}`, address: req.body.address});
352-
});
346+
this.safeRegisterSubDomain(subdomain, address, defaultAccount, (error) => {
347+
if (error) {
348+
return res.send({error: error.message || error});
349+
}
350+
res.send({name: `${req.body.subdomain}.${self.registration.rootDomain}`, address: req.body.address});
351+
});
353352
});
354353
}
355354
);

src/lib/modules/ens/register.js

Lines changed: 0 additions & 50 deletions
This file was deleted.

0 commit comments

Comments
 (0)