@@ -1334,6 +1334,25 @@ CBudgetProposal::CBudgetProposal(const CBudgetProposal& other)
13341334 strInvalid = " " ;
13351335}
13361336
1337+ // initialize from network broadcast message
1338+ bool CBudgetProposal::ParseBroadcast (CDataStream& broadcast)
1339+ {
1340+ *this = CBudgetProposal ();
1341+ try {
1342+ broadcast >> LIMITED_STRING (strProposalName, 20 );
1343+ broadcast >> LIMITED_STRING (strURL, 64 );
1344+ broadcast >> nTime;
1345+ broadcast >> nBlockStart;
1346+ broadcast >> nBlockEnd;
1347+ broadcast >> nAmount;
1348+ broadcast >> *(CScriptBase*)(&address);
1349+ broadcast >> nFeeTXHash;
1350+ } catch (std::exception& e) {
1351+ return error (" Unable to deserialize proposal broadcast: %s" , e.what ());
1352+ }
1353+ return true ;
1354+ }
1355+
13371356void CBudgetProposal::SyncVotes (CNode* pfrom, bool fPartial , int & nInvCount) const
13381357{
13391358 for (const auto & it: mapVotes) {
@@ -1590,6 +1609,22 @@ int CBudgetProposal::GetRemainingPaymentCount(int nCurrentHeight) const
15901609 return std::min (nPayments, GetTotalPaymentCount ());
15911610}
15921611
1612+ // return broadcast serialization
1613+ CDataStream CBudgetProposal::GetBroadcast () const
1614+ {
1615+ CDataStream broadcast (SER_NETWORK, PROTOCOL_VERSION);
1616+ broadcast.reserve (1000 );
1617+ broadcast << LIMITED_STRING (strProposalName, 20 );
1618+ broadcast << LIMITED_STRING (strURL, 64 );
1619+ broadcast << nTime;
1620+ broadcast << nBlockStart;
1621+ broadcast << nBlockEnd;
1622+ broadcast << nAmount;
1623+ broadcast << *(CScriptBase*)(&address);
1624+ broadcast << nFeeTXHash;
1625+ return broadcast;
1626+ }
1627+
15931628inline bool CBudgetProposal::PtrHigherYes (CBudgetProposal* a, CBudgetProposal* b)
15941629{
15951630 const int netYes_a = a->GetYeas () - a->GetNays ();
@@ -1710,6 +1745,20 @@ CFinalizedBudget::CFinalizedBudget(const CFinalizedBudget& other) :
17101745 nTime(other.nTime)
17111746{ }
17121747
1748+ bool CFinalizedBudget::ParseBroadcast (CDataStream& broadcast)
1749+ {
1750+ *this = CFinalizedBudget ();
1751+ try {
1752+ broadcast >> LIMITED_STRING (strBudgetName, 20 );
1753+ broadcast >> nBlockStart;
1754+ broadcast >> vecBudgetPayments;
1755+ broadcast >> nFeeTXHash;
1756+ } catch (std::exception& e) {
1757+ return error (" Unable to deserialize finalized budget broadcast: %s" , e.what ());
1758+ }
1759+ return true ;
1760+ }
1761+
17131762bool CFinalizedBudget::AddOrUpdateVote (const CFinalizedBudgetVote& vote, std::string& strError)
17141763{
17151764 const uint256& hash = vote.GetVin ().prevout .GetHash ();
@@ -2132,6 +2181,19 @@ void CFinalizedBudget::SubmitVote()
21322181 }
21332182}
21342183
2184+ // return broadcast serialization
2185+ CDataStream CFinalizedBudget::GetBroadcast () const
2186+ {
2187+ CDataStream broadcast (SER_NETWORK, PROTOCOL_VERSION);
2188+ broadcast.reserve (1000 );
2189+ broadcast << LIMITED_STRING (strBudgetName, 20 );
2190+ broadcast << nBlockStart;
2191+ broadcast << vecBudgetPayments;
2192+ broadcast << nFeeTXHash;
2193+ return broadcast;
2194+ }
2195+
2196+
21352197bool CFinalizedBudget::operator >(const CFinalizedBudget& other) const
21362198{
21372199 const int count = GetVoteCount ();
0 commit comments