mirror of
https://github.com/aljazceru/ark.git
synced 2025-12-17 04:04:21 +01:00
* Rename arkd folder & drop cli * Rename ark cli folder & update docs * Update readme * Fix * scripts: add build-all * Add target to build cli for all platforms * Update build scripts --------- Co-authored-by: tiero <3596602+tiero@users.noreply.github.com>
81 lines
1.4 KiB
Go
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 Ark 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
|
|
}
|