Add `ethers` and resolve chat key from ENS name (#357)
* add `ethers` * add `resolveChatKey`
This commit is contained in:
parent
3dbd022f47
commit
a0d3277733
|
@ -36,6 +36,7 @@
|
|||
"@bufbuild/protobuf": "^1.0.0",
|
||||
"@scure/base": "^1.1.1",
|
||||
"ethereum-cryptography": "^1.0.3",
|
||||
"ethers": "^6.2.1",
|
||||
"js-waku": "^0.30.0",
|
||||
"multiformats": "^11.0.1"
|
||||
},
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
import { Point } from 'ethereum-cryptography/secp256k1'
|
||||
import { ethers } from 'ethers'
|
||||
|
||||
export class EthereumClient {
|
||||
private provider: ethers.JsonRpcApiProvider
|
||||
|
||||
constructor(url: string) {
|
||||
this.provider = new ethers.JsonRpcProvider(url)
|
||||
}
|
||||
|
||||
async resolveChatKey(ensName: string): Promise<string | undefined> {
|
||||
try {
|
||||
const resolver = await this.provider.getResolver(ensName)
|
||||
|
||||
if (!resolver) {
|
||||
return
|
||||
}
|
||||
|
||||
const address = resolver.address
|
||||
const abi = [
|
||||
'function pubkey(bytes32 node) view returns (bytes32 x, bytes32 y)',
|
||||
]
|
||||
|
||||
const resolverContract = new ethers.Contract(address, abi, this.provider)
|
||||
|
||||
const node = ethers.namehash(ensName)
|
||||
const [x, y] = await resolverContract.pubkey(node)
|
||||
|
||||
const px = BigInt(x)
|
||||
const py = BigInt(y)
|
||||
|
||||
const point = new Point(px, py)
|
||||
point.assertValidity()
|
||||
|
||||
const hex = point.toHex(true)
|
||||
|
||||
return `0x${hex}`
|
||||
} catch {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
|
@ -11,6 +11,7 @@ export { createClient } from './client/client'
|
|||
export type { Community } from './client/community/community'
|
||||
export type { Reaction, Reactions } from './client/community/get-reactions'
|
||||
export type { Member } from './client/member'
|
||||
export { EthereumClient } from './ethereum-client/ethereum-client'
|
||||
export type { ChannelInfo } from './request-client/map-channel'
|
||||
export type { CommunityInfo } from './request-client/map-community'
|
||||
export type { UserInfo } from './request-client/map-user'
|
||||
|
|
47
yarn.lock
47
yarn.lock
|
@ -35,6 +35,11 @@
|
|||
uuid "^8.3.2"
|
||||
xml2js "^0.4.23"
|
||||
|
||||
"@adraffy/ens-normalize@1.9.0":
|
||||
version "1.9.0"
|
||||
resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.9.0.tgz#223572538f6bea336750039bb43a4016dcc8182d"
|
||||
integrity sha512-iowxq3U30sghZotgl4s/oJRci6WPBfNO5YYgk2cIOMCHr3LeGPcsZjCEr+33Q4N+oV3OABDAtA+pyvWjbvBifQ==
|
||||
|
||||
"@ampproject/remapping@^2.1.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d"
|
||||
|
@ -1438,11 +1443,21 @@
|
|||
resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.0.0.tgz#d5e38bfbdaba174805a4e649f13be9a9ed3351ae"
|
||||
integrity sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==
|
||||
|
||||
"@noble/hashes@1.1.2":
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183"
|
||||
integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==
|
||||
|
||||
"@noble/secp256k1@1.5.5", "@noble/secp256k1@^1.3.4", "@noble/secp256k1@~1.5.2":
|
||||
version "1.5.5"
|
||||
resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.5.5.tgz#315ab5745509d1a8c8e90d0bdf59823ccf9bcfc3"
|
||||
integrity sha512-sZ1W6gQzYnu45wPrWx8D3kwI2/U29VYTx9OjbDAd7jwRItJ0cSTMPRL/C8AWZFn9kWFLQGqEXVEE86w4Z8LpIQ==
|
||||
|
||||
"@noble/secp256k1@1.7.1":
|
||||
version "1.7.1"
|
||||
resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c"
|
||||
integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==
|
||||
|
||||
"@noble/secp256k1@^1.5.4":
|
||||
version "1.6.3"
|
||||
resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.6.3.tgz#7eed12d9f4404b416999d0c87686836c4c5c9b94"
|
||||
|
@ -2660,6 +2675,11 @@ acorn@^8.7.0:
|
|||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf"
|
||||
integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==
|
||||
|
||||
aes-js@4.0.0-beta.3:
|
||||
version "4.0.0-beta.3"
|
||||
resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.3.tgz#da2253f0ff03a0b3a9e445c8cbdf78e7fda7d48c"
|
||||
integrity sha512-/xJX0/VTPcbc5xQE2VUP91y1xN8q/rDfhEzLm+vLc3hYvb5+qHCnpJRuFcrKn63zumK/sCwYYzhG8HP78JYSTA==
|
||||
|
||||
aggregate-error@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
|
||||
|
@ -3977,6 +3997,18 @@ ethereum-cryptography@^1.0.3:
|
|||
"@scure/bip32" "1.0.1"
|
||||
"@scure/bip39" "1.0.0"
|
||||
|
||||
ethers@^6.2.1:
|
||||
version "6.2.1"
|
||||
resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.2.1.tgz#3ba2c4ff02e6131828bd8b6bfa0885d112bd43b4"
|
||||
integrity sha512-bwDC1A6a0NlokpjzYGnKSVo68eBNsTRdzN0nHgmpTsvowEuRDHorhMiFg/tx/7WMl2bGESfABsfH0MPZUp+EJQ==
|
||||
dependencies:
|
||||
"@adraffy/ens-normalize" "1.9.0"
|
||||
"@noble/hashes" "1.1.2"
|
||||
"@noble/secp256k1" "1.7.1"
|
||||
aes-js "4.0.0-beta.3"
|
||||
tslib "2.4.0"
|
||||
ws "8.5.0"
|
||||
|
||||
event-iterator@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/event-iterator/-/event-iterator-2.0.0.tgz#10f06740cc1e9fd6bc575f334c2bc1ae9d2dbf62"
|
||||
|
@ -6830,6 +6862,11 @@ tsconfig-paths@^3.12.0:
|
|||
minimist "^1.2.0"
|
||||
strip-bom "^3.0.0"
|
||||
|
||||
tslib@2.4.0, tslib@^2.4.0:
|
||||
version "2.4.0"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3"
|
||||
integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
|
||||
|
||||
tslib@^1.0.0, tslib@^1.8.1, tslib@^1.9.3:
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
|
||||
|
@ -6840,11 +6877,6 @@ tslib@^2.1.0:
|
|||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
|
||||
integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
|
||||
|
||||
tslib@^2.4.0:
|
||||
version "2.4.0"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3"
|
||||
integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
|
||||
|
||||
tsutils@^3.21.0:
|
||||
version "3.21.0"
|
||||
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
|
||||
|
@ -7306,6 +7338,11 @@ wrappy@1:
|
|||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
||||
|
||||
ws@8.5.0:
|
||||
version "8.5.0"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f"
|
||||
integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==
|
||||
|
||||
ws@^8.4.0:
|
||||
version "8.8.1"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0"
|
||||
|
|
Loading…
Reference in New Issue