static Rate rippleQuality ( ReadView const& view, AccountID const& destination, AccountID const& source, Currency const& currency, SField const& sfLow, SField const& sfHigh) { if (destination == source) return parityRate; auto const& sfField = destination < source ? sfLow : sfHigh; auto const sle = view.read( keylet::line(destination, source, currency)); if (!sle || !sle->isFieldPresent (sfField)) return parityRate; auto quality = sle->getFieldU32 (sfField); // Avoid divide by zero. NIKB CHECKME: if we // allow zero qualities now, then we shouldn't. if (quality == 0) quality = 1; return Rate{ quality }; }
std::shared_ptr<SLE const> RawStateTable::read (ReadView const& base, Keylet const& k) const { auto const iter = items_.find(k.key); if (iter == items_.end()) return base.read(k); auto const& item = iter->second; if (item.first == Action::erase) return nullptr; // Convert to SLE const std::shared_ptr< SLE const> sle = item.second; if (! k.check(*sle)) return nullptr; return sle; }
void fill_seq (Json::Value& jv, ReadView const& view) { if (jv.isMember(jss::Sequence)) return; auto const account = parseBase58<AccountID>( jv[jss::Account].asString()); if (! account) Throw<parse_error> ( "unexpected invalid Account"); auto const ar = view.read( keylet::account(*account)); if (! ar) Throw<parse_error> ( "unexpected missing account root"); jv[jss::Sequence] = ar->getFieldU32(sfSequence); }