<p>Extend <code>FeeRateService</code> and related classes to allow querying multiple fee estimation API endpoints, instead of just one.</p>
<p>The API endpoints are queried independently and in parallel. Each will recover gracefully from any connection issues or timeouts, not influencing the others.</p>
<p>The <code>FeeRateService</code> exposes the average of the retrieved fee rates to the Bisq clients. Alternatively, if no fee estimate could be queried, it will return <code>BitcoinFeeRateProvider.MIN_FEE_RATE</code>.</p>
<p>Up to 5 API endpoints are supported. They can be configured in the file <code>application.properties</code>.</p>
<p>When no configured API endpoint is reachable, or none is configured, the logic falls back to asking the <a rel="nofollow" href="https://mempool.space">https://mempool.space</a> endpoint. By default, 2 endpoints are configured.</p>
<p><span class="issue-keyword tooltipped tooltipped-se" aria-label="This pull request closes issue #27.">Fixes</span> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="579705286" data-permission-text="Title is private" data-url="https://github.com/bisq-network/projects/issues/27" data-hovercard-type="issue" data-hovercard-url="/bisq-network/projects/issues/27/hovercard" href="https://github.com/bisq-network/projects/issues/27">bisq-network/projects#27</a></p>

<hr>

<h4>You can view, comment on, or merge this pull request online at:</h4>
<p>  <a href='https://github.com/bisq-network/bisq/pull/4247'>https://github.com/bisq-network/bisq/pull/4247</a></p>

<h4>Commit Summary</h4>
<ul>
  <li>Add unit test for Version controller</li>
  <li>Extend unit tests for ExchangeRateService</li>
  <li>Add ExchangeRateService test for N>1 providers</li>
  <li>Add support for N>1 providers in FeeRateService</li>
  <li>Scale number of fee providers using config</li>
  <li>Update README.md</li>
</ul>

<h4>File Changes</h4>
<ul>
  <li>
    <strong>M</strong>
    <a href="https://github.com/bisq-network/bisq/pull/4247/files#diff-c197962302397baf3a4cc36463dce5ea">build.gradle</a>
    (7)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/bisq-network/bisq/pull/4247/files#diff-86e3532212d7f8057ed59bfb64e055f3">pricenode/README.md</a>
    (9)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/bisq-network/bisq/pull/4247/files#diff-b362da8e00ffd5d98c1f35d1885511ff">pricenode/src/main/java/bisq/price/mining/FeeRateService.java</a>
    (47)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/bisq-network/bisq/pull/4247/files#diff-3383bf575930f18a807910fe3cf06ec9">pricenode/src/main/java/bisq/price/mining/providers/BitcoinFeeRateProvider.java</a>
    (129)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/bisq-network/bisq/pull/4247/files#diff-11af0fa35420266c0d5f1b080dec6eb1">pricenode/src/main/resources/application.properties</a>
    (8)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/bisq-network/bisq/pull/4247/files#diff-512193d65ac7eb8097642ef31c96e9f5">pricenode/src/test/java/bisq/price/TestBase.java</a>
    (35)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/bisq-network/bisq/pull/4247/files#diff-3ce303a8bc968068bca00c53781adf76">pricenode/src/test/java/bisq/price/mining/FeeRateServiceTest.java</a>
    (152)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/bisq-network/bisq/pull/4247/files#diff-8965020cfd3a4fec139fd8a439bbcd8d">pricenode/src/test/java/bisq/price/mining/providers/BitcoinFeeRateProviderTest.java</a>
    (9)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/bisq-network/bisq/pull/4247/files#diff-9821c1b3bffbf3c6f980c70f6ab26dac">pricenode/src/test/java/bisq/price/spot/ExchangeRateServiceTest.java</a>
    (171)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/bisq-network/bisq/pull/4247/files#diff-d9b1700795f5ccbbf2f2e32c8db908d1">pricenode/src/test/java/bisq/price/util/VersionControllerTest.java</a>
    (24)
  </li>
</ul>

<h4>Patch Links:</h4>
<ul>
  <li><a href='https://github.com/bisq-network/bisq/pull/4247.patch'>https://github.com/bisq-network/bisq/pull/4247.patch</a></li>
  <li><a href='https://github.com/bisq-network/bisq/pull/4247.diff'>https://github.com/bisq-network/bisq/pull/4247.diff</a></li>
</ul>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />You are receiving this because you are subscribed to this thread.<br />Reply to this email directly, <a href="https://github.com/bisq-network/bisq/pull/4247">view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/AJFFTNWGWD65LBH6H5DSAFTRQV7HFANCNFSM4M43RDZQ">unsubscribe</a>.<img src="https://github.com/notifications/beacon/AJFFTNS34G2QP7VFOJD3HC3RQV7HFA5CNFSM4M43RDZ2YY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4JFLLX6A.gif" height="1" width="1" alt="" /></p>
<script type="application/ld+json">[
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"potentialAction": {
"@type": "ViewAction",
"target": "https://github.com/bisq-network/bisq/pull/4247",
"url": "https://github.com/bisq-network/bisq/pull/4247",
"name": "View Pull Request"
},
"description": "View this Pull Request on GitHub",
"publisher": {
"@type": "Organization",
"name": "GitHub",
"url": "https://github.com"
}
}
]</script>