Files
ark/noah/balance.go
Pietralberto Mazza d150c4bbac Add support for collaborative redemption of vtxos & Changes to ark wallet (#72)
* Add internal support for collaborative exit

* Update protos and interface layer

* Fixes after proto updates

* Fix printing json & Do not print ark pubkey in config

* Add collaborative redeem command

* Polish

* Add address validation

* Fix building tree without right branch

* Fixes and validation checks

* Fixes

* Fix counting complete queued payments

* Add relays

* Add and compute onchain balance concurrently

* Tiny refactor

* Merge `config connect` into `init` cmd
2023-12-29 17:09:50 +01:00

81 lines
1.4 KiB
Go

package main
import (
"sync"
"github.com/urfave/cli/v2"
)
var balanceCommand = cli.Command{
Name: "balance",
Usage: "Print balance of the Noah wallet",
Action: balanceAction,
}
func balanceAction(ctx *cli.Context) error {
client, cancel, err := getClientFromState(ctx)
if err != nil {
return err
}
defer cancel()
offchainAddr, onchainAddr, err := getAddress()
if err != nil {
return err
}
wg := &sync.WaitGroup{}
wg.Add(2)
chRes := make(chan balanceRes, 2)
go func() {
defer wg.Done()
balance, err := getOffchainBalance(ctx, client, offchainAddr)
if err != nil {
chRes <- balanceRes{0, 0, err}
return
}
chRes <- balanceRes{balance, 0, nil}
}()
go func() {
defer wg.Done()
balance, err := getOnchainBalance(onchainAddr)
if err != nil {
chRes <- balanceRes{0, 0, err}
return
}
chRes <- balanceRes{0, balance, nil}
}()
wg.Wait()
offchainBalance, onchainBalance := uint64(0), uint64(0)
count := 0
for res := range chRes {
if res.err != nil {
return res.err
}
if res.offchainBalance > 0 {
offchainBalance = res.offchainBalance
}
if res.onchainBalance > 0 {
onchainBalance = res.onchainBalance
}
count++
if count == 2 {
break
}
}
return printJSON(map[string]interface{}{
"offchain_balance": offchainBalance,
"onchain_balance": onchainBalance,
})
}
type balanceRes struct {
offchainBalance uint64
onchainBalance uint64
err error
}