Bitcoin ABC 0.33.5
P2P Digital Currency
protocol.h
Go to the documentation of this file.
1// Copyright (c) 2020 The Bitcoin developers
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5#ifndef BITCOIN_AVALANCHE_PROTOCOL_H
6#define BITCOIN_AVALANCHE_PROTOCOL_H
7
9#include <protocol.h> // for CInv
10#include <serialize.h>
11#include <uint256.h>
12
13#include <cstdint>
14#include <limits>
15#include <vector>
16
17namespace avalanche {
18
19class Vote {
20 uint32_t error{std::numeric_limits<uint32_t>::max()};
22
23public:
24 Vote() = default;
25 Vote(uint32_t errorIn, uint256 hashIn) : error(errorIn), hash(hashIn) {}
26
27 const uint256 &GetHash() const { return hash; }
28 uint32_t GetError() const { return error; }
29
30 // serialization support
31 SERIALIZE_METHODS(Vote, obj) { READWRITE(obj.error, obj.hash); }
32};
33
34class Response {
35 uint64_t round{std::numeric_limits<uint64_t>::max()};
36 uint32_t cooldown{std::numeric_limits<uint32_t>::max()};
37 std::vector<Vote> votes;
38
39public:
40 Response() = default;
41 Response(uint64_t roundIn, uint32_t cooldownIn, std::vector<Vote> votesIn)
42 : round(roundIn), cooldown(cooldownIn), votes(votesIn) {}
43
44 uint64_t getRound() const { return round; }
45 uint32_t getCooldown() const { return cooldown; }
46 const std::vector<Vote> &GetVotes() const { return votes; }
47
48 // serialization support
50 READWRITE(obj.round, obj.cooldown, obj.votes);
51 }
52};
53
54class Poll {
55 uint64_t round;
56 std::vector<CInv> invs;
57
58public:
59 Poll(uint64_t roundIn, std::vector<CInv> invsIn)
60 : round(roundIn), invs(std::move(invsIn)) {}
61
62 uint64_t GetRound() { return round; }
63 const std::vector<CInv> &GetInvs() const { return invs; }
64
65 // serialization support
66 SERIALIZE_METHODS(Poll, obj) { READWRITE(obj.round, obj.invs); }
67};
68
69class Hello {
72 uint32_t max_elements;
73
74public:
75 Hello(Delegation delegationIn, SchnorrSig sigIn, uint32_t max_elements_in)
76 : delegation(std::move(delegationIn)), sig(sigIn),
77 max_elements(max_elements_in) {}
78
79 SchnorrSig GetSig() { return sig; }
80 uint32_t GetMaxElements() const { return max_elements; }
81
82 // serialization support
84 READWRITE(obj.delegation, obj.sig, obj.max_elements);
85 }
86};
87
88} // namespace avalanche
89
90#endif // BITCOIN_AVALANCHE_PROTOCOL_H
uint32_t max_elements
Definition: protocol.h:72
uint32_t GetMaxElements() const
Definition: protocol.h:80
Delegation delegation
Definition: protocol.h:70
SchnorrSig sig
Definition: protocol.h:71
SERIALIZE_METHODS(Hello, obj)
Definition: protocol.h:83
SchnorrSig GetSig()
Definition: protocol.h:79
Hello(Delegation delegationIn, SchnorrSig sigIn, uint32_t max_elements_in)
Definition: protocol.h:75
std::vector< CInv > invs
Definition: protocol.h:56
uint64_t GetRound()
Definition: protocol.h:62
uint64_t round
Definition: protocol.h:55
const std::vector< CInv > & GetInvs() const
Definition: protocol.h:63
Poll(uint64_t roundIn, std::vector< CInv > invsIn)
Definition: protocol.h:59
SERIALIZE_METHODS(Poll, obj)
Definition: protocol.h:66
uint32_t getCooldown() const
Definition: protocol.h:45
const std::vector< Vote > & GetVotes() const
Definition: protocol.h:46
SERIALIZE_METHODS(Response, obj)
Definition: protocol.h:49
Response(uint64_t roundIn, uint32_t cooldownIn, std::vector< Vote > votesIn)
Definition: protocol.h:41
uint64_t getRound() const
Definition: protocol.h:44
uint64_t round
Definition: protocol.h:35
std::vector< Vote > votes
Definition: protocol.h:37
uint32_t cooldown
Definition: protocol.h:36
SERIALIZE_METHODS(Vote, obj)
Definition: protocol.h:31
Vote()=default
uint256 hash
Definition: protocol.h:21
Vote(uint32_t errorIn, uint256 hashIn)
Definition: protocol.h:25
uint32_t GetError() const
Definition: protocol.h:28
const uint256 & GetHash() const
Definition: protocol.h:27
uint32_t error
Definition: protocol.h:20
256-bit opaque blob.
Definition: uint256.h:129
std::array< uint8_t, CPubKey::SCHNORR_SIZE > SchnorrSig
a Schnorr signature
Definition: key.h:25
Implement std::hash so RCUPtr can be used as a key for maps or sets.
Definition: rcu.h:259
#define READWRITE(...)
Definition: serialize.h:176