diff options
Diffstat (limited to 'src/entity.cpp')
-rw-r--r-- | src/entity.cpp | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/src/entity.cpp b/src/entity.cpp index a5dc44e..594fdbe 100644 --- a/src/entity.cpp +++ b/src/entity.cpp @@ -4,38 +4,44 @@ namespace hotstuff { void Block::serialize(DataStream &s) const { - s << (uint32_t)parent_hashes.size(); + s << htole((uint32_t)parent_hashes.size()); for (const auto &hash: parent_hashes) s << hash; - s << (uint32_t)cmds.size(); + s << htole((uint32_t)cmds.size()); for (auto cmd: cmds) s << *cmd; if (qc) s << (uint8_t)1 << *qc; else s << (uint8_t)0; - if (extra) - s << (uint8_t)1 << *extra; - else - s << (uint8_t)0; + s << htole((uint32_t)extra.size()) << extra; } void Block::unserialize(DataStream &s, HotStuffCore *hsc) { uint32_t n; uint8_t flag; s >> n; + n = letoh(n); parent_hashes.resize(n); for (auto &hash: parent_hashes) s >> hash; s >> n; + n = letoh(n); cmds.resize(n); for (auto &cmd: cmds) cmd = hsc->parse_cmd(s); s >> flag; qc = flag ? hsc->parse_quorum_cert(s) : nullptr; + s >> n; + n = letoh(n); + if (n == 0) + extra.clear(); + else + { + auto base = s.get_data_inplace(n); + extra = bytearray_t(base, base + n); + } this->hash = salticidae::get_hash(*this); - s >> flag; - extra = flag ? hsc->parse_extra_block_data(s) : nullptr; } } |