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>
83 lines
1.7 KiB
Go
83 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
arkv1 "github.com/ark-network/ark/api-spec/protobuf/gen/ark/v1"
|
|
"github.com/urfave/cli/v2"
|
|
"google.golang.org/grpc"
|
|
"google.golang.org/grpc/credentials"
|
|
"google.golang.org/grpc/credentials/insecure"
|
|
)
|
|
|
|
type vtxo struct {
|
|
amount uint64
|
|
txid string
|
|
vout uint32
|
|
poolTxid string
|
|
}
|
|
|
|
func getVtxos(
|
|
ctx *cli.Context, client arkv1.ArkServiceClient, addr string,
|
|
) ([]vtxo, error) {
|
|
response, err := client.ListVtxos(ctx.Context, &arkv1.ListVtxosRequest{
|
|
Address: addr,
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
vtxos := make([]vtxo, 0, len(response.Vtxos))
|
|
for _, v := range response.Vtxos {
|
|
vtxos = append(vtxos, vtxo{
|
|
amount: v.Receiver.Amount,
|
|
txid: v.Outpoint.Txid,
|
|
vout: v.Outpoint.Vout,
|
|
poolTxid: v.PoolTxid,
|
|
})
|
|
}
|
|
|
|
return vtxos, nil
|
|
}
|
|
|
|
func getClientFromState(ctx *cli.Context) (arkv1.ArkServiceClient, func(), error) {
|
|
state, err := getState()
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
addr, ok := state["ark_url"]
|
|
if !ok {
|
|
return nil, nil, fmt.Errorf("missing ark_url")
|
|
}
|
|
return getClient(ctx, addr)
|
|
}
|
|
|
|
func getClient(ctx *cli.Context, addr string) (arkv1.ArkServiceClient, func(), error) {
|
|
creds := insecure.NewCredentials()
|
|
port := 80
|
|
if strings.HasPrefix(addr, "https://") {
|
|
addr = strings.TrimPrefix(addr, "https://")
|
|
creds = credentials.NewTLS(nil)
|
|
port = 443
|
|
}
|
|
if !strings.Contains(addr, ":") {
|
|
addr = fmt.Sprintf("%s:%d", addr, port)
|
|
}
|
|
conn, err := grpc.Dial(addr, grpc.WithTransportCredentials(creds))
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
client := arkv1.NewArkServiceClient(conn)
|
|
|
|
closeFn := func() {
|
|
err := conn.Close()
|
|
if err != nil {
|
|
fmt.Printf("error closing connection: %s\n", err)
|
|
}
|
|
}
|
|
|
|
return client, closeFn, nil
|
|
}
|