2022-10-11 03:02:16 +00:00
|
|
|
import
|
|
|
|
chronos,
|
|
|
|
../../eth/[p2p, common]
|
|
|
|
|
|
|
|
# for testing purpose
|
|
|
|
# real eth protocol implementation is in nimbus-eth1 repo
|
|
|
|
|
|
|
|
type
|
2022-11-09 17:57:04 +00:00
|
|
|
PeerState = ref object
|
2022-10-11 03:02:16 +00:00
|
|
|
initialized*: bool
|
|
|
|
|
|
|
|
p2pProtocol eth(version = 63,
|
|
|
|
peerState = PeerState,
|
|
|
|
useRequestIds = false):
|
|
|
|
|
|
|
|
onPeerConnected do (peer: Peer):
|
|
|
|
let
|
|
|
|
network = peer.network
|
|
|
|
|
|
|
|
let m = 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.} = discard
|
|
|
|
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])
|