Skip to content

Commit 9749f94

Browse files
author
ScottyPoi
committed
conver static only classes to functions
1 parent 125e942 commit 9749f94

4 files changed

Lines changed: 98 additions & 79 deletions

File tree

packages/portalnetwork/src/networks/state/manager.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { ContentLookup } from '../contentLookup.js'
66

77
import { PortalTrie } from './portalTrie.js'
88
import { ContractRetrieval } from './types.js'
9-
import { ContractCodeContentKey } from './util.js'
9+
import { encodeContractCodeContentKey } from './util.js'
1010

1111
import type { StateNetwork } from './state.js'
1212

@@ -55,7 +55,7 @@ export class StateManager {
5555
return undefined
5656
}
5757
const addressHash = new Trie({ useKeyHashing: true })['hash'](address)
58-
const contentKey = ContractCodeContentKey.encode({ codeHash, addressHash })
58+
const contentKey = encodeContractCodeContentKey({ codeHash, addressHash })
5959
const codeLookup = new ContentLookup(this.state, contentKey)
6060
const response = await codeLookup.startLookup()
6161
if (response && 'content' in response) {

packages/portalnetwork/src/networks/state/portalTrie.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,12 @@ import { ContentLookup } from '../contentLookup.js'
77
import { addressToNibbles, packNibbles, unpackNibbles } from './nibbleEncoding.js'
88
import { PortalTrieDB } from './portalTrieDB.js'
99
import { AccountTrieNodeRetrieval, StorageTrieNodeRetrieval } from './types.js'
10-
import { AccountTrieNodeContentKey, StorageTrieNodeContentKey } from './util.js'
10+
import {
11+
decodeAccountTrieNodeContentKey,
12+
decodeStorageTrieNodeContentKey,
13+
encodeAccountTrieNodeContentKey,
14+
encodeStorageTrieNodeContentKey,
15+
} from './util.js'
1116

1217
import type { Path } from '@ethereumjs/mpt'
1318
import type { Debugger } from 'debug'
@@ -26,7 +31,7 @@ export class PortalTrie {
2631
async lookupAccountTrieNode(key: Uint8Array) {
2732
const lookup = new ContentLookup(this.state, key)
2833
const request = await lookup.startLookup()
29-
const keyobj = AccountTrieNodeContentKey.decode(key)
34+
const keyobj = decodeAccountTrieNodeContentKey(key)
3035
if (request === undefined || !('content' in request)) {
3136
throw new Error(
3237
`network doesn't have node [${unpackNibbles(keyobj.path)}]${bytesToHex(keyobj.nodeHash)}`,
@@ -38,7 +43,7 @@ export class PortalTrie {
3843
async lookupStorageTrieNode(key: Uint8Array) {
3944
const lookup = new ContentLookup(this.state, key)
4045
const request = await lookup.startLookup()
41-
const keyobj = StorageTrieNodeContentKey.decode(key)
46+
const keyobj = decodeStorageTrieNodeContentKey(key)
4247
if (request === undefined || !('content' in request)) {
4348
throw new Error(
4449
`network doesn't have node [${unpackNibbles(keyobj.path)}]${bytesToHex(keyobj.nodeHash)}`,
@@ -56,7 +61,7 @@ export class PortalTrie {
5661
const addressPath = addressToNibbles(address)
5762

5863
// Find RootNode
59-
const rootNodeKey = AccountTrieNodeContentKey.encode({
64+
const rootNodeKey = encodeAccountTrieNodeContentKey({
6065
path: packNibbles([]),
6166
nodeHash: stateroot,
6267
})
@@ -115,7 +120,7 @@ export class PortalTrie {
115120
return { ...accountPath }
116121
}
117122
this.logger.extend('findPath')(`Looking for node: [${bytesToHex(nextNodeHash as Uint8Array)}]`)
118-
const nextContentKey = AccountTrieNodeContentKey.encode({
123+
const nextContentKey = encodeAccountTrieNodeContentKey({
119124
path: packNibbles(nodePath),
120125
nodeHash: nextNodeHash as Uint8Array,
121126
})
@@ -137,7 +142,7 @@ export class PortalTrie {
137142
const addressPath = addressToNibbles(slot)
138143

139144
// Find RootNode
140-
const rootNodeKey = StorageTrieNodeContentKey.encode({
145+
const rootNodeKey = encodeStorageTrieNodeContentKey({
141146
path: packNibbles([]),
142147
nodeHash: storageRoot,
143148
addressHash: new Trie({ useKeyHashing: true })['hash'](address),
@@ -198,7 +203,7 @@ export class PortalTrie {
198203
return { ...contractPath }
199204
}
200205
this.logger.extend('findPath')(`Looking for node: [${bytesToHex(nextNodeHash as Uint8Array)}]`)
201-
const nextContentKey = StorageTrieNodeContentKey.encode({
206+
const nextContentKey = encodeStorageTrieNodeContentKey({
202207
path: packNibbles(nodePath),
203208
nodeHash: nextNodeHash as Uint8Array,
204209
addressHash: new Trie({ useKeyHashing: true })['hash'](address),

packages/portalnetwork/src/networks/state/state.ts

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,14 @@ import {
4343
} from './types.js'
4444
import type { TNibbles } from './types.js'
4545
import {
46-
AccountTrieNodeContentKey,
47-
ContractCodeContentKey,
48-
StateNetworkContentId,
49-
StorageTrieNodeContentKey,
46+
decodeAccountTrieNodeContentKey,
47+
decodeContractCodeContentKey,
48+
decodeStorageTrieNodeContentKey,
49+
encodeAccountTrieNodeContentKey,
50+
encodeStorageTrieNodeContentKey,
5051
extractAccountProof,
5152
nextOffer,
53+
stateNetworkContentIdFromBytes,
5254
} from './util.js'
5355

5456
export class StateNetwork extends BaseNetwork {
@@ -67,7 +69,7 @@ export class StateNetwork extends BaseNetwork {
6769
}
6870

6971
public contentKeyToId = (contentKey: Uint8Array): string => {
70-
return bytesToUnprefixedHex(StateNetworkContentId.fromBytes(contentKey))
72+
return bytesToUnprefixedHex(stateNetworkContentIdFromBytes(contentKey))
7173
}
7274

7375
/**
@@ -181,10 +183,10 @@ export class StateNetwork extends BaseNetwork {
181183
await this.gossipContent(contentKey, content)
182184
} else {
183185
if (contentType === StateNetworkContentType.AccountTrieNode) {
184-
const { nodeHash } = AccountTrieNodeContentKey.decode(contentKey)
186+
const { nodeHash } = decodeAccountTrieNodeContentKey(contentKey)
185187
this.manager.trie.db.local.set(bytesToUnprefixedHex(nodeHash), bytesToHex(contentKey))
186188
} else if (contentType === StateNetworkContentType.ContractTrieNode) {
187-
const { nodeHash } = StorageTrieNodeContentKey.decode(contentKey)
189+
const { nodeHash } = decodeStorageTrieNodeContentKey(contentKey)
188190
this.manager.trie.db.local.set(bytesToUnprefixedHex(nodeHash), bytesToHex(contentKey))
189191
}
190192
await this.db.put(contentKey, content)
@@ -202,7 +204,7 @@ export class StateNetwork extends BaseNetwork {
202204
): Promise<{
203205
stored: number
204206
}> {
205-
const { path } = AccountTrieNodeContentKey.decode(contentKey)
207+
const { path } = decodeAccountTrieNodeContentKey(contentKey)
206208
const { proof, blockHash } = AccountTrieNodeOffer.deserialize(content)
207209
const interested = await this.storeInterestedAccountTrieNodes(path, proof)
208210
void this.forwardAccountTrieOffer(path, proof, blockHash)
@@ -235,11 +237,11 @@ export class StateNetwork extends BaseNetwork {
235237
`${i} Path: [${newpaths}] - ${curNode.constructor.name}: ${bytesToHex(nodeHash).slice(0, 8)}...`,
236238
)
237239
i++
238-
const contentKey = AccountTrieNodeContentKey.encode({
240+
const contentKey = encodeAccountTrieNodeContentKey({
239241
nodeHash,
240242
path: packNibbles(newpaths),
241243
})
242-
const contentId = StateNetworkContentId.fromBytes(contentKey)
244+
const contentId = stateNetworkContentIdFromBytes(contentKey)
243245
const in_radius = distance(bytesToUnprefixedHex(contentId), this.enr.nodeId) < this.nodeRadius
244246
if (in_radius) {
245247
const dbContent = AccountTrieNodeRetrieval.serialize({
@@ -264,7 +266,7 @@ export class StateNetwork extends BaseNetwork {
264266
const { nodes, newpaths } = nextOffer(path, proof)
265267
const content = AccountTrieNodeOffer.serialize({ blockHash, proof: [...nodes] })
266268
const nodeHash = new Trie({ useKeyHashing: true })['hash'](nodes[nodes.length - 1])
267-
const contentKey = AccountTrieNodeContentKey.encode({
269+
const contentKey = encodeAccountTrieNodeContentKey({
268270
nodeHash,
269271
path: packNibbles(newpaths),
270272
})
@@ -298,7 +300,7 @@ export class StateNetwork extends BaseNetwork {
298300
): Promise<{
299301
stored: number
300302
}> {
301-
const { addressHash, path } = StorageTrieNodeContentKey.decode(contentKey)
303+
const { addressHash, path } = decodeStorageTrieNodeContentKey(contentKey)
302304
const { blockHash, accountProof, storageProof } = StorageTrieNodeOffer.deserialize(content)
303305
const interested = await this.storeInterestedStorageTrieNodes(path, storageProof, addressHash)
304306
await this.receiveAccountTrieNodeOffer(
@@ -339,12 +341,12 @@ export class StateNetwork extends BaseNetwork {
339341
`${i} Path: [${newpaths}] - ${curNode.constructor.name}: ${bytesToHex(nodeHash).slice(0, 8)}...`,
340342
)
341343
i++
342-
const contentKey = StorageTrieNodeContentKey.encode({
344+
const contentKey = encodeStorageTrieNodeContentKey({
343345
nodeHash,
344346
path: packNibbles(newpaths),
345347
addressHash,
346348
})
347-
const contentId = StateNetworkContentId.fromBytes(contentKey)
349+
const contentId = stateNetworkContentIdFromBytes(contentKey)
348350
const in_radius = distance(bytesToUnprefixedHex(contentId), this.enr.nodeId) < this.nodeRadius
349351
if (in_radius) {
350352
const dbContent = StorageTrieNodeRetrieval.serialize({
@@ -378,7 +380,7 @@ export class StateNetwork extends BaseNetwork {
378380
storageProof: [...nodes],
379381
})
380382
const nodeHash = new Trie({ useKeyHashing: true })['hash'](nodes[nodes.length - 1])
381-
const contentKey = StorageTrieNodeContentKey.encode({
383+
const contentKey = encodeStorageTrieNodeContentKey({
382384
nodeHash,
383385
path: packNibbles(newpaths),
384386
addressHash,
@@ -387,7 +389,7 @@ export class StateNetwork extends BaseNetwork {
387389
return { content, contentKey }
388390
}
389391
async receiveContractCodeOffer(contentKey: Uint8Array, content: Uint8Array) {
390-
const { addressHash, codeHash } = ContractCodeContentKey.decode(contentKey)
392+
const { addressHash, codeHash } = decodeContractCodeContentKey(contentKey)
391393
const { accountProof, blockHash, code } = ContractCodeOffer.deserialize(content)
392394
const codeContent = ContractRetrieval.serialize({ code })
393395
this.manager.trie.db.local.set(bytesToUnprefixedHex(codeHash), bytesToHex(contentKey))

packages/portalnetwork/src/networks/state/util.ts

Lines changed: 66 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -39,68 +39,80 @@ export const keyType = (contentKey: Uint8Array): StateNetworkContentType => {
3939
throw new Error(`Invalid content key type: ${contentKey[0]}`)
4040
}
4141
}
42-
export class AccountTrieNodeContentKey {
43-
static encode({ path, nodeHash }: TAccountTrieNodeKey): Uint8Array {
44-
const key = AccountTrieNodeKey.serialize({ path: Uint8Array.from(path), nodeHash })
45-
return Uint8Array.from([0x20, ...key])
46-
}
47-
static decode(key: Uint8Array): TAccountTrieNodeKey {
48-
return AccountTrieNodeKey.deserialize(key.slice(1))
49-
}
42+
43+
export function encodeAccountTrieNodeContentKey({
44+
path,
45+
nodeHash,
46+
}: TAccountTrieNodeKey): Uint8Array {
47+
const key = AccountTrieNodeKey.serialize({ path: Uint8Array.from(path), nodeHash })
48+
return Uint8Array.from([0x20, ...key])
5049
}
5150

52-
export class StorageTrieNodeContentKey {
53-
static encode({ addressHash, path, nodeHash }: TStorageTrieNodeKey): Uint8Array {
54-
const key = StorageTrieNodeKey.serialize({ addressHash, path, nodeHash })
55-
return Uint8Array.from([0x21, ...key])
56-
}
57-
static decode(key: Uint8Array): TStorageTrieNodeKey {
58-
return StorageTrieNodeKey.deserialize(key.slice(1))
59-
}
51+
export function decodeAccountTrieNodeContentKey(key: Uint8Array): TAccountTrieNodeKey {
52+
return AccountTrieNodeKey.deserialize(key.slice(1))
6053
}
6154

62-
export class ContractCodeContentKey {
63-
static encode({ addressHash, codeHash }: TContractCodeKey): Uint8Array {
64-
const key = ContractCodeKey.serialize({ addressHash, codeHash })
65-
return Uint8Array.from([0x22, ...key])
66-
}
67-
static decode(key: Uint8Array): TContractCodeKey {
68-
return ContractCodeKey.deserialize(key.slice(1))
69-
}
55+
export function encodeStorageTrieNodeContentKey({
56+
addressHash,
57+
path,
58+
nodeHash,
59+
}: TStorageTrieNodeKey): Uint8Array {
60+
const key = StorageTrieNodeKey.serialize({ addressHash, path, nodeHash })
61+
return Uint8Array.from([0x21, ...key])
62+
}
63+
64+
export function decodeStorageTrieNodeContentKey(key: Uint8Array): TStorageTrieNodeKey {
65+
return StorageTrieNodeKey.deserialize(key.slice(1))
66+
}
67+
68+
export function encodeContractCodeContentKey({
69+
addressHash,
70+
codeHash,
71+
}: TContractCodeKey): Uint8Array {
72+
const key = ContractCodeKey.serialize({ addressHash, codeHash })
73+
return Uint8Array.from([0x22, ...key])
7074
}
75+
76+
export function decodeContractCodeContentKey(key: Uint8Array): TContractCodeKey {
77+
return ContractCodeKey.deserialize(key.slice(1))
78+
}
79+
7180
export type TStateNetworkContentKey = TAccountTrieNodeKey | TStorageTrieNodeKey | TContractCodeKey
72-
export class StateNetworkContentKey {
73-
static encode(opts: TAccountTrieNodeKey | TStorageTrieNodeKey | TContractCodeKey): Uint8Array {
74-
if ('codeHash' in opts) {
75-
return ContractCodeContentKey.encode(opts)
76-
} else if ('addressHash' in opts) {
77-
return StorageTrieNodeContentKey.encode(opts)
78-
} else {
79-
return AccountTrieNodeContentKey.encode(opts)
80-
}
81-
}
82-
static decode(key: Uint8Array): TStateNetworkContentKey {
83-
const type = keyType(key)
84-
if (type === StateNetworkContentType.ContractByteCode) {
85-
return ContractCodeContentKey.decode(key)
86-
} else if (type === StateNetworkContentType.ContractTrieNode) {
87-
return StorageTrieNodeContentKey.decode(key)
88-
} else {
89-
return AccountTrieNodeContentKey.decode(key)
90-
}
81+
82+
export function encodeStateNetworkContentKey(
83+
opts: TAccountTrieNodeKey | TStorageTrieNodeKey | TContractCodeKey,
84+
): Uint8Array {
85+
if ('codeHash' in opts) {
86+
return encodeContractCodeContentKey(opts)
87+
} else if ('addressHash' in opts) {
88+
return encodeStorageTrieNodeContentKey(opts)
89+
} else {
90+
return encodeAccountTrieNodeContentKey(opts)
9191
}
9292
}
9393

94-
export class StateNetworkContentId {
95-
static fromKeyObj(key: TAccountTrieNodeKey | TStorageTrieNodeKey | TContractCodeKey): Uint8Array {
96-
const bytes = StateNetworkContentKey.encode(key)
97-
return sha256(bytes)
98-
}
99-
static fromBytes(key: Uint8Array): Uint8Array {
100-
return sha256(key)
94+
export function decodeStateNetworkContentKey(key: Uint8Array): TStateNetworkContentKey {
95+
const type = keyType(key)
96+
if (type === StateNetworkContentType.ContractByteCode) {
97+
return decodeContractCodeContentKey(key)
98+
} else if (type === StateNetworkContentType.ContractTrieNode) {
99+
return decodeStorageTrieNodeContentKey(key)
100+
} else {
101+
return decodeAccountTrieNodeContentKey(key)
101102
}
102103
}
103104

105+
export function fromKeyObjToStateNetworkContentId(
106+
key: TAccountTrieNodeKey | TStorageTrieNodeKey | TContractCodeKey,
107+
): Uint8Array {
108+
const bytes = encodeStateNetworkContentKey(key)
109+
return sha256(bytes)
110+
}
111+
112+
export function stateNetworkContentIdFromBytes(key: Uint8Array): Uint8Array {
113+
return sha256(key)
114+
}
115+
104116
export function wrapDBContent(contentKey: Uint8Array, dbContent: string) {
105117
const keytype = keyType(contentKey)
106118
const dbBytes = hexToBytes(`0x${dbContent}`)
@@ -150,13 +162,13 @@ export function getDatabaseKey(contentKey: Uint8Array) {
150162
let dbKey = contentKey
151163
switch (type) {
152164
case StateNetworkContentType.AccountTrieNode:
153-
dbKey = AccountTrieNodeContentKey.decode(contentKey).nodeHash
165+
dbKey = decodeAccountTrieNodeContentKey(contentKey).nodeHash
154166
break
155167
case StateNetworkContentType.ContractTrieNode:
156-
dbKey = StorageTrieNodeContentKey.decode(contentKey).nodeHash
168+
dbKey = decodeStorageTrieNodeContentKey(contentKey).nodeHash
157169
break
158170
case StateNetworkContentType.ContractByteCode:
159-
dbKey = ContractCodeContentKey.decode(contentKey).codeHash
171+
dbKey = decodeContractCodeContentKey(contentKey).codeHash
160172
break
161173
default:
162174
break
@@ -225,7 +237,7 @@ export function extractAccountProof(
225237
blockHash,
226238
proof: accountProof,
227239
})
228-
const accountTrieOfferKey = AccountTrieNodeContentKey.encode({
240+
const accountTrieOfferKey = encodeAccountTrieNodeContentKey({
229241
nodeHash,
230242
path: packNibbles(nodePath),
231243
})

0 commit comments

Comments
 (0)