161 lastClosedLedger &&
isFlagLedger(lastClosedLedger->seq()),
162 "xrpl::FeeVoteImpl::doVoting : has a flag ledger");
170 auto const& rules = lastClosedLedger->rules();
171 if (rules.enabled(featureXRPFees))
176 if (
auto const field = ~val->at(~xrpField); field && field->native())
178 auto const vote = field->xrp();
190 for (
auto const& val :
set)
192 if (!val->isTrusted())
194 doVote(val, baseFeeVote, sfBaseFeeDrops);
195 doVote(val, baseReserveVote, sfReserveBaseDrops);
196 doVote(val, incReserveVote, sfReserveIncrementDrops);
203 auto const& valueField) {
204 if (
auto const field = val->at(~valueField))
207 auto const vote = *field;
210 value.addVote(
XRPAmount{unsafe_cast<XRPType>(vote)});
223 for (
auto const& val :
set)
225 if (!val->isTrusted())
227 doVote(val, baseFeeVote, sfBaseFee);
228 doVote(val, baseReserveVote, sfReserveBase);
229 doVote(val, incReserveVote, sfReserveIncrement);
237 auto const baseFee = baseFeeVote.
getVotes();
238 auto const baseReserve = baseReserveVote.
getVotes();
239 auto const incReserve = incReserveVote.
getVotes();
241 auto const seq = lastClosedLedger->header().seq + 1;
244 if (baseFee.second || baseReserve.second || incReserve.second)
246 JLOG(
journal_.
warn()) <<
"We are voting for a fee change: " << baseFee.first <<
"/"
247 << baseReserve.first <<
"/" << incReserve.first;
249 STTx feeTx(ttFEE, [=, &rules](
auto& obj) {
251 obj[sfLedgerSequence] = seq;
252 if (rules.enabled(featureXRPFees))
254 obj[sfBaseFeeDrops] = baseFee.first;
255 obj[sfReserveBaseDrops] = baseReserve.first;
256 obj[sfReserveIncrementDrops] = incReserve.first;
265 obj[sfReserveIncrement] =
271 uint256 txID = feeTx.getTransactionID();
278 if (!initialPosition->addGiveItem(
281 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,...