Skip to content

Commit e8d2b3a

Browse files
committed
Merge branch 'develop'
2 parents 07dc080 + 531568d commit e8d2b3a

31 files changed

Lines changed: 1512 additions & 902 deletions

commands/box/ctl/root.go

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,18 @@ import (
1111
"strconv"
1212

1313
"github.com/BOXFoundation/boxd/commands/box/root"
14+
"github.com/BOXFoundation/boxd/config"
1415
"github.com/BOXFoundation/boxd/core/types"
1516
"github.com/BOXFoundation/boxd/crypto"
1617
"github.com/BOXFoundation/boxd/p2p"
1718
"github.com/BOXFoundation/boxd/rpc/rpcutil"
1819
"github.com/BOXFoundation/boxd/util"
1920
"github.com/BOXFoundation/boxd/wallet"
2021
"github.com/spf13/cobra"
22+
"github.com/spf13/viper"
2123
)
2224

2325
var (
24-
peerAddr = "127.0.0.1:19111"
2526
walletDir string
2627

2728
defaultWalletDir = path.Join(util.HomeDir(), ".box_keystore")
@@ -167,13 +168,14 @@ func debugLevelCmdFunc(cmd *cobra.Command, args []string) {
167168
if len(args) > 0 {
168169
level = args[0]
169170
}
170-
conn, err := rpcutil.GetGRPCConn(peerAddr)
171+
conn, err := rpcutil.GetGRPCConn(getRPCAddr())
171172
if err != nil {
172173
fmt.Println(err)
173174
return
174175
}
175176
defer conn.Close()
176177
rpcutil.SetDebugLevel(conn, level)
178+
fmt.Println("success")
177179
}
178180

179181
// NOTE: should be remove in product env
@@ -187,7 +189,7 @@ func updateNetworkID(cmd *cobra.Command, args []string) {
187189
}
188190
id = uint32(n)
189191
}
190-
conn, err := rpcutil.GetGRPCConn(peerAddr)
192+
conn, err := rpcutil.GetGRPCConn(getRPCAddr())
191193
if err != nil {
192194
fmt.Println(err)
193195
return
@@ -208,25 +210,25 @@ func getBalanceCmdFunc(cmd *cobra.Command, args []string) {
208210
addrs = append(addrs, acc.Addr())
209211
}
210212
} else {
211-
addrs = append(addrs, args[0])
213+
addrs = args
212214
}
213-
conn, err := rpcutil.GetGRPCConn(peerAddr)
215+
conn, err := rpcutil.GetGRPCConn(getRPCAddr())
214216
if err != nil {
215217
fmt.Println(err)
216218
return
217219
}
218220
defer conn.Close()
221+
if err := types.ValidateAddr(addrs...); err != nil {
222+
fmt.Println(err)
223+
return
224+
}
219225
balances, err := rpcutil.GetBalance(conn, addrs)
220226
if err != nil {
221227
fmt.Println(err)
222228
return
223229
}
224-
var total uint64
225-
for _, balance := range balances {
226-
total += balance
227-
}
228-
if len(balances) > 1 {
229-
fmt.Println("Total balance: ", total)
230+
for i, b := range balances {
231+
fmt.Printf("%s: %d\n", addrs[i], b)
230232
}
231233
}
232234

