Merge pull request #463 from embark-framework/ens_fixes

Ens fixes
This commit is contained in:
RJ Catalano 2018-05-28 11:56:54 -05:00 committed by GitHub
commit 0858092306
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 37 additions and 9 deletions

View File

@ -305,7 +305,7 @@ EmbarkJS.Names.lookup = function(identifier) {
if (!this.currentNameSystems) { if (!this.currentNameSystems) {
throw new Error('Name system provider not set; e.g EmbarkJS.Names.setProvider("ens")'); throw new Error('Name system provider not set; e.g EmbarkJS.Names.setProvider("ens")');
} }
return this.currentNameSystems.lookup(name); return this.currentNameSystems.lookup(identifier);
} }
// To Implement // To Implement

View File

@ -26,6 +26,7 @@ class CodeGenerator {
this.contractsConfig = options.contractsConfig || {}; this.contractsConfig = options.contractsConfig || {};
this.storageConfig = options.storageConfig || {}; this.storageConfig = options.storageConfig || {};
this.communicationConfig = options.communicationConfig || {}; this.communicationConfig = options.communicationConfig || {};
this.namesystemConfig = options.namesystemConfig || {};
// TODO: this should also be removed and use events instead // TODO: this should also be removed and use events instead
this.contractsManager = options.contractsManager; this.contractsManager = options.contractsManager;
this.plugins = options.plugins; this.plugins = options.plugins;
@ -224,6 +225,17 @@ class CodeGenerator {
return block; return block;
} }
generateNamesInitialization(useEmbarkJS) {
if (!useEmbarkJS || this.namesystemConfig === {}) return "";
let result = "\n";
result += Templates.define_when_env_loaded();
result += this._getInitCode('names', this.namesystemConfig);
return result;
}
generateStorageInitialization(useEmbarkJS) { generateStorageInitialization(useEmbarkJS) {
if (!useEmbarkJS || this.storageConfig === {}) return ""; if (!useEmbarkJS || this.storageConfig === {}) return "";
@ -266,6 +278,7 @@ class CodeGenerator {
result += this.generateContracts(options.useEmbarkJS, options.deployment, true); result += this.generateContracts(options.useEmbarkJS, options.deployment, true);
result += this.generateStorageInitialization(options.useEmbarkJS); result += this.generateStorageInitialization(options.useEmbarkJS);
result += this.generateCommunicationInitialization(options.useEmbarkJS); result += this.generateCommunicationInitialization(options.useEmbarkJS);
result += this.generateNamesInitialization(options.useEmbarkJS);
return result; return result;
} }
@ -331,6 +344,7 @@ class CodeGenerator {
code += self.generateCommunicationInitialization(true); code += self.generateCommunicationInitialization(true);
code += self.generateStorageInitialization(true); code += self.generateStorageInitialization(true);
code += self.generateNamesInitialization(true);
next(); next();
}, },
function writeFile(next) { function writeFile(next) {

View File

@ -235,7 +235,8 @@ Config.prototype.loadNameSystemConfigFile = function() {
var configObject = { var configObject = {
"default": { "default": {
"available_providers": ["ens"], "available_providers": ["ens"],
"provider": "ens" "provider": "ens",
"enabled": true
} }
}; };

View File

@ -147,6 +147,15 @@ class Engine {
}); });
} }
namingSystem(_options) {
this.registerModule('ens', {
logger: this.logger,
events: this.events,
web3: this.blockchain.web3,
namesConfig: this.config.namesystemConfig
});
}
codeRunnerService(_options) { codeRunnerService(_options) {
this.codeRunner = new CodeRunner({ this.codeRunner = new CodeRunner({
plugins: this.plugins, plugins: this.plugins,
@ -164,6 +173,7 @@ class Engine {
contractsManager: this.contractsManager, contractsManager: this.contractsManager,
plugins: self.plugins, plugins: self.plugins,
storageConfig: self.config.storageConfig, storageConfig: self.config.storageConfig,
namesystemConfig: self.config.namesystemConfig,
communicationConfig: self.config.communicationConfig, communicationConfig: self.config.communicationConfig,
events: self.events events: self.events
}); });

View File

@ -1,4 +1,5 @@
const namehash = require('eth-ens-namehash'); import namehash from 'eth-ens-namehash';
/*global web3*/ /*global web3*/
let __embarkENS = {}; let __embarkENS = {};
@ -251,11 +252,13 @@ __embarkENS.registryAddresses = {
}; };
__embarkENS.setProvider = function () { __embarkENS.setProvider = function () {
const self = this;
// get network id and then assign ENS contract based on that // get network id and then assign ENS contract based on that
let registryAddresses = this.registryAddresses; let registryAddresses = this.registryAddresses;
this.ens = web3.eth.net.getId().then(id => { this.ens = null;
web3.eth.net.getId().then(id => {
if (registryAddresses[id] !== undefined) { if (registryAddresses[id] !== undefined) {
return new web3.eth.Contract(this.registryInterface, registryAddresses[id]); self.ens = new web3.eth.Contract(self.registryInterface, registryAddresses[id]);
} }
// todo: deploy at this point // todo: deploy at this point
return undefined; return undefined;
@ -267,9 +270,9 @@ __embarkENS.resolve = function(name) {
if (self.ens === undefined) return undefined; if (self.ens === undefined) return undefined;
let node = namehash(name); let node = namehash.hash(name);
self.ens.methods.resolver(node).call().then((resolverAddress) => { return self.ens.methods.resolver(node).call().then((resolverAddress) => {
let resolverContract = new web3.eth.Contract(self.resolverInterface, resolverAddress); let resolverContract = new web3.eth.Contract(self.resolverInterface, resolverAddress);
return resolverContract.methods.addr(node).call(); return resolverContract.methods.addr(node).call();
}).then((addr) => { }).then((addr) => {
@ -284,9 +287,9 @@ __embarkENS.lookup = function(address) {
if (address.startsWith("0x")) address = address.slice(2); if (address.startsWith("0x")) address = address.slice(2);
let node = namehash(address.toLowerCase() + ".addr.reverse"); let node = namehash.hash(address.toLowerCase() + ".addr.reverse");
self.ens.methods.resolver(node).call().then((resolverAddress) => { return self.ens.methods.resolver(node).call().then((resolverAddress) => {
let resolverContract = new web3.eth.Contract(self.resolverInterface, resolverAddress); let resolverContract = new web3.eth.Contract(self.resolverInterface, resolverAddress);
return resolverContract.methods.name(node).call(); return resolverContract.methods.name(node).call();
}).then((name) => { }).then((name) => {