本文整理汇总了C++中ledger::ref::gettotalcoins方法的典型用法代码示例。如果您正苦于以下问题:C++ ref::gettotalcoins方法的具体用法?C++ ref::gettotalcoins怎么用?C++ ref::gettotalcoins使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ledger::ref
的用法示例。
在下文中一共展示了ref::gettotalcoins方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: isstartledger
bool isstartledger(ledger::ref ledger) override
{
return ((ledger->getledgerseq() > 2) &&
(ledger->gettotalcoins() < vrp_increase_max || ledger->gettotalcoinsvbc() < vbc_increase_max) &&
(ledger->getclosetime().time_of_day().hours() == 1) &&
((ledger->getclosetimenc() - ledger->getdividendtimenc()) > 3600)
);
}
示例2: dostartvalidation
void dostartvalidation(ledger::ref lastclosedledger, stobject& basevalidation) override
{
// lcl must be validation ledger
assert (isstartledger(lastclosedledger));
std::uint32_t dividendledger = lastclosedledger->getledgerseq();
std::uint64_t dividendcoins = vrp_increase_rate * lastclosedledger->gettotalcoinsvbc() / vrp_increase_rate_parts;
if (dividendcoins + lastclosedledger->gettotalcoins() > vrp_increase_max) {
dividendcoins = 0;
}
std::uint64_t dividendcoinsvbc = 0;
if (lastclosedledger->gettotalcoinsvbc() < vbc_increase_max) {
if (lastclosedledger->getclosetimenc() < vbc_dividend_period_1) {
dividendcoinsvbc = vbc_increase_rate_1 * lastclosedledger->gettotalcoinsvbc() / vbc_increase_rate_1_parts;
} else if (lastclosedledger->getclosetimenc() < vbc_dividend_period_2) {
dividendcoinsvbc = vbc_increase_rate_2 * lastclosedledger->gettotalcoinsvbc() / vbc_increase_rate_2_parts;
} else if (lastclosedledger->getclosetimenc() < vbc_dividend_period_3) {
dividendcoinsvbc = vbc_increase_rate_3 * lastclosedledger->gettotalcoinsvbc() / vbc_increase_rate_3_parts;
} else {
dividendcoinsvbc = vbc_increase_rate_4 * lastclosedledger->gettotalcoinsvbc() / vbc_increase_rate_4_parts;
}
if (dividendcoinsvbc + lastclosedledger->gettotalcoinsvbc() > vbc_increase_max)
dividendcoinsvbc = 0;
}
if (dividendcoins==0 && dividendcoinsvbc==0) {
if (m_journal.warning)
m_journal.warning << "not voting for a dividend start because both vrp and vbc will exceed max.";
return;
}
basevalidation.setfieldu32 (sfdividendledger, dividendledger);
basevalidation.setfieldu64 (sfdividendcoins, dividendcoins);
basevalidation.setfieldu64 (sfdividendcoinsvbc, dividendcoinsvbc);
if (m_journal.info)
m_journal.info << "voting for a dividend start based " << dividendledger << " with vrp "<< dividendcoins << " vbc " << dividendcoinsvbc << " in " << lastclosedledger->gethash();
}
示例3: dostartvoting
void dostartvoting(ledger::ref lastclosedledger, shamap::ref initialposition) override
{
// lcl must be validation ledger
assert (isstartledger(lastclosedledger));
std::uint32_t dividendledger = lastclosedledger->getledgerseq();
std::map<std::pair<uint64_t, uint64_t>, int> votemap;
// get validations for validation ledger
validationset const set = getapp().getvalidations ().getvalidations (lastclosedledger->gethash ());
for (auto const& e : set)
{
stvalidation const& val = *e.second;
if (val.istrusted ())
{
if (val.isfieldpresent (sfdividendledger)
&& val.isfieldpresent (sfdividendcoins)
&& val.isfieldpresent (sfdividendcoinsvbc))
{
uint32_t ledgerseq = val.getfieldu32 (sfdividendledger);
if (ledgerseq != dividendledger) {
m_journal.warning << "mismatch ledger seq " << ledgerseq << " from validator " << val.getnodeid() << " ours: " << dividendledger << " in " << lastclosedledger->gethash();
continue;
}
++votemap[std::make_pair(val.getfieldu64 (sfdividendcoins), val.getfieldu64 (sfdividendcoinsvbc))];
}
}
}
std::pair<uint64_t, uint64_t> ourvote = std::make_pair(0, 0);
int weight = 0;
for (auto const& e : votemap)
{
// take most voted value
if (e.second > weight)
{
ourvote = e.first;
weight = e.second;
}
}
if (weight < getapp().getledgermaster().getminvalidations()) {
m_journal.warning << weight << " votes are not enough to start dividend for " << dividendledger;
return;
}
if (ourvote.first==0 && ourvote.second==0) {
if (m_journal.warning)
m_journal.warning << "not voting for a dividend start because both vrp and vbc voted are 0";
return;
}
if (ourvote.first + lastclosedledger->gettotalcoins() > vrp_increase_max &&
ourvote.second + lastclosedledger->gettotalcoinsvbc() > vbc_increase_max) {
if (m_journal.error)
m_journal.error << "not voting for a dividend start because both vrp and vbc will exceed max.";
return;
}
if (m_journal.warning)
m_journal.warning << "we are voting for a dividend start based " << dividendledger << " with vrp " << ourvote.first << " vbc " << ourvote.second << " with " << weight << " same votes in " << lastclosedledger->gethash();
sttx trans(ttdividend);
trans.setfieldu8(sfdividendtype, dividendmaster::divtype_start);
trans.setfieldaccount(sfaccount, account());
trans.setfieldu32(sfdividendledger, dividendledger);
trans.setfieldu64(sfdividendcoins, ourvote.first);
trans.setfieldu64(sfdividendcoinsvbc, ourvote.second);
uint256 txid = trans.gettransactionid();
if (m_journal.warning)
m_journal.warning << "vote: " << txid;
serializer s;
trans.add (s, true);
shamapitem::pointer titem = std::make_shared<shamapitem> (txid, s.peekdata ());
if (!initialposition->addgiveitem (titem, true, false))
{
if (m_journal.warning)
m_journal.warning << "ledger already had dividend start";
}
}