#pragma once #include namespace xrpl { /** Reflects the fee settings for a particular ledger. The fees are always the same for any transactions applied to a ledger. Changes to fees occur in between ledgers. */ struct Fees { XRPAmount base{0}; // Reference tx cost (drops) XRPAmount reserve{0}; // Reserve base (drops) XRPAmount increment{0}; // Reserve increment (drops) explicit Fees() = default; Fees(Fees const&) = default; Fees& operator=(Fees const&) = default; /** Returns the account reserve given the owner count, in drops. The reserve is calculated as the reserve base plus the reserve increment times the number of increments. */ XRPAmount accountReserve( std::size_t ownerCount, std::size_t sponsoredOwnerCount = 0, std::size_t sponsoringOwnerCount = 0, bool isAccountSponsored = false, std::size_t sponsoringAccountCount = 0) const { auto const accountReserveUnits = (isAccountSponsored ? 0 : 1) + sponsoringAccountCount; XRPL_ASSERT( ownerCount >= sponsoredOwnerCount, "xrpl::Fees::accountReserve : OwnerCount must be greater than or equal to " "SponsoredOwnerCount"); auto const ownerReserveUnits = (ownerCount - sponsoredOwnerCount) + sponsoringOwnerCount; return (reserve * accountReserveUnits) + (increment * ownerReserveUnits); } }; } // namespace xrpl