add: metadata-v3 for custody subnet count (#6486)
* init: add metadatav3, save progress * fix import issues * fix spec version * fix: metadata_v2 to return altair.MetaData * update metata function backward compatible now
This commit is contained in:
parent
9be615dff9
commit
1ebba1fac4
|
@ -69,7 +69,7 @@ type
|
||||||
protocols: seq[ProtocolInfo]
|
protocols: seq[ProtocolInfo]
|
||||||
## Protocols managed by the DSL and mounted on the switch
|
## Protocols managed by the DSL and mounted on the switch
|
||||||
protocolStates*: seq[RootRef]
|
protocolStates*: seq[RootRef]
|
||||||
metadata*: altair.MetaData
|
metadata*: eip7594.MetaData
|
||||||
connectTimeout*: chronos.Duration
|
connectTimeout*: chronos.Duration
|
||||||
seenThreshold*: chronos.Duration
|
seenThreshold*: chronos.Duration
|
||||||
connQueue: AsyncQueue[PeerAddr]
|
connQueue: AsyncQueue[PeerAddr]
|
||||||
|
@ -106,7 +106,7 @@ type
|
||||||
lastReqTime*: Moment
|
lastReqTime*: Moment
|
||||||
connections*: int
|
connections*: int
|
||||||
enr*: Opt[enr.Record]
|
enr*: Opt[enr.Record]
|
||||||
metadata*: Opt[altair.MetaData]
|
metadata*: Opt[eip7594.MetaData]
|
||||||
failedMetadataRequests: int
|
failedMetadataRequests: int
|
||||||
lastMetadataTime*: Moment
|
lastMetadataTime*: Moment
|
||||||
direction*: PeerType
|
direction*: PeerType
|
||||||
|
@ -1795,7 +1795,7 @@ proc new(T: type Eth2Node,
|
||||||
let
|
let
|
||||||
connectTimeout = chronos.seconds(10)
|
connectTimeout = chronos.seconds(10)
|
||||||
seenThreshold = chronos.seconds(10)
|
seenThreshold = chronos.seconds(10)
|
||||||
type MetaData = altair.MetaData # Weird bug without this..
|
type MetaData = eip7594.MetaData # Weird bug without this..
|
||||||
|
|
||||||
# Versions up to v22.3.0 would write an empty `MetaData` to
|
# Versions up to v22.3.0 would write an empty `MetaData` to
|
||||||
#`data-dir/node-metadata.json` which would then be reloaded on startup - don't
|
#`data-dir/node-metadata.json` which would then be reloaded on startup - don't
|
||||||
|
@ -2077,12 +2077,32 @@ proc p2pProtocolBackendImpl*(p: P2PProtocol): Backend =
|
||||||
import ./peer_protocol
|
import ./peer_protocol
|
||||||
export peer_protocol
|
export peer_protocol
|
||||||
|
|
||||||
|
proc metadataV2ToV3(metadata: altair.MetaData): eip7594.MetaData =
|
||||||
|
eip7594.MetaData(
|
||||||
|
seq_number: metadata.seq_number,
|
||||||
|
attnets: metadata.attnets,
|
||||||
|
syncnets: metadata.syncnets)
|
||||||
|
|
||||||
|
proc getMetadata_vx(node: Eth2Node, peer: Peer):
|
||||||
|
Future[NetRes[eip7594.MetaData]]
|
||||||
|
{.async: (raises: [CancelledError]).} =
|
||||||
|
let
|
||||||
|
res =
|
||||||
|
if node.cfg.EIP7594_FORK_EPOCH != FAR_FUTURE_EPOCH:
|
||||||
|
# Directly fetch eip7594 metadata if available
|
||||||
|
await getMetadata_v3(peer)
|
||||||
|
else:
|
||||||
|
let metadata_v2_result = await getMetadata_v2(peer)
|
||||||
|
metadata_v2_result.map(proc (altairData: altair.MetaData): eip7594.MetaData {.closure.} =
|
||||||
|
metadataV2ToV3(altairData)
|
||||||
|
)
|
||||||
|
return res
|
||||||
|
|
||||||
proc updatePeerMetadata(node: Eth2Node, peerId: PeerId) {.async: (raises: [CancelledError]).} =
|
proc updatePeerMetadata(node: Eth2Node, peerId: PeerId) {.async: (raises: [CancelledError]).} =
|
||||||
trace "updating peer metadata", peerId
|
trace "updating peer metadata", peerId
|
||||||
|
|
||||||
let
|
let
|
||||||
peer = node.getPeer(peerId)
|
peer = node.getPeer(peerId)
|
||||||
newMetadataRes = await peer.getMetadata_v2()
|
newMetadataRes = await node.getMetadata_vx(peer)
|
||||||
newMetadata = newMetadataRes.valueOr:
|
newMetadata = newMetadataRes.valueOr:
|
||||||
debug "Failed to retrieve metadata from peer!", peerId, error = newMetadataRes.error
|
debug "Failed to retrieve metadata from peer!", peerId, error = newMetadataRes.error
|
||||||
peer.failedMetadataRequests.inc()
|
peer.failedMetadataRequests.inc()
|
||||||
|
|
|
@ -177,6 +177,14 @@ p2pProtocol PeerSync(version = 1,
|
||||||
|
|
||||||
proc getMetadata_v2(peer: Peer): altair.MetaData
|
proc getMetadata_v2(peer: Peer): altair.MetaData
|
||||||
{.libp2pProtocol("metadata", 2).} =
|
{.libp2pProtocol("metadata", 2).} =
|
||||||
|
let altair_metadata = altair.MetaData(
|
||||||
|
seq_number: peer.network.metadata.seq_number,
|
||||||
|
attnets: peer.network.metadata.attnets,
|
||||||
|
syncnets: peer.network.metadata.syncnets)
|
||||||
|
altair_metadata
|
||||||
|
|
||||||
|
proc getMetadata_v3(peer: Peer): eip7594.MetaData
|
||||||
|
{.libp2pProtocol("metadata", 3).} =
|
||||||
peer.network.metadata
|
peer.network.metadata
|
||||||
|
|
||||||
proc goodbye(peer: Peer, reason: uint64)
|
proc goodbye(peer: Peer, reason: uint64)
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
import
|
import
|
||||||
std/[sequtils],
|
std/[sequtils],
|
||||||
"."/[base, deneb],
|
"."/[altair, base, deneb],
|
||||||
kzg4844,
|
kzg4844,
|
||||||
stew/[byteutils]
|
stew/[byteutils]
|
||||||
|
|
||||||
|
@ -79,6 +79,13 @@ type
|
||||||
|
|
||||||
CscBits* = BitArray[DATA_COLUMN_SIDECAR_SUBNET_COUNT]
|
CscBits* = BitArray[DATA_COLUMN_SIDECAR_SUBNET_COUNT]
|
||||||
|
|
||||||
|
# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.4/specs/_features/eip7594/p2p-interface.md#metadata
|
||||||
|
MetaData* = object
|
||||||
|
seq_number*: uint64
|
||||||
|
attnets*: AttnetBits
|
||||||
|
syncnets*: SyncnetBits
|
||||||
|
custody_subnet_count*: uint64
|
||||||
|
|
||||||
# func serializeDataColumn(data_column: DataColumn): auto =
|
# func serializeDataColumn(data_column: DataColumn): auto =
|
||||||
# var counter = 0
|
# var counter = 0
|
||||||
# var serd : array[MAX_BLOB_COMMITMENTS_PER_BLOCK * BYTES_PER_CELL, byte]
|
# var serd : array[MAX_BLOB_COMMITMENTS_PER_BLOCK * BYTES_PER_CELL, byte]
|
||||||
|
|
|
@ -60,6 +60,8 @@ type
|
||||||
CAPELLA_FORK_EPOCH*: Epoch
|
CAPELLA_FORK_EPOCH*: Epoch
|
||||||
DENEB_FORK_VERSION*: Version
|
DENEB_FORK_VERSION*: Version
|
||||||
DENEB_FORK_EPOCH*: Epoch
|
DENEB_FORK_EPOCH*: Epoch
|
||||||
|
EIP7594_FORK_VERSION*: Version
|
||||||
|
EIP7594_FORK_EPOCH*: Epoch
|
||||||
ELECTRA_FORK_VERSION*: Version
|
ELECTRA_FORK_VERSION*: Version
|
||||||
ELECTRA_FORK_EPOCH*: Epoch
|
ELECTRA_FORK_EPOCH*: Epoch
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue