From 80233579f10121cead25e044d21862393a6e03d5 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 12 Mar 2013 09:42:38 -0700 Subject: [PATCH] Add a function to check if a currency/issuer/currency/issuer set defines a valid order book. --- src/cpp/ripple/Ledger.cpp | 22 ++++++++++++++++++++++ src/cpp/ripple/Ledger.h | 3 +++ 2 files changed, 25 insertions(+) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index d93a18f0f6..713d4828c4 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 e674bb8ac4..c260a0443c 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);