@@ -1707,28 +1707,39 @@ func quantityForItem(version uint32, item *pb.Order_Item) *big.Int {
1707
1707
// ReserveCurrencyConverter will attempt to build a CurrencyConverter based on
1708
1708
// the reserve currency, or will panic if unsuccessful
1709
1709
func (n * OpenBazaarNode ) ReserveCurrencyConverter () (* repo.CurrencyConverter , error ) {
1710
- var reserveCode = "BTC"
1711
- if n .RegressionTestEnable || n .TestnetEnable {
1712
- reserveCode = "TBTC"
1713
- }
1714
-
1715
- wal , err := n .Multiwallet .WalletForCurrencyCode (reserveCode )
1716
- if err != nil {
1717
- return nil , fmt .Errorf ("unable to find reserve (%s) wallet" , reserveCode )
1718
- }
1710
+ // reserve currency whitelist
1711
+ // TODO: later when the wallet can express whether it can
1712
+ // provide reliable reserve currency rates, they can be
1713
+ // reflected upon instead of using an explicit whitelist
1714
+ var preferredReserveWalletCodes = []string {"BTC" }
1715
+ for _ , code := range preferredReserveWalletCodes {
1716
+ var reserveCode = code
1717
+ if n .RegressionTestEnable || n .TestnetEnable {
1718
+ reserveCode = "T" + code
1719
+ }
1720
+
1721
+ wal , err := n .Multiwallet .WalletForCurrencyCode (reserveCode )
1722
+ if err != nil {
1723
+ continue
1724
+ }
1719
1725
1720
- if wal .ExchangeRates () == nil {
1721
- return nil , fmt .Errorf ("reserve wallet has exchange rates disabled or unavailable" )
1722
- }
1726
+ if wal .ExchangeRates () == nil {
1727
+ log .Warningf ("%s reserve wallet has exchange rates disabled or unavailable" , reserveCode )
1728
+ continue
1729
+ }
1723
1730
1724
- // priming the exchange rate cache
1725
- if _ , err := wal . ExchangeRates (). GetAllRates ( false ); err != nil {
1726
- log . Warningf ( "priming exchange rate cache: %s" , err . Error ())
1727
- }
1731
+ if _ , err := wal . ExchangeRates (). GetAllRates ( false ); err != nil {
1732
+ log . Warningf ( "%s reserve wallet priming exchange rate cache: %s" , reserveCode , err . Error ())
1733
+ continue
1734
+ }
1728
1735
1729
- cc , err := repo .NewCurrencyConverter (reserveCode , wal .ExchangeRates ())
1730
- if err != nil {
1731
- return nil , fmt .Errorf ("creating reserve currency converter: %s" , err .Error ())
1736
+ cc , err := repo .NewCurrencyConverter (reserveCode , wal .ExchangeRates ())
1737
+ if err != nil {
1738
+ log .Warningf ("creating %s reserve currency converter: %s" , reserveCode , err .Error ())
1739
+ continue
1740
+ }
1741
+ log .Infof ("reserve exchange rates provided by %s wallet" , reserveCode )
1742
+ return cc , nil
1732
1743
}
1733
- return cc , nil
1744
+ return nil , errors . New ( "unable to find reserve wallet with exchange rates" )
1734
1745
}
0 commit comments