203 lastClosedLedger &&
isFlagLedger(lastClosedLedger->seq()),
204 "ripple::FeeVoteImpl::doVoting : has a flag ledger");
215 auto const& rules = lastClosedLedger->rules();
216 if (rules.enabled(featureXRPFees))
221 if (
auto const field = ~val->at(~xrpField);
222 field && field->native())
224 auto const vote = field->xrp();
236 for (
auto const& val :
set)
238 if (!val->isTrusted())
240 doVote(val, baseFeeVote, sfBaseFeeDrops);
241 doVote(val, baseReserveVote, sfReserveBaseDrops);
242 doVote(val, incReserveVote, sfReserveIncrementDrops);
249 auto const& valueField) {
250 if (
auto const field = val->at(~valueField))
253 auto const vote = *field;
257 XRPAmount{unsafe_cast<XRPAmount::value_type>(vote)});
270 for (
auto const& val :
set)
272 if (!val->isTrusted())
274 doVote(val, baseFeeVote, sfBaseFee);
275 doVote(val, baseReserveVote, sfReserveBase);
276 doVote(val, incReserveVote, sfReserveIncrement);
284 auto const baseFee = baseFeeVote.
getVotes();
285 auto const baseReserve = baseReserveVote.
getVotes();
286 auto const incReserve = incReserveVote.
getVotes();
288 auto const seq = lastClosedLedger->info().seq + 1;
291 if (baseFee.second || baseReserve.second || incReserve.second)
294 <<
"We are voting for a fee change: " << baseFee.first <<
"/"
295 << baseReserve.first <<
"/" << incReserve.first;
297 STTx feeTx(ttFEE, [=, &rules](
auto& obj) {
299 obj[sfLedgerSequence] = seq;
300 if (rules.enabled(featureXRPFees))
302 obj[sfBaseFeeDrops] = baseFee.first;
303 obj[sfReserveBaseDrops] = baseReserve.first;
304 obj[sfReserveIncrementDrops] = incReserve.first;
312 obj[sfReserveBase] = baseReserve.first.dropsAs<
std::uint32_t>(
314 obj[sfReserveIncrement] =
321 uint256 txID = feeTx.getTransactionID();
328 if (!initialPosition->addGiveItem(
332 JLOG(
journal_.
warn()) <<
"Ledger already had fee change";
void doVoting(std::shared_ptr< ReadView const > const &lastClosedLedger, std::vector< std::shared_ptr< STValidation > > const &parentValidations, std::shared_ptr< SHAMap > const &initialPosition) override
Cast our local vote on the fee.
bool set(T &target, std::string const &name, Section const §ion)
Set a value from a configuration Section If the named value is not found or doesn't parse as a T,...