ceremonyclient/client/cmd/balance.go
Cassandra Heart 6d6189d1ad
v2.0.2.3
2024-10-28 19:44:22 -05:00

93 lines
1.9 KiB
Go

package cmd
import (
"context"
"fmt"
"math/big"
"github.com/iden3/go-iden3-crypto/poseidon"
"github.com/spf13/cobra"
"source.quilibrium.com/quilibrium/monorepo/node/protobufs"
)
var balanceCmd = &cobra.Command{
Use: "balance",
Short: "Lists the total balance of tokens in the managing account",
Run: func(cmd *cobra.Command, args []string) {
conn, err := GetGRPCClient()
if err != nil {
panic(err)
}
defer conn.Close()
client := protobufs.NewNodeServiceClient(conn)
peerId := GetPeerIDFromConfig(NodeConfig)
privKey, err := GetPrivKeyFromConfig(NodeConfig)
if err != nil {
panic(err)
}
pub, err := privKey.GetPublic().Raw()
if err != nil {
panic(err)
}
addr, err := poseidon.HashBytes([]byte(peerId))
if err != nil {
panic(err)
}
addrBytes := addr.FillBytes(make([]byte, 32))
info, err := client.GetTokenInfo(
context.Background(),
&protobufs.GetTokenInfoRequest{
Address: addrBytes,
},
)
if err != nil {
panic(err)
}
tokens := new(big.Int).SetBytes(info.OwnedTokens)
conversionFactor, _ := new(big.Int).SetString("1DCD65000", 16)
r := new(big.Rat).SetFrac(tokens, conversionFactor)
altAddr, err := poseidon.HashBytes([]byte(pub))
if err != nil {
panic(err)
}
altAddrBytes := altAddr.FillBytes(make([]byte, 32))
info, err = client.GetTokenInfo(
context.Background(),
&protobufs.GetTokenInfoRequest{
Address: altAddrBytes,
},
)
if err != nil {
panic(err)
}
if info.OwnedTokens == nil {
panic("invalid response from RPC")
}
tokens = new(big.Int).SetBytes(info.OwnedTokens)
r2 := new(big.Rat).SetFrac(tokens, conversionFactor)
fmt.Println("Total balance:", r.FloatString(12), fmt.Sprintf(
"QUIL (Account 0x%x)",
addrBytes,
))
if r2.Cmp(big.NewRat(0, 1)) != 0 {
fmt.Println("Total balance:", r2.FloatString(12), fmt.Sprintf(
"QUIL (Account 0x%x)",
altAddrBytes,
))
}
},
}
func init() {
tokenCmd.AddCommand(balanceCmd)
}