From c119f1f57c18de12a231c5283adbc79fb4400199 Mon Sep 17 00:00:00 2001 From: Steven Polley Date: Sun, 1 Sep 2024 09:05:21 -0600 Subject: [PATCH] get bitcoin addresses concurrently --- providers/bitcoin/providerImpl.go | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/providers/bitcoin/providerImpl.go b/providers/bitcoin/providerImpl.go index 9096dbf..3ea9d01 100644 --- a/providers/bitcoin/providerImpl.go +++ b/providers/bitcoin/providerImpl.go @@ -2,7 +2,9 @@ package bitcoin import ( "fmt" + "log" "os" + "sync" ) type Provider struct { @@ -50,15 +52,22 @@ func (p *Provider) GetBalances() ([]int, []string, error) { balances := make([]int, 0) ynabAccountIDs := make([]string, 0) var satoshiBalance int - for _, bitcoinAddress := range p.bitcoinAddresses { - addressResponse, err := p.client.getAddress(bitcoinAddress) - if err != nil { - return balances, ynabAccountIDs, fmt.Errorf("failed to get bitcoin address '%s': %v", bitcoinAddress, err) - } + wg := sync.WaitGroup{} - satoshiBalance += addressResponse.ChainStats.FundedTxoSum - addressResponse.ChainStats.SpentTxoSum + for _, bitcoinAddress := range p.bitcoinAddresses { + wg.Add(1) + go func() { + defer wg.Done() + addressResponse, err := p.client.getAddress(bitcoinAddress) + if err != nil { + log.Printf("failed to get bitcoin address '%s': %v", bitcoinAddress, err) + } + satoshiBalance += addressResponse.ChainStats.FundedTxoSum - addressResponse.ChainStats.SpentTxoSum + }() } + wg.Wait() + fiatBalance, err := p.client.convertBTCToCAD(satoshiBalance) if err != nil { return balances, ynabAccountIDs, fmt.Errorf("failed to convert satoshi balance to fiat balance: %v", err)