diff options
Diffstat (limited to 'src/entity.cpp')
-rw-r--r-- | src/entity.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/entity.cpp b/src/entity.cpp new file mode 100644 index 0000000..1294484 --- /dev/null +++ b/src/entity.cpp @@ -0,0 +1,35 @@ +#include "entity.h" +#include "core.h" + +namespace hotstuff { + +void Block::serialize(DataStream &s) const { + s << (uint32_t)parent_hashes.size(); + for (const auto &hash: parent_hashes) + s << hash; + s << (uint32_t)cmds.size(); + for (auto cmd: cmds) + s << *cmd; + if (qc == nullptr) + s << (uint8_t)0; + else + s << (uint8_t)1 << *qc; +} + +void Block::unserialize(DataStream &s, HotStuffCore *hsc) { + uint32_t n; + uint8_t has_qc; + s >> n; + parent_hashes.resize(n); + for (auto &hash: parent_hashes) + s >> hash; + s >> n; + cmds.resize(n); + for (auto &cmd: cmds) + cmd = hsc->parse_cmd(s); + s >> has_qc; + qc = has_qc ? hsc->parse_quorum_cert(s) : nullptr; + this->hash = salticidae::get_hash(*this); +} + +} |