Skip to content
This repository has been archived by the owner on Jul 12, 2022. It is now read-only.

Refactor pricenode #7

Merged
merged 201 commits into from
Apr 17, 2018
Merged

Refactor pricenode #7

merged 201 commits into from
Apr 17, 2018

Commits on Jan 25, 2018

  1. Move bisq.pricenode.{Main => app.Main}

    This move avoids the use of bisq.pricenode subpackages from a class
    within that package, eliminating the cyclic package dependencies that
    doing so causes.
    cbeams committed Jan 25, 2018
    Configuration menu
    Copy the full SHA
    213a8f3 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    15be897 View commit details
    Browse the repository at this point in the history
  3. Extract Main.initLog method

    cbeams committed Jan 25, 2018
    Configuration menu
    Copy the full SHA
    0dbb878 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    99c7d8b View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    cbf2df4 View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    6bc7665 View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    aa86199 View commit details
    Browse the repository at this point in the history
  8. Configuration menu
    Copy the full SHA
    4d55e8a View commit details
    Browse the repository at this point in the history
  9. Configuration menu
    Copy the full SHA
    f797162 View commit details
    Browse the repository at this point in the history
  10. Configuration menu
    Copy the full SHA
    bf54408 View commit details
    Browse the repository at this point in the history
  11. Configuration menu
    Copy the full SHA
    2ad083d View commit details
    Browse the repository at this point in the history
  12. Remove unnecessary static initializer from Main

    This appears to have been copied and pasted from BisqAppMain in the
    bisq-network/exchange repository.
    cbeams committed Jan 25, 2018
    Configuration menu
    Copy the full SHA
    63e9700 View commit details
    Browse the repository at this point in the history
  13. Configuration menu
    Copy the full SHA
    948f8f1 View commit details
    Browse the repository at this point in the history
  14. Configuration menu
    Copy the full SHA
    2053f1e View commit details
    Browse the repository at this point in the history
  15. Configuration menu
    Copy the full SHA
    3201503 View commit details
    Browse the repository at this point in the history
  16. Configuration menu
    Copy the full SHA
    def6da8 View commit details
    Browse the repository at this point in the history
  17. Configuration menu
    Copy the full SHA
    e70dcd6 View commit details
    Browse the repository at this point in the history
  18. Configuration menu
    Copy the full SHA
    1c32534 View commit details
    Browse the repository at this point in the history
  19. Configuration menu
    Copy the full SHA
    5b0edab View commit details
    Browse the repository at this point in the history

Commits on Jan 26, 2018

  1. Configuration menu
    Copy the full SHA
    832db42 View commit details
    Browse the repository at this point in the history
  2. Add AGPL header where missing

    cbeams committed Jan 26, 2018
    Configuration menu
    Copy the full SHA
    d358bdc View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    28b9e43 View commit details
    Browse the repository at this point in the history

Commits on Feb 3, 2018

  1. Configuration menu
    Copy the full SHA
    502f1f8 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    b3cdace View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    dc4a4b2 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    19cb583 View commit details
    Browse the repository at this point in the history

Commits on Feb 5, 2018

  1. Rename bisq.price.{node => app}.*

    bisq.price.node reads nicely, but 'app' packaging is the convention
    elsewhere, is immediately intention-revealing, and sorts alphanumerically
    to the top, helping the reader discover its nature as an entry point.
    cbeams committed Feb 5, 2018
    Configuration menu
    Copy the full SHA
    966dfc2 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    d681cc5 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    00f662e View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    3c3780d View commit details
    Browse the repository at this point in the history
  5. Introduce FeeEstimationProvider interface

    Casting to BtcFeesProvider in Pricenode is temporary.
    cbeams committed Feb 5, 2018
    Configuration menu
    Copy the full SHA
    b1d7e5b View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    f3075bc View commit details
    Browse the repository at this point in the history
  7. Load BitcoinFees by SPI via ServiceLoader

    Note that BitcoinFees should be made package-private at this point but
    cannot because of the lingering cast in Pricenode.
    cbeams committed Feb 5, 2018
    Configuration menu
    Copy the full SHA
    b9d4590 View commit details
    Browse the repository at this point in the history
  8. Allow FeeEstimationService to configure itself

    See the previous commit, in which a similar approach was taken with
    FeeEstimationProvider.
    cbeams committed Feb 5, 2018
    Configuration menu
    Copy the full SHA
    9330449 View commit details
    Browse the repository at this point in the history
  9. Allow Pricenode to configure itself

    See previous two commits for context.
    cbeams committed Feb 5, 2018
    Configuration menu
    Copy the full SHA
    b5d7eb0 View commit details
    Browse the repository at this point in the history
  10. Rename bisq.price.{price => spot}

    As in "Spot Exchange Rate", which is the price being dealt with in this
    package. See https://www.investopedia.com/terms/s/spotexchangerate.asp.
    cbeams committed Feb 5, 2018
    Configuration menu
    Copy the full SHA
    d182b49 View commit details
    Browse the repository at this point in the history
  11. Configuration menu
    Copy the full SHA
    e551ba7 View commit details
    Browse the repository at this point in the history
  12. Configuration menu
    Copy the full SHA
    5f63d96 View commit details
    Browse the repository at this point in the history
  13. Introduce ExchangeRateProvider SPI

    This change normalize all existing exchange rate providers to conform to
    this interface, including BitcoinAverage, which previously was the
    special case, having getLocal and getGlobal methods instead of a single
    request method. This is now no longer a special case, and simply treated
    as two separate price providers that share a common base class.
    cbeams committed Feb 5, 2018
    Configuration menu
    Copy the full SHA
    bb3cede View commit details
    Browse the repository at this point in the history
  14. Configuration menu
    Copy the full SHA
    0cc2376 View commit details
    Browse the repository at this point in the history