@@ -237,7 +239,7 @@ func getBlockCmdFunc(cmd *cobra.Command, args []string) {
237239
return
238240
}
239241
hash := args[0]
240-
conn, err := rpcutil.GetGRPCConn(peerAddr)
242+
conn, err := rpcutil.GetGRPCConn(getRPCAddr())
241243
if err != nil {
242244
fmt.Println(err)
243245
return
@@ -253,7 +255,7 @@ func getBlockCmdFunc(cmd *cobra.Command, args []string) {
253255

254256
func getBlockCountCmdFunc(cmd *cobra.Command, args []string) {
255257
fmt.Println("getblockcount called")
256-
conn, err := rpcutil.GetGRPCConn(peerAddr)
258+
conn, err := rpcutil.GetGRPCConn(getRPCAddr())
257259
if err != nil {
258260
fmt.Println(err)
259261
return
@@ -278,7 +280,7 @@ func getBlockHashCmdFunc(cmd *cobra.Command, args []string) {
278280
return
279281
}
280282
height := uint32(height64)
281-
conn, err := rpcutil.GetGRPCConn(peerAddr)
283+
conn, err := rpcutil.GetGRPCConn(getRPCAddr())
282284
if err != nil {
283285
fmt.Println(err)
284286
return
@@ -299,7 +301,7 @@ func getBlockHeaderCmdFunc(cmd *cobra.Command, args []string) {
299301
return
300302
}
301303
hash := args[0]
302-
conn, err := rpcutil.GetGRPCConn(peerAddr)
304+
conn, err := rpcutil.GetGRPCConn(getRPCAddr())
303305
if err != nil {
304306
fmt.Println(err)
305307
return
@@ -321,7 +323,7 @@ func getRawTxCmdFunc(cmd *cobra.Command, args []string) {
321323
}
322324
hash := crypto.HashType{}
323325
hash.SetString(args[0])
324-
conn, err := rpcutil.GetGRPCConn(peerAddr)
326+
conn, err := rpcutil.GetGRPCConn(getRPCAddr())
325327
if err != nil {
326328
fmt.Println(err)
327329
return
@@ -380,3 +382,9 @@ func validateMessageCmdFunc(cmd *cobra.Command, args []string) {
380382
fmt.Println(args[0], " is a valid address")
381383
}
382384
}
385+
386+
func getRPCAddr() string {
387+
var cfg config.Config
388+
viper.Unmarshal(&cfg)
389+
return fmt.Sprintf("%s:%d", cfg.RPC.Address, cfg.RPC.Port)
390+
}

commands/box/splitaddr/root.go

Lines changed: 63 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,18 @@
55
package splitaddrcmd
66

77
import (
8-
"encoding/hex"
98
"fmt"
109
"path"
1110
"strconv"
12-
"strings"
1311

1412
root "github.com/BOXFoundation/boxd/commands/box/root"
13+
"github.com/BOXFoundation/boxd/config"
1514
"github.com/BOXFoundation/boxd/core/types"
16-
"github.com/BOXFoundation/boxd/script"
15+
"github.com/BOXFoundation/boxd/rpc/rpcutil"
1716
"github.com/BOXFoundation/boxd/util"
17+
"github.com/BOXFoundation/boxd/wallet"
1818
"github.com/spf13/cobra"
19+
"github.com/spf13/viper"
1920
)
2021

2122
const (
@@ -55,95 +56,74 @@ func init() {
5556
}
5657

5758
func createCmdFunc(cmd *cobra.Command, args []string) {
58-
fmt.Println("create called")
59+
fmt.Println("splitaddr create called")
5960
if len(args) < 3 || len(args)%2 == 0 {
6061
fmt.Println("Invalid argument number: expect odd number larger than or equal to 3")
6162
return
6263
}
63-
//addrs, weights, err := parseAddrWeight(args[1:])
64-
//if err != nil {
65-
// fmt.Println(err)
66-
// return
67-
//}
68-
69-
//wltMgr, err := wallet.NewWalletManager(walletDir)
70-
//if err != nil {
71-
// fmt.Println(err)
72-
// return
73-
//}
74-
//account, exists := wltMgr.GetAccount(args[0])
75-
//if !exists {
76-
// fmt.Printf("Account %s not managed\n", args[0])
77-
// return
78-
//}
79-
//passphrase, err := wallet.ReadPassphraseStdin()
80-
//if err != nil {
81-
// fmt.Println(err)
82-
// return
83-
//}
84-
//if err := account.UnlockWithPassphrase(passphrase); err != nil {
85-
// fmt.Println("Fail to unlock account", err)
86-
// return
87-
//}
88-
//fromAddr, err := types.NewAddress(args[0])
89-
//if err != nil {
90-
// fmt.Println("Invalid address: ", args[0])
91-
// return
92-
//}
93-
//target := make(map[types.Address]uint64)
94-
//target[fromAddr /* just a dummy value here */] = opReturnAmount
95-
96-
//conn := client.NewConnectionWithViper(viper.GetViper())
97-
//defer conn.Close()
98-
//tx, err := client.CreateSplitAddrTransaction(conn, fromAddr, account.PublicKey(), addrs, weights, account)
99-
//if err != nil {
100-
// fmt.Println(err)
101-
// return
102-
//}
103-
//hash, _ := tx.TxHash()
104-
//fmt.Println("Tx Hash:", hash.String())
105-
//fmt.Println(util.PrettyPrint(tx))
106-
107-
//splitAddr, err := getSplitAddr(tx.Vout[0].ScriptPubKey)
108-
//if err != nil {
109-
// fmt.Println(err)
110-
// return
111-
//}
112-
//fmt.Printf("Split address generated for `%s`: %v\n", args[1:], splitAddr)
113-
}
114-
115-
func parseAddrWeight(args []string) ([]types.Address, []uint64, error) {
116-
addrs := make([]types.Address, 0)
117-
weights := make([]uint64, 0)
118-
for i := 0; i < len(args)/2; i++ {
119-
addr, err := types.NewAddress(args[i*2])
120-
if err != nil {
121-
return nil, nil, err
122-
}
123-
addrs = append(addrs, addr)
124-
125-
weight, err := strconv.Atoi(args[i*2+1])
64+
// account
65+
wltMgr, err := wallet.NewWalletManager(walletDir)
66+
if err != nil {
67+
fmt.Println(err)
68+
return
69+
}
70+
account, exists := wltMgr.GetAccount(args[0])
71+
if !exists {
72+
fmt.Printf("Account %s not managed\n", args[0])
73+
return
74+
}
75+
passphrase, err := wallet.ReadPassphraseStdin()
76+
if err != nil {
77+
fmt.Println(err)
78+
return
79+
}
80+
if err := account.UnlockWithPassphrase(passphrase); err != nil {
81+
fmt.Println("Fail to unlock account", err)
82+
return
83+
}
84+
// addrs and weights
85+
addrs, weights := make([]string, 0), make([]uint64, 0)
86+
for i := 1; i < len(args)-1; i += 2 {
87+
addrs = append(addrs, args[i])
88+
a, err := strconv.ParseUint(args[i+1], 10, 64)
12689
if err != nil {
127-
return nil, nil, err
90+
fmt.Printf("Invalid amount %s\n", args[i+1])
91+
return
12892
}
129-
weights = append(weights, uint64(weight))
93+
weights = append(weights, a)
13094
}
131-
return addrs, weights, nil
132-
}
133-
134-
// create a split address from arguments
135-
func getSplitAddr(scriptPubKey []byte) (string, error) {
136-
// e.g., OP_RETURN aaeb7c5e48182fbd309a4e6a7e0de57e56f4cb16 ce86056786e3415530f8cc739fb414a87435b4b6 01 3ba03e454aed097836f2957a120f95ecf76a2771 04
137-
splitAddrScriptStr := script.NewScriptFromBytes(scriptPubKey).Disasm()
138-
s := strings.Split(splitAddrScriptStr, " ")
139-
// e.g., aaeb7c5e48182fbd309a4e6a7e0de57e56f4cb16
140-
pubKeyHash, err := hex.DecodeString(s[1])
95+
if err := types.ValidateAddr(addrs...); err != nil {
96+
fmt.Println(err)
97+
return
98+
}
99+
// fee
100+
fee := uint64(10)
101+
// conn
102+
conn, err := rpcutil.GetGRPCConn(getRPCAddr())
141103
if err != nil {
142-
return "", err
104+
fmt.Println(err)
105+
return
143106
}
144-
addr, err := types.NewAddressPubKeyHash(pubKeyHash)
107+
defer conn.Close()
108+
// send tx
109+
tx, splitAddr, _, err := rpcutil.NewSplitAddrTxWithFee(account, addrs,
110+
weights, fee, conn)
145111
if err != nil {
146-
return "", err
112+
fmt.Println(err)
113+
return
147114
}
148-
return addr.String(), nil
115+
hashStr, err := rpcutil.SendTransaction(conn, tx)
116+
if err != nil {
117+
fmt.Println(err)
118+
return
119+
}
120+
fmt.Printf("SplitAddr generated: %s\n", splitAddr)
121+
fmt.Println("Tx Hash: ", hashStr)
122+
fmt.Println(util.PrettyPrint(tx))
123+
}
124+
125+
func getRPCAddr() string {
126+
var cfg config.Config
127+
viper.Unmarshal(&cfg)
128+
return fmt.Sprintf("%s:%d", cfg.RPC.Address, cfg.RPC.Port)
149129
}

0 commit comments

Comments
 (0)