diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index d93a18f0f..713d4828c 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -1302,6 +1302,28 @@ std::vector< std::pair > Ledger::getLedgerHashes() return ret; } +bool Ledger::isValidBook(const uint160& uTakerPaysCurrency, const uint160& uTakerPaysIssuerID, + const uint160& uTakerGetsCurrency, const uint160& uTakerGetsIssuerID) +{ + if (uTakerPaysCurrency.isZero()) + { // XRP in + if (uTakerPaysIssuerID.isNonZero()) // XRP cannot have an issuer + return false; + if (uTakerGetsCurrency.isZero()) // XRP to XRP not allowed + return false; + if (uTakerGetsIssuerID.isZero()) // non-XRP must have issuer + return false; + return true; + } + + // non-XRP in + if (uTakerPaysIssuerID.isZero()) // non-XRP must have issuer + return false; + if (uTakerGetsCurrency.isZero() != uTakerGetsIssuerID.isZero()) + return false; // XRP must have issuer, non-XRP must not + return true; +} + uint256 Ledger::getBookBase(const uint160& uTakerPaysCurrency, const uint160& uTakerPaysIssuerID, const uint160& uTakerGetsCurrency, const uint160& uTakerGetsIssuerID) { diff --git a/src/cpp/ripple/Ledger.h b/src/cpp/ripple/Ledger.h index e674bb8ac..c260a0443 100644 --- a/src/cpp/ripple/Ledger.h +++ b/src/cpp/ripple/Ledger.h @@ -257,6 +257,9 @@ public: // // Order book dirs have a base so we can use next to step through them in quality order. + static bool isValidBook(const uint160& uTakerPaysCurrency, const uint160& uTakerPaysIssuerID, + const uint160& uTakerGetsCurrency, const uint160& uTakerGetsIssuerID); + static uint256 getBookBase(const uint160& uTakerPaysCurrency, const uint160& uTakerPaysIssuerID, const uint160& uTakerGetsCurrency, const uint160& uTakerGetsIssuerID);