@exodus/ethereum-api 2.21.3 → 2.21.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@exodus/ethereum-api",
|
|
3
|
-
"version": "2.21.
|
|
3
|
+
"version": "2.21.4",
|
|
4
4
|
"description": "Ethereum Api",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"author": "Exodus Movement, Inc.",
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"access": "restricted"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
+
"@ensdomains/eth-ens-namehash": "^2.0.15",
|
|
13
14
|
"@exodus/asset-lib": "^3.5.4",
|
|
14
15
|
"@exodus/crypto": "^1.0.0-rc.0",
|
|
15
16
|
"@exodus/ethereum-lib": "^2.19.3",
|
|
@@ -29,5 +30,5 @@
|
|
|
29
30
|
"@exodus/assets-base": "^8.0.136",
|
|
30
31
|
"@exodus/models": "^8.7.2"
|
|
31
32
|
},
|
|
32
|
-
"gitHead": "
|
|
33
|
+
"gitHead": "643548a6bec98afc737a9a576c508dd0cef7645c"
|
|
33
34
|
}
|
package/src/ens/index.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { hash } from '@ensdomains/eth-ens-namehash'
|
|
2
|
+
import SolidityContract from '@exodus/solidity-contract'
|
|
3
|
+
import { ABI } from '@exodus/ethereum-lib'
|
|
4
|
+
|
|
5
|
+
import { eth as server } from '../exodus-eth-server'
|
|
6
|
+
import ENS_REGISTRY_ADDRESSES from './addresses'
|
|
7
|
+
|
|
8
|
+
const registry = new SolidityContract(ABI.ensRegistry)
|
|
9
|
+
const resolver = new SolidityContract(ABI.ensResolver)
|
|
10
|
+
|
|
11
|
+
// ENS only available on mainnet atm
|
|
12
|
+
const ENS_REGISTRY_ADDRESS = ENS_REGISTRY_ADDRESSES['ethereum']
|
|
13
|
+
|
|
14
|
+
const getResolverAddress = async (name: string) =>
|
|
15
|
+
server
|
|
16
|
+
.ethCall({
|
|
17
|
+
to: ENS_REGISTRY_ADDRESS,
|
|
18
|
+
data: registry.resolver.methodId + hash(name).slice(2),
|
|
19
|
+
})
|
|
20
|
+
.then((result) => '0x' + result.slice(26))
|
|
21
|
+
|
|
22
|
+
const resolveEnsName = async (name: string) => {
|
|
23
|
+
const resolverAddress = await getResolverAddress(name)
|
|
24
|
+
const hex = await server.ethCall({
|
|
25
|
+
to: resolverAddress,
|
|
26
|
+
data: resolver.addr.methodId + hash(name).slice(2),
|
|
27
|
+
})
|
|
28
|
+
return '0x' + hex.slice(26)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const resolveEnsAddress = async (address: string) => {
|
|
32
|
+
const name = `${address.slice(2)}.addr.reverse`
|
|
33
|
+
|
|
34
|
+
const resolverAddress = await getResolverAddress(name)
|
|
35
|
+
|
|
36
|
+
const data = await server.ethCall({
|
|
37
|
+
to: resolverAddress,
|
|
38
|
+
data: resolver.name.methodId + hash(name).slice(2),
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
return resolver.decodeOutput({ data, method: 'name' })[0]
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export { resolveEnsAddress, resolveEnsName }
|
|
@@ -8,9 +8,11 @@ import SolidityContract from '@exodus/solidity-contract'
|
|
|
8
8
|
import { bufferToHex } from '@exodus/ethereumjs-util'
|
|
9
9
|
import { randomUUID } from '@exodus/crypto/randomUUID'
|
|
10
10
|
|
|
11
|
+
import { resolveEnsAddress, resolveEnsName } from '../ens'
|
|
12
|
+
|
|
11
13
|
const RETRY_DELAYS = ['10s']
|
|
12
14
|
|
|
13
|
-
export function create(defaultURL) {
|
|
15
|
+
export function create(defaultURL, ensAssetName) {
|
|
14
16
|
let API_URL = defaultURL
|
|
15
17
|
const ws = createWebSocket(() => {
|
|
16
18
|
// eslint-disable-next-line
|
|
@@ -41,7 +43,7 @@ export function create(defaultURL) {
|
|
|
41
43
|
// Default retry function
|
|
42
44
|
const requestWithRetry = retry(request, { delayTimesMs: RETRY_DELAYS })
|
|
43
45
|
|
|
44
|
-
|
|
46
|
+
const api = {
|
|
45
47
|
getURL() {
|
|
46
48
|
return API_URL
|
|
47
49
|
},
|
|
@@ -239,4 +241,12 @@ export function create(defaultURL) {
|
|
|
239
241
|
return request('proxy', requestData, { version: 'v2', method: 'post' })
|
|
240
242
|
},
|
|
241
243
|
}
|
|
244
|
+
|
|
245
|
+
return ensAssetName === 'ethereum'
|
|
246
|
+
? {
|
|
247
|
+
...api,
|
|
248
|
+
resolveEnsName,
|
|
249
|
+
resolveEnsAddress,
|
|
250
|
+
}
|
|
251
|
+
: api
|
|
242
252
|
}
|
|
@@ -4,7 +4,10 @@ import { create } from './api'
|
|
|
4
4
|
|
|
5
5
|
// exported for in-library use only.
|
|
6
6
|
export const serverMap = Object.fromEntries(
|
|
7
|
-
ETHEREUM_LIKE_ASSETS.map((assetName) => [
|
|
7
|
+
ETHEREUM_LIKE_ASSETS.map((assetName) => [
|
|
8
|
+
assetName,
|
|
9
|
+
create(DEFAULT_SERVER_URLS[assetName], assetName),
|
|
10
|
+
])
|
|
8
11
|
)
|
|
9
12
|
|
|
10
13
|
// allow self-signed certs
|