From e8bb33016b6272539ec993757a21c81ba8bdb2a7 Mon Sep 17 00:00:00 2001 From: Brian Stafford Date: Fri, 1 Dec 2023 09:20:07 -0600 Subject: [PATCH] add getter for network fee rate --- client/core/core.go | 9 +++++++++ client/core/core_test.go | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/client/core/core.go b/client/core/core.go index 048bd35088..d179cbee7e 100644 --- a/client/core/core.go +++ b/client/core/core.go @@ -9962,3 +9962,12 @@ func (c *Core) saveDisabledRateSources() { c.log.Errorf("Unable to save disabled fiat rate source to database: %v", err) } } + +// NetworkFeeRate generates a network tx fee rate for the specified asset. +// If the wallet implements FeeRater, the wallet will be queried for the +// fee rate. If the wallet is not a FeeRater, local book feed caches are +// checked. If no relevant books are synced, connected DCRDEX servers will be +// queried. +func (c *Core) NetworkFeeRate(assetID uint32) uint64 { + return c.feeSuggestionAny(assetID) +} diff --git a/client/core/core_test.go b/client/core/core_test.go index a9887f556e..5bafb04ab3 100644 --- a/client/core/core_test.go +++ b/client/core/core_test.go @@ -10450,3 +10450,42 @@ func TestUpdateFeesPaid(t *testing.T) { } } } + +func TestNetworkFeeRate(t *testing.T) { + rig := newTestRig() + defer rig.shutdown() + + assetID := tUTXOAssetA.ID + wallet, tWallet := newTWallet(assetID) + rig.core.wallets[assetID] = wallet + + const feeRaterRate = 50 + dumbWallet := wallet.Wallet + wallet.Wallet = &TFeeRater{ + TXCWallet: tWallet, + feeRate: feeRaterRate, + } + if r := rig.core.NetworkFeeRate(assetID); r != feeRaterRate { + t.Fatalf("FeeRater not working. %d != %d", r, feeRaterRate) + } + wallet.Wallet = dumbWallet + + const bookFeedFeeRate = 60 + book := newBookie(rig.dc, assetID, tUTXOAssetB.ID, nil, tLogger) + rig.dc.books[tDcrBtcMktName] = book + book.logEpochReport(&msgjson.EpochReportNote{BaseFeeRate: bookFeedFeeRate}) + if r := rig.core.NetworkFeeRate(assetID); r != bookFeedFeeRate { + t.Fatalf("Book feed fee rate not working. %d != %d", r, bookFeedFeeRate) + } + delete(rig.dc.books, tDcrBtcMktName) + + const serverFeeRate = 70 + rig.ws.queueResponse(msgjson.FeeRateRoute, func(msg *msgjson.Message, f msgFunc) error { + resp, _ := msgjson.NewResponse(msg.ID, serverFeeRate, nil) + f(resp) + return nil + }) + if r := rig.core.NetworkFeeRate(assetID); r != serverFeeRate { + t.Fatalf("Server fee rate not working. %d != %d", r, serverFeeRate) + } +}