Skip to content

Commit

Permalink
client: update multiaddr dep (#3384)
Browse files Browse the repository at this point in the history
* client: update multiaddr dep

* client: update multiaddr usage

* devp2p: update multiaddr usage

* devp2p: test ci

* devp2p: fix convert to string

* devp2p: try to fix convert iport

* devp2p: remove multiaddr dep

* devp2p: remove util method that was already in the repo

* remove todo

---------

Co-authored-by: acolytec3 <17355484+acolytec3@users.noreply.github.com>
  • Loading branch information
gabrocheleau and acolytec3 committed Apr 29, 2024
1 parent c4a9f00 commit 5103318
Show file tree
Hide file tree
Showing 16 changed files with 247 additions and 251 deletions.
388 changes: 220 additions & 168 deletions package-lock.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion packages/client/archive/libp2p/libp2pnode.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { NOISE } from '@chainsafe/libp2p-noise'
import Libp2p from 'libp2p'
import Bootstrap from 'libp2p-bootstrap'

import type { Multiaddr } from 'multiaddr'
import type { Multiaddr } from '@multiformats/multiaddr'
import type { PeerId } from '@libp2p/interface-peer-id'

const MPLEX = require('libp2p-mplex')
Expand Down
2 changes: 1 addition & 1 deletion packages/client/archive/libp2p/net/peer/libp2pnode.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { NOISE } from '@chainsafe/libp2p-noise'
import LibP2P from 'libp2p'
import Bootstrap from 'libp2p-bootstrap'

import type { Multiaddr } from 'multiaddr'
import type { Multiaddr } from '@multiformats/multiaddr'
import type { PeerId } from '@libp2p/interface-peer-id'

const KadDht = require('libp2p-kad-dht')
Expand Down
6 changes: 3 additions & 3 deletions packages/client/archive/libp2p/net/peer/libp2ppeer.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//@ts-nocheck
import { multiaddr } from 'multiaddr'
import { multiaddr } from '@multiformats/multiaddr'

import { Peer } from '../../../src/net/peer/peer'
import { Libp2pSender } from '../libp2psender'
Expand All @@ -11,7 +11,7 @@ import type { PeerOptions } from '../../../src/net/peer/peer'
import type { Protocol } from '../../../src/net/protocol'
import type { Libp2pServer } from '../../../src/net/server'
import type { MuxedStream } from 'libp2p-interfaces/dist/src/stream-muxer/types'
import type { Multiaddr } from 'multiaddr'
import type { Multiaddr } from '@multiformats/multiaddr'
import { PeerId, isPeerId } from '@libp2p/interface-peer-id'

export interface Libp2pPeerOptions extends Omit<PeerOptions, 'address' | 'transport'> {
Expand All @@ -24,7 +24,7 @@ export interface Libp2pPeerOptions extends Omit<PeerOptions, 'address' | 'transp
* @memberof module:net/peer
* @example
* ```typescript
* import { multiaddr } from 'multiaddr'
* import { multiaddr } from '@multiformats/multiaddr'
* import { Libp2pPeer } from './src/net/peer'
* import { Chain } from './src/blockchain'
* import { EthProtocol } from './src/net/protocol'
Expand Down
4 changes: 2 additions & 2 deletions packages/client/archive/libp2p/net/server/libp2pserver.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
//@ts-nocheck
// eslint-disable-next-line implicit-dependencies/no-implicit, import/no-extraneous-dependencies
import { keys } from 'libp2p-crypto'
import { multiaddr } from 'multiaddr'
import { multiaddr } from '@multiformats/multiaddr'
import { PeerId } from '@libp2p/interface-peer-id'

import { Event } from '../../../src/types'
Expand All @@ -12,7 +12,7 @@ import { Server } from '../../../src/net/server/server'

import type { ServerOptions } from '../../../src/net/server/server'
import type Connection from 'libp2p-interfaces/dist/src/connection/connection'
import type { Multiaddr } from 'multiaddr'
import type { Multiaddr } from '@multiformats/multiaddr'
import { createFromPrivKey } from '@libp2p/peer-id-factory'

export interface Libp2pServerOptions extends ServerOptions {
Expand Down
2 changes: 1 addition & 1 deletion packages/client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
"@ethereumjs/util": "9.0.3",
"@ethereumjs/verkle": "^0.0.2",
"@ethereumjs/vm": "8.0.0",
"@multiformats/multiaddr": "^12.2.1",
"@polkadot/util": "^12.6.2",
"@polkadot/wasm-crypto": "^7.3.2",
"abstract-level": "^1.0.3",
Expand All @@ -85,7 +86,6 @@
"kzg-wasm": "^0.4.0",
"level": "^8.0.0",
"memory-level": "^1.0.0",
"multiaddr": "^10.0.1",
"prom-client": "^15.1.0",
"qheap": "^1.4.0",
"winston": "^3.3.3",
Expand Down
2 changes: 1 addition & 1 deletion packages/client/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import type { Logger } from './logging.js'
import type { EventBusType, MultiaddrLike, PrometheusMetrics } from './types.js'
import type { BlockHeader } from '@ethereumjs/block'
import type { VM, VMProfilerOpts } from '@ethereumjs/vm'
import type { Multiaddr } from 'multiaddr'
import type { Multiaddr } from '@multiformats/multiaddr'

export enum DataDirectory {
Chain = 'chain',
Expand Down
2 changes: 1 addition & 1 deletion packages/client/src/net/server/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { parseKey, parseMultiaddrs } from '../../util/parse.js'
import type { Config } from '../../config.js'
import type { DnsNetwork, KeyLike, MultiaddrLike } from '../../types.js'
import type { Protocol } from '../protocol/protocol.js'
import type { Multiaddr } from 'multiaddr'
import type { Multiaddr } from '@multiformats/multiaddr'

export interface ServerOptions {
/* Config */
Expand Down
2 changes: 1 addition & 1 deletion packages/client/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import type { Server } from './net/server/index.js'
import type { Block, BlockHeader } from '@ethereumjs/block'
import type { DefaultStateManager } from '@ethereumjs/statemanager'
import type { Address } from '@ethereumjs/util'
import type { Multiaddr } from 'multiaddr'
import type { Multiaddr } from '@multiformats/multiaddr'
import type * as promClient from 'prom-client'

/**
Expand Down
6 changes: 4 additions & 2 deletions packages/client/src/util/parse.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { hexToBytes } from '@ethereumjs/util'
import { Multiaddr, multiaddr } from 'multiaddr'
import { isMultiaddr, multiaddr } from '@multiformats/multiaddr'
import { URL } from 'url'

import type { MultiaddrLike } from '../types.js'
import type { Multiaddr } from '@multiformats/multiaddr'

// From: https://community.fortra.com/forums/intermapper/miscellaneous-topics/5acc4fcf-fa83-e511-80cf-0050568460e4
const ip6RegExp = new RegExp(
Expand Down Expand Up @@ -30,7 +31,8 @@ export function parseMultiaddrs(input: MultiaddrLike): Multiaddr[] {
}
try {
return input.map((s) => {
if (s instanceof Multiaddr) {
isMultiaddr
if (isMultiaddr(s)) {
return s
}
// parse as multiaddr
Expand Down
2 changes: 1 addition & 1 deletion packages/client/test/net/server/rlpxserver.spec.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { equalsBytes, hexToBytes, utf8ToBytes } from '@ethereumjs/util'
import { multiaddr } from '@multiformats/multiaddr'
import { EventEmitter } from 'events'
import { multiaddr } from 'multiaddr'
import { assert, describe, expect, it, vi } from 'vitest'

import { Config } from '../../../src/config.js'
Expand Down
2 changes: 1 addition & 1 deletion packages/client/test/util/parse.spec.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { multiaddr } from 'multiaddr'
import { multiaddr } from '@multiformats/multiaddr'
import { assert, describe, it } from 'vitest'

import { parseMultiaddrs } from '../../src/util/parse.js'
Expand Down
1 change: 0 additions & 1 deletion packages/devp2p/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@
"debug": "^4.3.3",
"ethereum-cryptography": "^2.1.3",
"lru-cache": "10.1.0",
"multiaddr": "^10.0.1",
"scanf": "1.1.2",
"snappyjs": "^0.6.1"
},
Expand Down
50 changes: 10 additions & 40 deletions packages/devp2p/src/dns/enr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,13 @@ import { bytesToUtf8, utf8ToBytes } from '@ethereumjs/util'
import { base32, base64url } from '@scure/base'
import { keccak256 } from 'ethereum-cryptography/keccak.js'
import { ecdsaVerify } from 'ethereum-cryptography/secp256k1-compat.js'
import { protocols } from 'multiaddr'
import Convert from 'multiaddr/src/convert.js'
import { sscanf } from 'scanf'

import { toNewUint8Array } from '../util.js'
import { ipToString } from '../util.js'

import type { PeerInfo } from '../types.js'
import type { Common } from '@ethereumjs/common'

type ProtocolCodes = {
ipCode: number
tcpCode: number
udpCode: number
}

type ENRRootValues = {
eRoot: string
lRoot: string
Expand All @@ -30,6 +22,12 @@ type ENRTreeValues = {
domain: string
}

// Copied over from the multiaddr repo: https://github.com/multiformats/js-multiaddr/blob/main/src/convert.ts
function bytesToPort(bytes: Uint8Array): number {
const view = new DataView(bytes.buffer)
return view.getUint16(bytes.byteOffset)
}

export class ENR {
public static readonly RECORD_PREFIX = 'enr:'
public static readonly TREE_PREFIX = 'enrtree:'
Expand Down Expand Up @@ -81,12 +79,10 @@ export class ENR {

if (!isVerified) throw new Error('Unable to verify ENR signature')

const { ipCode, tcpCode, udpCode } = this._getIpProtocolConversionCodes(obj.id)

const peerInfo: PeerInfo = {
address: Convert.toString(ipCode, obj.ip) as string,
tcpPort: Number(Convert.toString(tcpCode, toNewUint8Array(obj.tcp))),
udpPort: Number(Convert.toString(udpCode, toNewUint8Array(obj.udp))),
address: ipToString(obj.ip),
tcpPort: bytesToPort(obj.tcp),
udpPort: bytesToPort(obj.udp),
}

return peerInfo
Expand Down Expand Up @@ -179,30 +175,4 @@ export class ENR {

return branch.split(this.BRANCH_PREFIX)[1].split(',')
}

/**
* Gets relevant multiaddr conversion codes for ipv4, ipv6 and tcp, udp formats
* @param {Uint8Array} protocolId
* @return {ProtocolCodes}
*/
static _getIpProtocolConversionCodes(protocolId: Uint8Array): ProtocolCodes {
let ipCode

switch (bytesToUtf8(protocolId)) {
case 'v4':
ipCode = protocols(4).code
break
case 'v6':
ipCode = protocols(41).code
break
default:
throw new Error("IP protocol must be 'v4' or 'v6'")
}

return {
ipCode,
tcpCode: protocols('tcp').code,
udpCode: protocols('udp').code,
}
}
}
6 changes: 0 additions & 6 deletions packages/devp2p/src/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,12 +113,6 @@ export function unstrictDecode(value: Uint8Array) {
return RLP.decode(value, true).data
}

// multiaddr 8.0.0 expects an Uint8Array with internal buffer starting at 0 offset
export function toNewUint8Array(buf: Uint8Array): Uint8Array {
const arrayBuffer = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength)
return new Uint8Array(arrayBuffer)
}

/*************************** ************************************************************/
// Methods borrowed from `node-ip` by Fedor Indutny (https://github.com/indutny/node-ip)
// and modified to use Uint8Arrays instead of Buffers
Expand Down
21 changes: 0 additions & 21 deletions packages/devp2p/test/enr.spec.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { utf8ToBytes } from '@ethereumjs/util'
import { assert, describe, it } from 'vitest'

import { ENR } from '../src/dns/index.js'
Expand Down Expand Up @@ -116,14 +115,6 @@ describe('ENR tests', () => {
assert.equal(udpPort, 30303, 'returns correct udpPort')
})

it('ENR (enr): should return correct multiaddr conversion codes for ipv6', () => {
const expected = { ipCode: 41, tcpCode: 6, udpCode: 273 }
const protocolId = utf8ToBytes('v6')
const codes = ENR._getIpProtocolConversionCodes(protocolId)

assert.deepEqual(codes, expected, 'returns correct codes')
})

it('ENR (enr): should error if record mis-prefixed', () => {
try {
ENR.parseAndVerifyRecord(dns.enrBadPrefix)
Expand All @@ -134,16 +125,4 @@ describe('ENR tests', () => {
)
}
})

it('ENR (enr): should error when converting to unrecognized ip protocol id', () => {
const protocolId = utf8ToBytes('v7')
try {
ENR._getIpProtocolConversionCodes(protocolId)
} catch (e: any) {
assert.ok(
e.toString().includes("IP protocol must be 'v4' or 'v6'"),
'has correct error message'
)
}
})
})

0 comments on commit 5103318

Please sign in to comment.