Commits on Feb 6, 2018

  1. Configuration menu
    Copy the full SHA
    563a55d View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    a72bdef View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    f85c3a7 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    6721c2f View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    ba8fb42 View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    cb94448 View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    d6c713d View commit details
    Browse the repository at this point in the history
  8. Configuration menu
    Copy the full SHA
    bae028a View commit details
    Browse the repository at this point in the history
  9. Configuration menu
    Copy the full SHA
    f5b4efa View commit details
    Browse the repository at this point in the history
  10. Configuration menu
    Copy the full SHA
    b75b673 View commit details
    Browse the repository at this point in the history
  11. Configuration menu
    Copy the full SHA
    f980047 View commit details
    Browse the repository at this point in the history
  12. Assign provider fields to their specific types

    We'll generalize back to the ExchangeRateProvider SPI when all
    extractions are complete.
    cbeams committed Feb 6, 2018
    Configuration menu
    Copy the full SHA
    3cbfb8a View commit details
    Browse the repository at this point in the history
  13. Configuration menu
    Copy the full SHA
    9c02a4a View commit details
    Browse the repository at this point in the history
  14. Configuration menu
    Copy the full SHA
    9daee4d View commit details
    Browse the repository at this point in the history
  15. Configuration menu
    Copy the full SHA
    0373be3 View commit details
    Browse the repository at this point in the history
  16. Configuration menu
    Copy the full SHA
    03a628b View commit details
    Browse the repository at this point in the history
  17. Configuration menu
    Copy the full SHA
    de4b98b View commit details
    Browse the repository at this point in the history
  18. Remove obsolete FIXMEs

    These lines will go away altogether soon enough.
    cbeams committed Feb 6, 2018
    Configuration menu
    Copy the full SHA
    f37f4d3 View commit details
    Browse the repository at this point in the history
  19. Isolate JSON processing within web layer

    Service layer returns maps of objects now, specific value types later.
    cbeams committed Feb 6, 2018
    Configuration menu
    Copy the full SHA
    1cc4d07 View commit details
    Browse the repository at this point in the history
  20. Derive debug timestamp/count values directly from data

    This commit just demonstrates that this is possible. Fuller refactoring
    for all provider types will come later, along with fully generalizing
    and service loading them.
    cbeams committed Feb 6, 2018
    Configuration menu
    Copy the full SHA
    511edf6 View commit details
    Browse the repository at this point in the history
  21. Push debug prefix property into ExchangeRateProvider

    More work on the way to fully generalizing access to
    ExchangeRateProviders by SPI while preserving the exact shape and
    content of the exchange rate data itself..
    
    Note that this change _adds_ a 'btcAverageLTs' while leaving
    'btcAverageTs' in place in case anything is depending on this irregular
    entry.
    cbeams committed Feb 6, 2018
    Configuration menu
    Copy the full SHA
    eb1a295 View commit details
    Browse the repository at this point in the history
  22. Configuration menu
    Copy the full SHA
    9757b13 View commit details
    Browse the repository at this point in the history
  23. Pull up methods into ExchangeRateProvider SPI

    As required to access providers by SPI exclusively and not by special
    type.
    cbeams committed Feb 6, 2018
    Configuration menu
    Copy the full SHA
    c19cefa View commit details
    Browse the repository at this point in the history

