nim-eth/tests/p2p/eth_protocol.nim

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,
Hash256(),
Hash256(),
timeout = chronos.seconds(10))
handshake:
proc status(peer: Peer,
protocolVersion: uint,
networkId: NetworkId,
totalDifficulty: DifficultyInt,
bestHash: KeccakHash,
genesisHash: KeccakHash)
requestResponse:
proc getBlockHeaders(peer: Peer, request: openArray[KeccakHash]) {.gcsafe.} =
var headers: seq[BlockHeader]
await response.send(headers)
proc blockHeaders(p: Peer, headers: openArray[BlockHeader])
requestResponse:
proc getBlockBodies(peer: Peer, hashes: openArray[KeccakHash]) {.gcsafe.} = discard
proc blockBodies(peer: Peer, blocks: openArray[BlockBody])
nextID 13
requestResponse:
proc getNodeData(peer: Peer, hashes: openArray[KeccakHash]) = discard
proc nodeData(peer: Peer, data: openArray[Blob])
requestResponse:
proc getReceipts(peer: Peer, hashes: openArray[KeccakHash]) = discard
proc receipts(peer: Peer, receipts: openArray[Receipt])