#pragma once #include #include #include #include #include namespace xrpl { /** A leaf node for a transaction. No metadata is included. */ class SHAMapTxLeafNode final : public SHAMapLeafNode, public CountedObject { public: SHAMapTxLeafNode(boost::intrusive_ptr item, std::uint32_t cowid) : SHAMapLeafNode(std::move(item), cowid) { updateHash(); } SHAMapTxLeafNode( boost::intrusive_ptr item, std::uint32_t cowid, SHAMapHash const& hash) : SHAMapLeafNode(std::move(item), cowid, hash) { } intr_ptr::SharedPtr clone(std::uint32_t cowid) const final { return intr_ptr::make_shared(item_, cowid, hash_); } SHAMapNodeType getType() const final { return SHAMapNodeType::tnTRANSACTION_NM; } void updateHash() final { hash_ = SHAMapHash{sha512Half(HashPrefix::transactionID, item_->slice())}; } void serializeForWire(Serializer& s) const final { s.addRaw(item_->slice()); s.add8(wireTypeTransaction); } void serializeWithPrefix(Serializer& s) const final { s.add32(HashPrefix::transactionID); s.addRaw(item_->slice()); } }; } // namespace xrpl