Commits on Feb 9, 2018

  1. Process generically a Set<ExchangeRateProvider>

    As opposed to repeating logic for each individual provider tracked by
    its own field and with special implicit statement ordering rules that
    must be explained by comments.
    cbeams committed Feb 9, 2018
    Configuration menu
    Copy the full SHA
    1f9b44c View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    445d782 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    b6d7fd9 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    0078cba View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    aa62aad View commit details
    Browse the repository at this point in the history
  6. Rename ExchangeRateProvider#get{DebugPrefix => MetadataPrefix}

    See previous commit's extraction of ExchangeRateProvider#addMetadata for
    context.
    cbeams committed Feb 9, 2018
    Configuration menu
    Copy the full SHA
    c41e4e7 View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    43e5f2a View commit details
    Browse the repository at this point in the history
  8. Configuration menu
    Copy the full SHA
    c962af1 View commit details
    Browse the repository at this point in the history
  9. Configuration menu
    Copy the full SHA
    c06acbb View commit details
    Browse the repository at this point in the history
  10. Configuration menu
    Copy the full SHA
    7269369 View commit details
    Browse the repository at this point in the history
  11. Tune AbstractExchangeRateProvider#requestAndCache logging

    Now produces log entries like the following:
    
        b.p.s.p.BitcoinAverage$Global: BTC/USD: 7469.27
        b.p.s.p.BitcoinAverage$Global: requestAndCache took 1038 ms.
    
        b.p.s.p.BitcoinAverage$Local: BTC/USD: 7471.75
        b.p.s.p.BitcoinAverage$Local: requestAndCache took 138 ms.
    
        b.p.s.p.CoinMarketCap: LTC/BTC: 0.018664
        b.p.s.p.CoinMarketCap: requestAndCache took 216 ms.
    
        b.p.s.p.Poloniex: LTC/BTC: 0.01869172
        b.p.s.p.Poloniex: requestAndCache took 260 ms.
    cbeams committed Feb 9, 2018
    Configuration menu
    Copy the full SHA
    473969c View commit details
    Browse the repository at this point in the history
  12. Configuration menu
    Copy the full SHA
    4ae8779 View commit details
    Browse the repository at this point in the history
  13. Configuration menu
    Copy the full SHA
    c805415 View commit details
    Browse the repository at this point in the history
  14. Remove ExchangeRateProvider#getData and use #request

    And introduce a template method-style request/doRequest approach in
    CachingExchangeRateProvider.
    cbeams committed Feb 9, 2018
    Configuration menu
    Copy the full SHA
    bf1e8a3 View commit details
    Browse the repository at this point in the history
  15. Eliminate explicit ExchangeRateProvider#getOrder property

    And document clearly that order of placement in the
    META-INF provider-configuration determines the order of providers
    in the List returned from ExchangeRateProvider#getOrder.
    cbeams committed Feb 9, 2018
    Configuration menu
    Copy the full SHA
    6c81d12 View commit details
    Browse the repository at this point in the history
  16. Rename CachingExchangeRateData#{requestIntervalMs => ttl}

    'ttl' (time to live) reveals the intention of this property more clearly
    than requestIntervalMs, for it indeed represents how long exchange rate
    data is supposed to live before being refreshed. Using an acronym here
    vs spelling it out as ttl/TTL is quite well known, and pretty obvious in
    the context of this explicitly-named caching component.
    cbeams committed Feb 9, 2018
    Configuration menu
    Copy the full SHA
    bb4602c View commit details
    Browse the repository at this point in the history
  17. Configuration menu
    Copy the full SHA
    b87f4aa View commit details
    Browse the repository at this point in the history
  18. Configuration menu
    Copy the full SHA
    22a96b6 View commit details
    Browse the repository at this point in the history
  19. Configuration menu
    Copy the full SHA
    f2aa335 View commit details
    Browse the repository at this point in the history
  20. Configuration menu
    Copy the full SHA
    3f61d7f View commit details
    Browse the repository at this point in the history
  21. Configuration menu
    Copy the full SHA
    09afcd7 View commit details
    Browse the repository at this point in the history
  22. Configuration menu
    Copy the full SHA
    7f6a431 View commit details
    Browse the repository at this point in the history
  23. Configuration menu
    Copy the full SHA
    7a60359 View commit details
    Browse the repository at this point in the history
  24. Configuration menu
    Copy the full SHA
    b569464 View commit details
    Browse the repository at this point in the history
  25. Configuration menu
    Copy the full SHA
    b9c525f View commit details
    Browse the repository at this point in the history
  26. Configuration menu
    Copy the full SHA
    d732184 View commit details
    Browse the repository at this point in the history
  27. Configuration menu
    Copy the full SHA
    a7902a5 View commit details
    Browse the repository at this point in the history
  28. Configuration menu
    Copy the full SHA
    afaff31 View commit details
    Browse the repository at this point in the history
  29. Refactor BitcoinAverage#doRequestForCaching for readability

    And document it a bit.
    cbeams committed Feb 9, 2018
    Configuration menu
    Copy the full SHA
    7dc37aa View commit details
    Browse the repository at this point in the history
  30. Configuration menu
    Copy the full SHA
    8ab9145 View commit details
    Browse the repository at this point in the history
  31. Configuration menu
    Copy the full SHA
    2ffc05d View commit details
    Browse the repository at this point in the history
  32. Configuration menu
    Copy the full SHA
    9e8ce07 View commit details
    Browse the repository at this point in the history
  33. Refactor to use XChange BitcoinAverage library

    To simplify our BitcoinAverage provider implementation.
    cbeams committed Feb 9, 2018
    Configuration menu
    Copy the full SHA
    9de5307 View commit details
    Browse the repository at this point in the history
  34. Configuration menu
    Copy the full SHA
    2346085 View commit details
    Browse the repository at this point in the history
  35. Configuration menu
    Copy the full SHA
    b14e72c View commit details
    Browse the repository at this point in the history
  36. Refactor to use XChange CoinMarketCap library

    To simplify our CoinMarketCap provider implementation.
    cbeams committed Feb 9, 2018
    Configuration menu
    Copy the full SHA
    44ca9ac View commit details
    Browse the repository at this point in the history
  37. Configuration menu
    Copy the full SHA
    5710415 View commit details
    Browse the repository at this point in the history
  38. Refactor Poloniex for style

    cbeams committed Feb 9, 2018
    Configuration menu
    Copy the full SHA
    99a50d0 View commit details
    Browse the repository at this point in the history
  39. Refactor to use XChange Poloniex library

    To simplify our Poloniex provider implementation.
    cbeams committed Feb 9, 2018
    Configuration menu
    Copy the full SHA
    314d4ab View commit details
    Browse the repository at this point in the history
  40. Reformat to 4-space continuation indents

    I've gone back and forth on this style setting over time. As lambdas
    have become more prevalent since Java 8, I think it's time to favor
    4-space continuation indents over 8-space. I'll try it here in
    bisq-pricenode for now, and we can see about standardizing on that
    elsewhere later.
    cbeams committed Feb 9, 2018
    Configuration menu
    Copy the full SHA
    3e32ffb View commit details
    Browse the repository at this point in the history
  41. Remove ExchangeRateService#removeOutdatedPrices

    This is no longer necessary now that the data structure that stores this
    information is no longer long-lived. It is recreated on each call to
    getAllMarketData, which in turn returns the latest cached data from
    underlying providers. This data is never older than the individual
    providers' TTLs, so there is never 30-minute old data to purge, which is
    what this method was for; it's just obsolete now.
    cbeams committed Feb 9, 2018
    Configuration menu
    Copy the full SHA
    f7927f9 View commit details
    Browse the repository at this point in the history
  42. Configuration menu
    Copy the full SHA
    c1bc990 View commit details
    Browse the repository at this point in the history
  43. Configuration menu
    Copy the full SHA
    8d23e93 View commit details
    Browse the repository at this point in the history
  44. Add ExchangeRate convenience constructor

    This pushes type conversation logic down into ExchangeRate, leaving
    instantiation sites that much more clear and DRY.
    cbeams committed Feb 9, 2018
    Configuration menu
    Copy the full SHA
    3e84b0d View commit details
    Browse the repository at this point in the history
  45. Configuration menu
    Copy the full SHA
    c57a1a3 View commit details
    Browse the repository at this point in the history
  46. Document ExchangeRate

    cbeams committed Feb 9, 2018
    Configuration menu
    Copy the full SHA
    4db05f4 View commit details
    Browse the repository at this point in the history
  47. Configuration menu
    Copy the full SHA
    34dd139 View commit details
    Browse the repository at this point in the history
  48. Configuration menu
    Copy the full SHA
    f9e8307 View commit details
    Browse the repository at this point in the history
  49. Return Set<ExchangeRate> from ExchangeRateProvider#request

    vs. the previous, unnecessarily complex Map<String, ExchangeRate>
    structure.
    cbeams committed Feb 9, 2018
    Configuration menu
    Copy the full SHA
    ef721eb View commit details
    Browse the repository at this point in the history
  50. Configuration menu
    Copy the full SHA
    24cd258 View commit details
    Browse the repository at this point in the history
  51. Configuration menu
    Copy the full SHA
    5e06ec3 View commit details
    Browse the repository at this point in the history

