184 lastClosedLedger &&
isFlagLedger(lastClosedLedger->seq()),
185 "ripple::FeeVoteImpl::doVoting : has a flag ledger");
196 auto const& rules = lastClosedLedger->rules();
197 if (rules.enabled(featureXRPFees))
202 if (
auto const field = ~val->at(~xrpField);
203 field && field->native())
205 auto const vote = field->xrp();
217 for (
auto const& val :
set)
219 if (!val->isTrusted())
221 doVote(val, baseFeeVote, sfBaseFeeDrops);
222 doVote(val, baseReserveVote, sfReserveBaseDrops);
223 doVote(val, incReserveVote, sfReserveIncrementDrops);
230 auto const& valueField) {
231 if (
auto const field = val->at(~valueField))
234 auto const vote = *field;
238 XRPAmount{unsafe_cast<XRPAmount::value_type>(vote)});
251 for (
auto const& val :
set)
253 if (!val->isTrusted())
255 doVote(val, baseFeeVote, sfBaseFee);
256 doVote(val, baseReserveVote, sfReserveBase);
257 doVote(val, incReserveVote, sfReserveIncrement);
265 auto const baseFee = baseFeeVote.
getVotes();
266 auto const baseReserve = baseReserveVote.
getVotes();
267 auto const incReserve = incReserveVote.
getVotes();
269 auto const seq = lastClosedLedger->info().seq + 1;
272 if (baseFee.second || baseReserve.second || incReserve.second)
275 <<
"We are voting for a fee change: " << baseFee.first <<
"/"
276 << baseReserve.first <<
"/" << incReserve.first;
278 STTx feeTx(ttFEE, [=, &rules](
auto& obj) {
280 obj[sfLedgerSequence] = seq;
281 if (rules.enabled(featureXRPFees))
283 obj[sfBaseFeeDrops] = baseFee.first;
284 obj[sfReserveBaseDrops] = baseReserve.first;
285 obj[sfReserveIncrementDrops] = incReserve.first;
293 obj[sfReserveBase] = baseReserve.first.dropsAs<
std::uint32_t>(
295 obj[sfReserveIncrement] =
302 uint256 txID = feeTx.getTransactionID();
309 if (!initialPosition->addGiveItem(
313 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,...