Attempts to lookup `.eth` addresses on ENS. Is currently failing. I've written an isolation example of the problem here: https://github.com/flyswatter/ens-testfeature/default_network_editable
parent
6f598570d8
commit
69d4aafc3e
@ -0,0 +1,131 @@ |
|||||||
|
const Component = require('react').Component |
||||||
|
const h = require('react-hyperscript') |
||||||
|
const inherits = require('util').inherits |
||||||
|
const extend = require('xtend') |
||||||
|
const debounce = require('debounce') |
||||||
|
const ENS = require('ethereum-ens') |
||||||
|
const ensRE = /.+\.eth$/ |
||||||
|
|
||||||
|
const networkResolvers = { |
||||||
|
'3': '112234455c3a32fd11230c42e7bccd4a84e02010', |
||||||
|
} |
||||||
|
|
||||||
|
module.exports = EnsInput |
||||||
|
|
||||||
|
inherits(EnsInput, Component) |
||||||
|
function EnsInput () { |
||||||
|
Component.call(this) |
||||||
|
} |
||||||
|
|
||||||
|
EnsInput.prototype.render = function () { |
||||||
|
const props = this.props |
||||||
|
const opts = extend(props, { |
||||||
|
onChange: () => { |
||||||
|
const network = this.props.network |
||||||
|
let resolverAddress = networkResolvers[network] |
||||||
|
if (!resolverAddress) return |
||||||
|
|
||||||
|
const recipient = document.querySelector('input[name="address"]').value |
||||||
|
if (recipient.match(ensRE) === null) { |
||||||
|
console.dir(recipient) |
||||||
|
return this.setState({ |
||||||
|
loadingEns: false, |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
this.setState({ |
||||||
|
loadingEns: true, |
||||||
|
}) |
||||||
|
this.checkName() |
||||||
|
}, |
||||||
|
}) |
||||||
|
|
||||||
|
return h('div', { |
||||||
|
style: { width: '100%' }, |
||||||
|
}, [ |
||||||
|
h('input.large-input', opts), |
||||||
|
this.ensIcon(), |
||||||
|
]) |
||||||
|
} |
||||||
|
|
||||||
|
EnsInput.prototype.componentDidMount = function () { |
||||||
|
const network = this.props.network |
||||||
|
let resolverAddress = networkResolvers[network] |
||||||
|
|
||||||
|
if (resolverAddress) { |
||||||
|
this.ens = new ENS(web3, resolverAddress) |
||||||
|
this.checkName = debounce(this.lookupEnsName.bind(this), 200) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
EnsInput.prototype.lookupEnsName = function () { |
||||||
|
if (!this.ens) { |
||||||
|
return this.setState({ |
||||||
|
loadingEns: false, |
||||||
|
ensFailure: true, |
||||||
|
hoverText: 'ENS is not supported on your current network.', |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
const recipient = document.querySelector('input[name="address"]').value |
||||||
|
log.info(`ENS attempting to resolve name: ${recipient}`) |
||||||
|
this.ens.resolver(recipient).addr() |
||||||
|
.then((address) => { |
||||||
|
this.setState({ |
||||||
|
loadingEns: false, |
||||||
|
ensResolution: address, |
||||||
|
hoverText: address, |
||||||
|
}) |
||||||
|
}) |
||||||
|
.catch((reason) => { |
||||||
|
return this.setState({ |
||||||
|
loadingEns: false, |
||||||
|
ensFailure: true, |
||||||
|
hoverText: reason.message, |
||||||
|
}) |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
EnsInput.prototype.componentDidUpdate = function () { |
||||||
|
const state = this.state || {} |
||||||
|
const { ensResolution } = state |
||||||
|
if (ensResolution && this.props.onChange) { |
||||||
|
this.props.onChange(ensResolution) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
EnsInput.prototype.ensIcon = function (recipient) { |
||||||
|
const { hoverText } = this.state || {} |
||||||
|
return h('span', { |
||||||
|
title: hoverText, |
||||||
|
style: { |
||||||
|
position: 'absolute', |
||||||
|
padding: '9px', |
||||||
|
transform: 'translatex(-40px)', |
||||||
|
}, |
||||||
|
}, this.ensIconContents(recipient)) |
||||||
|
} |
||||||
|
|
||||||
|
EnsInput.prototype.ensIconContents = function (recipient) { |
||||||
|
const { loadingEns, ensFailure, ensResolution } = this.state || {} |
||||||
|
|
||||||
|
if (loadingEns) { |
||||||
|
return h('img', { |
||||||
|
src: 'images/loading.svg', |
||||||
|
style: { |
||||||
|
width: '30px', |
||||||
|
height: '30px', |
||||||
|
}, |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
if (ensFailure) { |
||||||
|
return h('i.fa.fa-warning.fa-lg.warning') |
||||||
|
} |
||||||
|
|
||||||
|
if (ensResolution) { |
||||||
|
return h('i.fa.fa-check-circle.fa-lg', { |
||||||
|
style: { color: 'green' }, |
||||||
|
}) |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue