1// SPDX-License-Identifier: ISC
2// Copyright (c) 2014-2020 Bitmark Inc.
3// Use of this source code is governed by an ISC
4// license that can be found in the LICENSE file.
5
6package main
7
8import (
9	"fmt"
10
11	"github.com/urfave/cli"
12
13	"github.com/bitmark-inc/bitmarkd/command/bitmark-cli/rpccalls"
14)
15
16func runTransfer(c *cli.Context) error {
17
18	m := c.App.Metadata["config"].(*metadata)
19
20	txId, err := checkTxId(c.String("txid"))
21	if nil != err {
22		return err
23	}
24
25	to, recipient, err := checkRecipient(c, "receiver", m.config)
26	if nil != err {
27		return err
28	}
29
30	from, owner, err := checkOwnerWithPasswordPrompt(c.GlobalString("identity"), m.config, c)
31	if nil != err {
32		return err
33	}
34
35	if m.verbose {
36		fmt.Fprintf(m.e, "txid: %s\n", txId)
37		fmt.Fprintf(m.e, "receiver: %s\n", to)
38		fmt.Fprintf(m.e, "sender: %s\n", from)
39	}
40
41	client, err := rpccalls.NewClient(m.testnet, m.config.Connections[m.connectionOffset], m.verbose, m.e)
42	if nil != err {
43		return err
44	}
45	defer client.Close()
46
47	transferConfig := &rpccalls.TransferData{
48		Owner:    owner,
49		NewOwner: recipient,
50		TxId:     txId,
51	}
52
53	if c.Bool("unratified") {
54
55		response, err := client.Transfer(transferConfig)
56		if nil != err {
57			return err
58		}
59
60		printJson(m.w, response)
61
62	} else {
63		response, err := client.SingleSignedTransfer(transferConfig)
64		if nil != err {
65			return err
66		}
67
68		printJson(m.w, response)
69	}
70	return nil
71}
72