From 41c07024088aa87b65be8baacba5f780c4347eb4 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 12 Feb 2014 19:54:58 -0800 Subject: [PATCH] Fix custom currency parsers --- src/ripple_data/protocol/STAmount.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/ripple_data/protocol/STAmount.cpp b/src/ripple_data/protocol/STAmount.cpp index c75f5d3e5..0725241da 100644 --- a/src/ripple_data/protocol/STAmount.cpp +++ b/src/ripple_data/protocol/STAmount.cpp @@ -74,6 +74,10 @@ bool STAmount::currencyFromString (uint160& uDstCurrency, const std::string& sCu s.get160 (uDstCurrency, 0); } + else if (40 == sCurrency.size ()) + { + bSuccess = uDstCurrency.SetHex (sCurrency); + } else { bSuccess = false; @@ -82,7 +86,6 @@ bool STAmount::currencyFromString (uint160& uDstCurrency, const std::string& sCu return bSuccess; } -// XXX Broken for custom currencies? std::string STAmount::getHumanCurrency () const { return createHumanCurrency (mCurrency); @@ -218,6 +221,7 @@ STAmount::STAmount (SField::ref n, const Json::Value& v) std::string STAmount::createHumanCurrency (const uint160& uCurrency) { std::string sCurrency; + static uint160 sFiatBits("FFFFFFFFFFFFFFFFFFFFFFFF0000000000000000"); if (uCurrency.isZero ()) { @@ -231,7 +235,7 @@ std::string STAmount::createHumanCurrency (const uint160& uCurrency) { return uCurrency.ToString (); } - else + else if ((uCurrency & sFiatBits).isZero ()) { Serializer s (160 / 8); @@ -257,6 +261,8 @@ std::string STAmount::createHumanCurrency (const uint160& uCurrency) sCurrency = uCurrency.ToString (); } } + else + sCurrency = uCurrency.GetHex (); return sCurrency; } @@ -1567,6 +1573,17 @@ public: unexpected (STAmount (31).getText () != "31", "STAmount fail"); unexpected (STAmount (310).getText () != "310", "STAmount fail"); + + unexpected (STAmount::createHumanCurrency (uint160 ()) != "XRP", "cHC(XRP)"); + + uint160 c; + unexpected (!STAmount::currencyFromString (c, "USD"), "create USD currency"); + unexpected (STAmount::createHumanCurrency (c) != "USD", "check USD currency"); + + const std::string cur = "015841551A748AD2C1F76FF6ECB0CCCD00000000"; + unexpected (!STAmount::currencyFromString (c, cur), "create custom currency"); + unexpected (STAmount::createHumanCurrency (c) != cur, "check custom currency"); + unexpected (c != uint160 (cur), "check custom currency"); } //--------------------------------------------------------------------------