diff options
author | kumavis <kumavis@users.noreply.github.com> | 2018-11-02 09:29:45 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-02 09:29:45 +0800 |
commit | 337a4e1b4ea7a560d773bc262b2adffd1617a39b (patch) | |
tree | f3c2f9b33642ef9be901645645734129686e6c6e /app/scripts/lib/ens-ipfs/resolver.js | |
parent | c2f97717c0fbf9a64cf527891f7a1f35049fb023 (diff) | |
parent | de231c7a6191ca869308b6d27ca9cd4b020e59aa (diff) | |
download | tangerine-wallet-browser-337a4e1b4ea7a560d773bc262b2adffd1617a39b.tar tangerine-wallet-browser-337a4e1b4ea7a560d773bc262b2adffd1617a39b.tar.gz tangerine-wallet-browser-337a4e1b4ea7a560d773bc262b2adffd1617a39b.tar.bz2 tangerine-wallet-browser-337a4e1b4ea7a560d773bc262b2adffd1617a39b.tar.lz tangerine-wallet-browser-337a4e1b4ea7a560d773bc262b2adffd1617a39b.tar.xz tangerine-wallet-browser-337a4e1b4ea7a560d773bc262b2adffd1617a39b.tar.zst tangerine-wallet-browser-337a4e1b4ea7a560d773bc262b2adffd1617a39b.zip |
Merge pull request #5649 from MetaMask/develop
Version 4.17.0
Diffstat (limited to 'app/scripts/lib/ens-ipfs/resolver.js')
-rw-r--r-- | app/scripts/lib/ens-ipfs/resolver.js | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/app/scripts/lib/ens-ipfs/resolver.js b/app/scripts/lib/ens-ipfs/resolver.js new file mode 100644 index 000000000..fe2dc1134 --- /dev/null +++ b/app/scripts/lib/ens-ipfs/resolver.js @@ -0,0 +1,54 @@ +const namehash = require('eth-ens-namehash') +const multihash = require('multihashes') +const Eth = require('ethjs-query') +const EthContract = require('ethjs-contract') +const registrarAbi = require('./contracts/registrar') +const resolverAbi = require('./contracts/resolver') + +module.exports = resolveEnsToIpfsContentId + + +async function resolveEnsToIpfsContentId ({ provider, name }) { + const eth = new Eth(provider) + const hash = namehash.hash(name) + const contract = new EthContract(eth) + // lookup registrar + const chainId = Number.parseInt(await eth.net_version(), 10) + const registrarAddress = getRegistrarForChainId(chainId) + if (!registrarAddress) { + throw new Error(`EnsIpfsResolver - no known ens-ipfs registrar for chainId "${chainId}"`) + } + const Registrar = contract(registrarAbi).at(registrarAddress) + // lookup resolver + const resolverLookupResult = await Registrar.resolver(hash) + const resolverAddress = resolverLookupResult[0] + if (hexValueIsEmpty(resolverAddress)) { + throw new Error(`EnsIpfsResolver - no resolver found for name "${name}"`) + } + const Resolver = contract(resolverAbi).at(resolverAddress) + // lookup content id + const contentLookupResult = await Resolver.content(hash) + const contentHash = contentLookupResult[0] + if (hexValueIsEmpty(contentHash)) { + throw new Error(`EnsIpfsResolver - no content ID found for name "${name}"`) + } + const nonPrefixedHex = contentHash.slice(2) + const buffer = multihash.fromHexString(nonPrefixedHex) + const contentId = multihash.toB58String(multihash.encode(buffer, 'sha2-256')) + return contentId +} + +function hexValueIsEmpty(value) { + return [undefined, null, '0x', '0x0', '0x0000000000000000000000000000000000000000000000000000000000000000'].includes(value) +} + +function getRegistrarForChainId (chainId) { + switch (chainId) { + // mainnet + case 1: + return '0x314159265dd8dbb310642f98f50c066173c1259b' + // ropsten + case 3: + return '0x112234455c3a32fd11230c42e7bccd4a84e02010' + } +} |