@@ -1622,9 +1622,7 @@ void Node::Peer::PbftSendStamp()
16221622 if (m_Tip.m_hh == m_This.m_Processor .m_Cursor .m_hh )
16231623 return ;
16241624
1625- proto::PbftStamp msgStamp;
1626- TemporarySwap ts (msgStamp.m_vSer , m_This.m_Validator .m_Stamp .m_vSer );
1627- Send (msgStamp);
1625+ Send (m_This.m_Validator .m_Stamp .m_Msg );
16281626}
16291627
16301628Height Node::Peer::get_MinPeerFork ()
@@ -4568,7 +4566,7 @@ void Node::Peer::OnMsg(proto::PbftStamp&& msg)
45684566
45694567 // all good
45704568 v.m_Stamp .m_ID = m_Tip.m_hh ;
4571- v.m_Stamp .m_vSer = std::move (msg. m_vSer );
4569+ v.m_Stamp .m_Msg = std::move (msg);
45724570
45734571 v.SaveStamp ();
45744572
@@ -5807,17 +5805,11 @@ void Node::Validator::Initialize()
58075805 p.get_DB ().ParamGet (NodeDB::ParamID::PbftStamp, nullptr , nullptr , &buf);
58085806 if (!buf.empty ())
58095807 {
5810- Block::Pbft::State state;
5811-
58125808 Deserializer der;
58135809 der.reset (buf);
5814- der & state;
5815-
5816- auto n = der.bytes_left ();
5817- der & m_Stamp.m_ID ;
5818-
5819- buf.resize (buf.size () - n);
5820- m_Stamp.m_vSer = std::move (buf);
5810+ der
5811+ & m_Stamp.m_ID
5812+ & m_Stamp.m_Msg ;
58215813 }
58225814 else
58235815 ZeroObject (m_Stamp.m_ID );
@@ -6265,15 +6257,11 @@ void Node::Validator::TestBlock(const Block::SystemState::Full& s, const HeightH
62656257
62666258 if (d.m_Flags1 != nFlags)
62676259 Exc::Fail (" flags mismatch" );
6260+
6261+ // save the
62686262 }
62696263 else
62706264 {
6271- Merkle::Hash hv;
6272- m_ValidatorSet.get_Hash (hv);
6273-
6274- if (hv != Cast::Reinterpret<Block::Pbft::HdrData>(s.m_PoW ).m_hvVsNext )
6275- Exc::Fail (" vs.next" );
6276-
62776265 // make sure all fees were added as a block reward
62786266 struct Walker
62796267 :public TxKernel::IWalker
@@ -7075,23 +7063,25 @@ void Node::Validator::CheckState(uint32_t iR)
70757063
70767064 if (r.m_Pbft .m_Whitelist .m_NumRequired )
70777065 {
7078- Serializer ser;
7079-
7080- // serialize it in a form compatible with basic set
7081- ser & m_ValidatorSet.m_mapValidators .size ();
7082- for (const auto & v : m_ValidatorSet.m_mapValidators )
7066+ Height h = s.get_Height ();
7067+ if (h > m_Stamp.m_ID .m_Height )
70837068 {
7084- ser
7085- & v.m_Key
7086- & v.m_Weight ;
7087- }
7069+ m_ValidatorSet.get_Hash (m_Stamp.m_Msg .m_hvVsNext );
70887070
7089- ser.swap_buf (m_Stamp.m_vSer );
7071+ // export our validator set it in a form compatible with basic set
7072+ m_Stamp.m_Msg .m_ValidatorSet .m_map .clear ();
7073+ for (const auto & vp : m_ValidatorSet.m_mapValidators )
7074+ {
7075+ auto w = vp.get_EffectiveWeight ();
7076+ if (w)
7077+ m_Stamp.m_Msg .m_ValidatorSet .m_map [vp.m_Key ] = w;
7078+ }
70907079
7091- m_Stamp.m_ID .m_Height = s. get_Height () ;
7092- m_Stamp.m_ID .m_Hash = id.m_Hash ;
7080+ m_Stamp.m_ID .m_Height = h ;
7081+ m_Stamp.m_ID .m_Hash = id.m_Hash ;
70937082
7094- SaveStamp ();
7083+ SaveStamp ();
7084+ }
70957085 }
70967086
70977087 auto & p = get_ParentObj ().m_Processor ;
@@ -7271,19 +7261,13 @@ bool Node::Validator::SelectMultisigValidators(Bitmask<Block::Pbft::s_MaxValidat
72717261
72727262void Node::Validator::SaveStamp ()
72737263{
7274- auto n = m_Stamp.m_vSer .size ();
7264+ Serializer ser;
7265+ ser
7266+ & m_Stamp.m_ID
7267+ & m_Stamp.m_Msg ;
72757268
7276- {
7277- Serializer ser;
7278- ser.swap_buf (m_Stamp.m_vSer );
7279- ser & m_Stamp.m_ID ;
7280- ser.swap_buf (m_Stamp.m_vSer );
7281- }
7282-
7283- Blob blob (m_Stamp.m_vSer );
7269+ Blob blob (ser.buffer ().first , (uint32_t ) ser.buffer ().second );
72847270 get_ParentObj ().m_Processor .get_DB ().ParamSet (NodeDB::ParamID::PbftStamp, nullptr , &blob);
7285-
7286- m_Stamp.m_vSer .resize (n);
72877271}
72887272
72897273bool Node::Validator::ShouldSendStamp ()
0 commit comments