nim-eth/tests/p2p/eth_protocol.nim
Jacek Sieka 6bd6bae86c
Align core types with execution spec (#733)
Since these types were written, we've gained an executable spec:

https://github.com/ethereum/execution-specs

This PR aligns some of the types we use with this spec to simplify
comparisons and cross-referencing.

Using a `distinct` type is a tradeoff between nim ergonomics, type
safety and the ability to work around nim quirks and stdlib weaknesses.

In particular, it allows us to overload common functions such as `hash`
with correct and performant versions as well as maintain control over
string conversions etc at the cost of a little bit of ceremony when
instantiating them.

Apart from distinct byte types, `Hash32`, is introduced in lieu of the
existing `Hash256`, again aligning this commonly used type with the spec
which picks bytes rather than bits in the name.
2024-09-29 10:52:19 +02:00

55 lines
1.6 KiB
Nim

import
chronos,
../../eth/[p2p, common]
# for testing purpose
# real eth protocol implementation is in nimbus-eth1 repo
type
PeerState = ref object of RootRef
initialized*: bool
p2pProtocol eth(version = 63,
peerState = PeerState,
useRequestIds = false):
onPeerConnected do (peer: Peer):
let
network = peer.network
discard await peer.status(63,
network.networkId,
0.u256,
default(Hash32),
default(Hash32),
timeout = chronos.seconds(10))
handshake:
proc status(peer: Peer,
protocolVersion: uint,
networkId: NetworkId,
totalDifficulty: DifficultyInt,
bestHash: Hash32,
genesisHash: Hash32)
requestResponse:
proc getBlockHeaders(peer: Peer, request: openArray[Hash32]) {.gcsafe.} =
var headers: seq[Header]
await response.send(headers)
proc blockHeaders(p: Peer, headers: openArray[Header])
requestResponse:
proc getBlockBodies(peer: Peer, hashes: openArray[Hash32]) {.gcsafe.} = discard
proc blockBodies(peer: Peer, blocks: openArray[BlockBody])
nextID 13
requestResponse:
proc getNodeData(peer: Peer, hashes: openArray[Hash32]) = discard
proc nodeData(peer: Peer, data: openArray[seq[byte]])
requestResponse:
proc getReceipts(peer: Peer, hashes: openArray[Hash32]) = discard
proc receipts(peer: Peer, receipts: openArray[Receipt])