Commits on Feb 11, 2018

  1. Make ExchangeRateProvider extend Supplier<Set<ExchangeRate>>

     - Rename ExchangeRateProvider#{request => get}
     - Remove throws IOException from same
    cbeams committed Feb 11, 2018
    Configuration menu
    Copy the full SHA
    3f30f20 View commit details
    Browse the repository at this point in the history
  2. Update field names in ExchangeRateProvider implementations

    Accessors had been updated earlier; this commit just catches the field
    names up.
    cbeams committed Feb 11, 2018
    Configuration menu
    Copy the full SHA
    3ef1998 View commit details
    Browse the repository at this point in the history
  3. Refactor to lambda expression in ExchangeRateService

    This is possible in a more convenient way now that #get
    (formerly #request) no longer throws IOExcption
    cbeams committed Feb 11, 2018
    Configuration menu
    Copy the full SHA
    dee5b37 View commit details
    Browse the repository at this point in the history
  4. Fix null response from /getAllMarketPrices

    Utilities.objectToJson couldn't handle the anonymous LinkedHashMap that
    was being returned from ExchangeRateService#getAllMarketPrices, and was
    silently returning null.
    cbeams committed Feb 11, 2018
    Configuration menu
    Copy the full SHA
    fbefa2f View commit details
    Browse the repository at this point in the history
  5. Replace Gson serialization with Jackson

    And go back to returning an anonymous LinkedHashMap from
    ExchangeRateService#getAllMarketPrices--Jackson handles this just fine.
    cbeams committed Feb 11, 2018
    Configuration menu
    Copy the full SHA
    81be033 View commit details
    Browse the repository at this point in the history
  6. Use String.format for clarity

    cbeams committed Feb 11, 2018
    Configuration menu
    Copy the full SHA
    d69ae4a View commit details
    Browse the repository at this point in the history
  7. Eliminate the need for BitcoinAverage API keys

    BitcoinAverage's "short ticker" API [1] provides all the data we need
    and does not require a paid plan.
    
    This commit switches to using this free API and removes everything
    related to authenticating against the paid BitcoinAverage API,
    simplifying considerably the implementation, alongside saving pricenode
    operators money and secret management / setup hassle.
    
    Note that TTLs for caching have been kept the same (3.5m for Global,
    1.5m for Local) to ensure that this is a pure refactoring, however we'll
    probably want to normalize these values later.
    
    [1]: https://apiv2.bitcoinaverage.com/#short-ticker
    cbeams committed Feb 11, 2018
    Configuration menu
    Copy the full SHA
    5a67f54 View commit details
    Browse the repository at this point in the history
  8. Remove now-obsolete ExchangeRateProvider#configure hook

    With the previous commit, there is no longer a need to configure any
    ExchangeRateProvider implementation e.g. with environment variables
    after instantiation, so this commit simply removes the hook altogether
    and further simplifies things.
    cbeams committed Feb 11, 2018
    Configuration menu
    Copy the full SHA
    4951989 View commit details
    Browse the repository at this point in the history

Commits on Feb 12, 2018

  1. Configuration menu
    Copy the full SHA
    b137048 View commit details
    Browse the repository at this point in the history
  2. Revert "Eliminate the need for BitcoinAverage API keys"

    This reverts commit 5a67f54 for reasons
    at bisq-network#7 (comment).
    cbeams committed Feb 12, 2018
    Configuration menu
    Copy the full SHA
    d741dbc View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    875b2cf View commit details
    Browse the repository at this point in the history
  4. Improve error handling

    Make sure that failures at pricenode startup kill the JVM, and that
    failures on scheduled requests do not.
    
    The Timer objects used to schedule requests are backed by non-daemon
    threads by default. This means that they keep the JVM alive until they
    are explicitly shut down. Generally, this is what we want: a Pricenode
    should run indefinitely once started, periodically fetching and caching
    new price information and returning it to Bisq clients on request.
    
    However, if there is a failure at startup time, for example because of
    a missing or invalid BitcoinAverage keypair, the error should be
    reported and the JVM should halt immediately. To make this happen, this
    commit introduces a Pricenode#stop method, which is called any time an
    exception propagates all the way up to the main method. This #stop
    method ultimately calls Timer#cancel on all underlying timer objects,
    shutting down these non-daemon threads and allowing the JVM to halt as
    expected.
    
    In the case of errors that occur after startup, for example one of our
    exchange rate providers like BitcoinAverage having an outage, we most
    certainly do *not* want our Pricenode to halt, and for this reason we
    catch any such exceptions within the scheduled call logic and simply
    report it to the console; we do not rethrow the exception and allow it
    to propagate up the stack and kill the JVM. In the future, we might want
    to introduce exponential backoffs, circuit-breaker style functionality
    and alerting mechanisms to make operators aware of these kinds of
    failures, but for now the goal is to make sure that basic error handling
    works as it should, i.e. allowing Pricenodes to continue operating
    indefinitely even in the face of an unreliable network and unreliable
    provider endpoints.
    
    Throughout the codebase, explicitly 'throws IOException' clauses have
    been removed in favor of catching IOException, wrapping and rethrowing
    them as UncheckedIOException. This change facilitates all those
    mentioned above.
    
    Note that this change is not strictly a refactoring as it does change
    the behavior of handling errors that occur at startup time, but it is
    still a refactoring in spirit as it does not affect the behavior of the
    application at runtime.
    cbeams committed Feb 12, 2018
    Configuration menu
    Copy the full SHA
    c0eb50a View commit details
    Browse the repository at this point in the history
  5. Remove legacy log initialization logic

    This change is not strictly a refactoring as it means that logs are no
    longer written to $HOME/provider, but it is assumed that this is not a
    problem for operators, and not critical to the operation of their nodes.
    
    It does not change the runtime behavior of a pricenode in any way. It is
    assumed that this kind of log initialization logic was more or less
    copied-and-pasted from the main bisq-network/exchange log initialization
    logic, and not terribly important that it worked this way. It is being
    removed here in anticipation of introducing Spring Boot, which will have
    it's own log management logic that 'just works' in a well-known way.
    cbeams committed Feb 12, 2018
    Configuration menu
    Copy the full SHA
    5dec7ec View commit details
    Browse the repository at this point in the history
  6. Migrate runtime and configuration to Spring

    This change introduces the latest version of Spring Boot to:
    
     - Replace the Spark web framework and its underlying use of Jetty with
       Spring MVC and Spring Boot's default embedded Tomcat runtime
    
     - Replace our own custom Environment with Spring's Environment
    
     - Replace our own ServiceLoader based instantiation with Spring's
       annotation-based dependency injection
    
    Along the way, this change also removes the use of Gradle's
    'application' plugin (and its generated scripts) altogether in favor of
    Spring Boot's Gradle plugin and the fat executable jar it creates. All
    README instructions, etc have been updated accordingly.
    
    Again, this is all pure refactoring, no behavior changes to the running
    app. Generally, these changes make the application simpler, smaller and
    easier to deal with.
    
    This commit is the beginning of several to follow, which will migrate
    other aspects of the application to use Spring infrastructure rather
    than rolling our own.
    cbeams committed Feb 12, 2018
    Configuration menu
    Copy the full SHA
    96a98fd View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    696021b View commit details
    Browse the repository at this point in the history
  8. Fix incompatible JSON serialization in /getAllMarketPrices

    Previous changes in this branch modified the format of the 'data'
    element returned by /getAllMarketPrices such that its value was a map of
    maps, rather than an array of maps, as it should be. This change
    restores the shape of the data to the latter.
    
    This change also fixes the naming of the keys in the array of maps to
    confirm to the existing format, e.g. 'timestampSec' instead of
    'timestamp', and 'currencyCode' instead of 'currency'. This is done with
    explicit @JsonProperty annotations such that (a) the naming of the
    members in the code can remain as-is, and (b) so that any future changes
    to those members' names do not cause a similar incompatibility to arise.
    cbeams committed Feb 12, 2018
    Configuration menu
    Copy the full SHA
    58cd243 View commit details
    Browse the repository at this point in the history
  9. Configuration menu
    Copy the full SHA
    1cb7b31 View commit details
    Browse the repository at this point in the history
  10. Configuration menu
    Copy the full SHA
    50e0c81 View commit details
    Browse the repository at this point in the history
  11. Extract util.VersionController from app.Pricenode

    And eliminate 'app' package altogether
    cbeams committed Feb 12, 2018
    Configuration menu
    Copy the full SHA
    3adbb24 View commit details
    Browse the repository at this point in the history
  12. Extract common controller logging to WebConfig

    This class consolidates previously duplicated logic for logging
    incoming requests. An alternative approach would have been to introduce
    a common base class for all controllers with a @ModelAttribute method.
    This might be a better approach in the end, as it ends up clearly
    logging which controller is going to handle the request. Here, the
    logging category is always bisq.price.WebConfig, which does not make it
    obvious which controller will actually handle the request.
    cbeams committed Feb 12, 2018
    Configuration menu
    Copy the full SHA
    7e9c9c1 View commit details
    Browse the repository at this point in the history
  13. Configuration menu
    Copy the full SHA
    d91f4b1 View commit details
    Browse the repository at this point in the history

Commits on Feb 13, 2018

  1. Fix incompatible data handling in ExchangeRateService

    This commit partially reverts 58cd243,
    moving the data structure used to collect all exchange rates back to a
    Map. The earlier commit inadvertently caused duplicate entries to be
    created for certain currencies, as opposed to letting the last provider
    to report a given currency exchange rate to "win" and override any
    previous entry.
    cbeams committed Feb 13, 2018
    Configuration menu
    Copy the full SHA
    72c84a1 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    e5e4a9c View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    c234628 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    9c0bcc0 View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    7f2f5a3 View commit details
    Browse the repository at this point in the history

Commits on Feb 14, 2018

  1. Introduce bisq.price.PriceProvider base class

    This generic abstract base class eliminates the need for
    AbstractExchangeRateProvider and CachingExchangeRateProvider and will
    (in subsequent commits) serve as the base class for FeeEstimationProvider
    on the mining side as well.
    
    The net effect is that there will be a single place where scheduled
    caching logic is defined.
    
    Note also the new onRefresh hook and it's overridden implementation in
    ExchangeRateProvider for logging purposes.
    cbeams committed Feb 14, 2018
    Configuration menu
    Copy the full SHA
    79538d6 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    707b196 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    2dc30d3 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    2c77008 View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    2f0b0fb View commit details
    Browse the repository at this point in the history
  6. Configure IDEA to create package-private classes by default

    To encourage minimizing type visibility wherever possible.
    cbeams committed Feb 14, 2018
    Configuration menu
    Copy the full SHA
    cd76471 View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    e5bf166 View commit details
    Browse the repository at this point in the history
  8. Push /getParams endpoint into BitcoinFeeRateProvider$Controller

    This endpoint will soon be deprecated and eventually removed. In the
    meantime, pushing it down into an inner class of BitcoinFeeRateProvider
    allows the latter to take on package-private visibility like all other
    FeeRateProvider implementations, and also reduces the complexity of
    FeeRateController.
    cbeams committed Feb 14, 2018
    Configuration menu
    Copy the full SHA
    fc79856 View commit details
    Browse the repository at this point in the history
  9. Refactor BitcoinFeeRateProvider for clarity

    Normalize the way command line options are handled, and remove
    now-obsolete getters for capacity, maxBlocks and ttl.
    cbeams committed Feb 14, 2018
    Configuration menu
    Copy the full SHA
    5f9541a View commit details
    Browse the repository at this point in the history
  10. Configuration menu
    Copy the full SHA
    1350b47 View commit details
    Browse the repository at this point in the history
  11. Restore original order of BitcoinAverage ctor params

    The order of parameters to these constructors was accidentally changed
    in commit 96a98fd. This commit restores
    the previous, more logical order.
    cbeams committed Feb 14, 2018
    Configuration menu
    Copy the full SHA
    ae74368 View commit details
    Browse the repository at this point in the history
  12. Configuration menu
    Copy the full SHA
    ba51fe5 View commit details
    Browse the repository at this point in the history
  13. Replace WebConfig with PriceController base class

    As suggested in commit 7e9c9c1, this
    refactors away from the HandlerInterceptor-based WebConfig to a simpler
    and more intuitive PriceController base class that logs all incoming
    requests.
    
    It's a bit awkward to have VersionController extend PriceController, but
    the former will go away soon enough anyway.
    cbeams committed Feb 14, 2018
    Configuration menu
    Copy the full SHA
    1228167 View commit details
    Browse the repository at this point in the history
  14. Add TODOs

    cbeams committed Feb 14, 2018
    Configuration menu
    Copy the full SHA
    aefc452 View commit details
    Browse the repository at this point in the history
  15. Remove use of io.bisq.common.util.MathUtils

    The #roundDoubleToLong functionality is not necessary here. Values
    coming in from bitcoinfees are always some number of satoshis followed
    by a single zero decimal value, e.g. 0.0, 10.0, 20.0, etc. This means
    that the standard Double#longValue() is sufficient.
    
    This is being done toward the larger goal of removing completely our
    dependency on the bisq-exchange:core library.
    cbeams committed Feb 14, 2018
    Configuration menu
    Copy the full SHA
    af5002c View commit details
    Browse the repository at this point in the history
  16. Upgrade to bisq-exchange:network:v0.6.5

    We were previously using bisq-exchange:core:v0.6.4, but all that's
    necessary now (and perhaps all that was ever necessary) is
    bisq-exchange:network.
    cbeams committed Feb 14, 2018
    Configuration menu
    Copy the full SHA
    cce8020 View commit details
    Browse the repository at this point in the history
  17. Replace bisq-network HttpClient w/ Spring RestTemplate

    And simultaneously replace use of Jackson ObjectMapper with
    RestTemplate's built-in (but still Jackson-based) JSON conversion.
    
    This commit also removes the verbose 'Get recommended fee response' log
    message. It is assumed this was added for debugging purposes originally,
    and then left in place by accident. Logs are much tighter now.
    cbeams committed Feb 14, 2018
    Configuration menu
    Copy the full SHA
    9929284 View commit details
    Browse the repository at this point in the history
  18. Remove unused Logback IDEA import layout entry

    As we're no longer coding against this API anywhere.
    cbeams committed Feb 14, 2018
    Configuration menu
    Copy the full SHA
    b34e785 View commit details
    Browse the repository at this point in the history
  19. Configuration menu
    Copy the full SHA
    efca8c3 View commit details
    Browse the repository at this point in the history
  20. Configuration menu
    Copy the full SHA
    5e7989e View commit details
    Browse the repository at this point in the history

Commits on Feb 15, 2018

  1. Configuration menu
    Copy the full SHA
    1c7e72c View commit details
    Browse the repository at this point in the history
  2. Derive version from latest git tag

    This change replaces the previous custom version management with
    Palantir's git-version Gradle plugin, which derives the application
    version based on the output of `git describe`. See the git-describe
    manpage for details about how this works.
    
    The benefit of this approach is that we never need to manually change
    the version string in a text file. Git is the canonical source of
    version information, as it should be. And thanks to the way `git
    describe` works, our version strings will always include precise
    information about exactly what commit the application was built from.
    For example, if the application was built from the v0.7.1 tag, the
    version string will be "v0.7.1". If, however, the application was built
    from a revision 3 commits after the v0.7.1 tag, the version string will
    be "v0.7.1-3-g1234567", where "1234567" is the short version of the git
    commit hash from which the application was built. Again, see the
    git-describe manpage for full details.
    
    This change also enables the default set of Spring Boot actuator
    endpoints, and configures application.properties such that the
    application version is exposed via the /info endpoint. This will
    eventually replace the need for VersionController altogether, but it
    (and its /getVersion) endpoint has been left in place for compatibility
    with existing monitoring solutions.
    
    We are no longer writing Implementation-Title and Implementation-Version
    metadata in the jar manifest, as we are no longer reading it anywhere.
    It wouldn't hurt to leave it, but removing it simplifies the build
    script and removes confusion about the source of version information in
    the application.
    
    Finally, this change modifies the startup banner to include the version
    string, but in order to do so, it was necessary to escape all
    backslashes in banner.txt to avoid exceptions being thrown from Groovy's
    SimpleTemplateEngine.
    cbeams committed Feb 15, 2018
    Configuration menu
    Copy the full SHA
    64f51ee View commit details
    Browse the repository at this point in the history
  3. Add detailed Git metadata to /info endpoint

    This is just a test to see what the data looks like. It will be reverted
    immediately afterward, as it's not clear that we need this information.
    Here is an example of what the /info endpoint looks like with this
    plugin in the mix:
    
        $ curl http://localhost:8080/info
        {
          "version" : "v0.7.0-162-g64f51ee.dirty",
          "git" : {
            "commit" : {
              "time" : 1518689646000,
              "message" : {
                "full" : "Derive version from latest git tag",
                "short" : "Derive version from latest git tag"
              },
              "id" : "64f51eecd4a17b17e0a96adf4cb2a8b5806eb3b2",
              "id.abbrev" : "64f51ee",
              "id.describe" : "64f51ee-dirty",
              "user" : {
                "email" : "chris@beams.io",
                "name" : "Chris Beams"
              }
            },
            "dirty" : "true",
            "branch" : "refactor"
          }
        }
    cbeams committed Feb 15, 2018
    Configuration menu
    Copy the full SHA
    69618cf View commit details
    Browse the repository at this point in the history
  4. Revert "Add detailed Git metadata to /info endpoint"

    This reverts commit 69618cf. As
    mentioned in the previous commit, this was just a test, and has been
    explicitly committed and reverted here in case we want to add this
    functionality back in later.
    cbeams committed Feb 15, 2018
    Configuration menu
    Copy the full SHA
    52c207d View commit details
    Browse the repository at this point in the history
  5. Configure Heroku to handle Git-based app version

    Even though Heroku is fundamentally Git-based, it does not actually keep
    the .git directory in place in the final directory where the application
    is launched.
    
    This change introduces a custom Heroku buildpack that clones a target
    repository at a given revision / branch and drops its .git directory
    into the Heroku application directory such that Gradle-based Git version
    management (introduced in previous commits) can work as intended.
    
    It is important that the value of GIT_CLONE_URL and GIT_CLONE_SHA are
    the same Git remote that causes automatic deployments to Heroku. Note
    that it is still fine to push directly to the Heroku remote, e.g. with
    `git push heroku some-local-branch:master`, but the version string will
    always show up as 'dirty' when you do this.
    cbeams committed Feb 15, 2018
    Configuration menu
    Copy the full SHA
    7de26d7 View commit details
    Browse the repository at this point in the history
  6. Enable Travis CI

    cbeams committed Feb 15, 2018
    Configuration menu
    Copy the full SHA
    c858e27 View commit details
    Browse the repository at this point in the history

Commits on Feb 16, 2018

  1. Configuration menu
    Copy the full SHA
    513d9dd View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    a41d94f View commit details
    Browse the repository at this point in the history
  3. Run PriceProvider#timer instances as daemon threads

    This ensures that when an exception is thrown at Spring container
    startup time, the application will actually exit, as opposed to staying
    running after the exception has been thrown.
    
    This change is closely related to similar changes made in
    c0eb50a prior to the introduction of
    Spring, and acheives the same effect: failing fast and actually shutting
    down the JVM when there is an exception at startup time.
    cbeams committed Feb 16, 2018
    Configuration menu
    Copy the full SHA
    fcb46f5 View commit details
    Browse the repository at this point in the history
  4. Make PriceProvider implement Spring's SmartLifecycle

    Prior to this change, PriceProvider was having its start() method called
    as a @PostConstruct hook. This isn't really what we want, because it
    ends up calling start immediately after instantiation of the provider.
    What we really want is for all provider start() methods to be called
    after all providers (and other beans) have been instantiated
    successfully. The best way to do this is to register for Spring
    container lifecycle hooks by implementing SmartLifecycle. Now, all
    PriceProvider beans are "auto-started" when the Spring container is
    refreshed, i.e. after all Spring-managed beans have been constructed and
    initialized.
    cbeams committed Feb 16, 2018
    Configuration menu
    Copy the full SHA
    7a4fd67 View commit details
    Browse the repository at this point in the history
  5. Document PriceProvider#start

    cbeams committed Feb 16, 2018
    Configuration menu
    Copy the full SHA
    30dcaaf View commit details
    Browse the repository at this point in the history
  6. Revert to simple version management

    This change largely reverts Git-based versioning introduced in commit
    7de26d7, as in the end it introduced
    too much complexity and special handling for the Heroku case. It would
    probably have caused other problems for other hosting providers and
    deployment scenarios as well.
    
    Now the version is once again hard-coded in the build script. This is an
    unfortunate decoupling from and duplication of version information in
    Git itself, and means that it's possible to forget to change the
    version and deploy a revision of the application that is actually
    different than the advertised version with no easy way of knowing that
    this happened, but that's no different than most applications. Given how
    much simpler an arrangement this presents, it's the favorable one, even
    if it requires a bit more diligence and loses a little information.
    cbeams committed Feb 16, 2018
    Configuration menu
    Copy the full SHA
    26a0247 View commit details
    Browse the repository at this point in the history
  7. Read version from classpath:version.txt

    This change moves the application's version to
    src/main/resources/version.txt instead of tracking it in the Gradle
    build file. This allows for reliably reading and presenting the contents
    of the version file regardless of whether the application was built via
    Gradle or via IDEA. Previously, the /getVersion and /info endpoints
    relied on application.properties being process via Gradle's
    processResources task. Now everything works identically whether run from
    Gradle or IDEA, and this also avoids the awkward problem of Spring and
    Gradle competing for ${...}-formatted placeholder replacement.
    
    Note that the version is still written to the jar manifest file, as this
    is what Spring Boot reads from in order to replace the
    ${application.version}, or now ${application.formatted-version}
    placeholder in banner.txt. See
    https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-banner
    for details.
    cbeams committed Feb 16, 2018
    Configuration menu
    Copy the full SHA
    ea99368 View commit details
    Browse the repository at this point in the history
  8. Add TODO

    cbeams committed Feb 16, 2018
    Configuration menu
    Copy the full SHA
    c14bdf2 View commit details
    Browse the repository at this point in the history
  9. Update README

    cbeams committed Feb 16, 2018
    Configuration menu
    Copy the full SHA
    34d6909 View commit details
    Browse the repository at this point in the history
  10. Support a ~/.config/bisq.properties config file

    If present, this file is loaded and provided to the Spring application
    context as an additional source of properties, providing a more
    convenient and persistent way to specify properties like the required
    BitcoinAverage keypair. Specifying these properties via environment
    variables remains supported as always.
    
    Note that this file is called bisq.properties, and not, e.g.
    bisq-pricenode.properties in anticipation that we may want to use this
    same config file for similar convenient configuration of other Bisq node
    types including exchange nodes themselves.
    cbeams committed Feb 16, 2018
    Configuration menu
    Copy the full SHA
    5f2a7a8 View commit details
    Browse the repository at this point in the history
  11. Use 2 5 3 params by default

    These values are what all operators are currently using in production.
    This change sets these values by default. In the future, such changes
    should be propagated by commits, not by one-off command-line parameter
    changes. This means we can consider eliminating the command line options
    entirely, which would also remove complexity from the implementation of
    BitcoinFeeRateProvider.
    cbeams committed Feb 16, 2018
    Configuration menu
    Copy the full SHA
    6089480 View commit details
    Browse the repository at this point in the history

Commits on Feb 19, 2018

  1. Make VersionController extend PriceController

    In order to pick up the request logging that happens in the superclass.
    This will be useful to see when bisq-monitoring is pinging the
    application for its version.
    cbeams committed Feb 19, 2018
    Configuration menu
    Copy the full SHA
    0af9900 View commit details
    Browse the repository at this point in the history

Commits on Feb 22, 2018

  1. Configuration menu
    Copy the full SHA
    206c398 View commit details
    Browse the repository at this point in the history
  2. Rename PriceProvider#{ttl => refreshInterval}

    Per review comments at
    bisq-network#7 (comment)
    cbeams committed Feb 22, 2018
    Configuration menu
    Copy the full SHA
    3df25dd View commit details
    Browse the repository at this point in the history
  3. Remove BitcoinFeeRateProvider#capacity parameter

    Also remove #movingAverage fee rate smoothing logic per review comments
    at bisq-network#7 (comment)
    
    IMPORTANT: @bisq-network/pricenode-operators must remove the first of
    their three command line parameters, as the first has been removed and
    no longer represents 'capacity'
    cbeams committed Feb 22, 2018
    Configuration menu
    Copy the full SHA
    bf3056a View commit details
    Browse the repository at this point in the history

Commits on Feb 26, 2018

  1. Configuration menu
    Copy the full SHA
    a87d652 View commit details
    Browse the repository at this point in the history

Commits on Mar 9, 2018

  1. Configuration menu
    Copy the full SHA
    9f5cf6a View commit details
    Browse the repository at this point in the history

Commits on Mar 12, 2018

  1. Configuration menu
    Copy the full SHA
    4c476ec View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    b62855f View commit details
    Browse the repository at this point in the history

Commits on Mar 14, 2018

  1. Configuration menu
    Copy the full SHA
    f42d9fa View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    5650ae6 View commit details
    Browse the repository at this point in the history

Commits on Mar 15, 2018

  1. Reduce Travis CI Slack notification frequency

    Per https://docs.travis-ci.com/user/notifications/#Configuring-Slack-notifications
    the default setting for Travis Slack notifications is to send a message
    on every successful build. This commit changes this frequency, such that
    notifications are always sent when builds fail and only sent when builds succeed
    after a previous failure.
    cbeams committed Mar 15, 2018
    Configuration menu
    Copy the full SHA
    d53300d View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    1a6a601 View commit details
    Browse the repository at this point in the history

Commits on Mar 16, 2018

  1. Re-introduce custom tor-binary Maven repository

    This is necessary now that bisq-pricenode is once again dependent on
    bisq-p2p in order to avoid failures like those seen at
    https://travis-ci.org/cbeams/bisq-pricenode/builds/353714246#L671-L689.
    cbeams committed Mar 16, 2018
    Configuration menu
    Copy the full SHA
    c61ca98 View commit details
    Browse the repository at this point in the history
  2. Normalize .idea/codeStyles/*.xml EOF newlines

    IDEA does strips EOF newlines in these files, so this commit adds an
    exception to the usual rule about inserting them. This will avoid
    spurious whitespace diffs on these files in the future.
    cbeams committed Mar 16, 2018
    Configuration menu
    Copy the full SHA
    123f2f3 View commit details
    Browse the repository at this point in the history
  3. Preserve blank lines in .properties files

    This setting is actually necessary only in bisq-common, but it has been
    added to the shared codeStyles/Project.xml in bisq-network/dao so as to
    be able to copy the same configuration file to all bisq-* projects.
    cbeams committed Mar 16, 2018
    Configuration menu
    Copy the full SHA
    02edfef View commit details
    Browse the repository at this point in the history
  4. Wrap lines automatically at 120 character margin

    Problem: bisq-network/style#3 indicates code should be wrapped at 120
    characters, but it is likely that people will forget and that this habit
    will only change slowly.
    
    Solution: Configure IDEA to wrap lines automatically when typing past
    120 characters, forcing the reminder to happen in real time. If this
    becomes a nuisance, we can remove it later.
    
    Note that this change also explicitly sets the RIGHT_MARGIN value to
    120, even though this is already IDEA's default value. This is simply
    to be explicit and self-documenting.
    cbeams committed Mar 16, 2018
    Configuration menu
    Copy the full SHA
    f22814d View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    9ebf7d6 View commit details
    Browse the repository at this point in the history

Commits on Mar 21, 2018

  1. Use 'master' tor-binary Maven repository

    For reasons detailed in bisq-network/bisq-p2p@b1528bf3.
    cbeams committed Mar 21, 2018
    Configuration menu
    Copy the full SHA
    b8980fc View commit details
    Browse the repository at this point in the history

Commits on Mar 22, 2018

  1. Increase Gradle HTTP timeouts from 30 => 120 seconds

    Problem: Gradle's default 30 second HTTP timeouts often cause bisq-*
    component builds to fail when resolving dependencies built on the fly
    via JitPack, e.g.:
    https://travis-ci.org/bisq-network/bisq-core/builds/356777615#L518-L525.
    
    Solution: Increase timeout values to 120 seconds, which should be more
    that sufficient.
    
    See:
     - gradle/gradle#3370
     - gradle/gradle#3371
     - gradle/gradle#4629
    cbeams committed Mar 22, 2018
    Configuration menu
    Copy the full SHA
    ca65c30 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    d46365f View commit details
    Browse the repository at this point in the history

Commits on Mar 23, 2018

  1. Configuration menu
    Copy the full SHA
    286baf4 View commit details
    Browse the repository at this point in the history

Commits on Apr 5, 2018

  1. Revert "Enable Travis CI Gradle dependency caching"

    This reverts commit d46365f.
    cbeams committed Apr 5, 2018
    Configuration menu
    Copy the full SHA
    f544007 View commit details
    Browse the repository at this point in the history

Commits on Apr 17, 2018

  1. Configuration menu
    Copy the full SHA
    47115f6 View commit details
    Browse the repository at this point in the history
  2. Add Javadoc to key components

    And in particular, document the semantics of our use of Spring's @order
    annotation per review comments at
    bisq-network/bisq-pricenode#7 (comment).
    cbeams committed Apr 17, 2018
    Configuration menu
    Copy the full SHA
    a271dcb View commit details
    Browse the repository at this point in the history