-
Notifications
You must be signed in to change notification settings - Fork 2
/
spam.go
121 lines (113 loc) · 3.38 KB
/
spam.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
// Copyright (C) 2024, AllianceBlock. All rights reserved.
// See the file LICENSE for licensing terms.
package cmd
import (
"context"
"github.com/spf13/cobra"
"github.com/ava-labs/avalanchego/ids"
"github.com/ava-labs/hypersdk/chain"
"github.com/ava-labs/hypersdk/cli"
"github.com/ava-labs/hypersdk/codec"
"github.com/ava-labs/hypersdk/crypto/bls"
"github.com/ava-labs/hypersdk/crypto/ed25519"
"github.com/ava-labs/hypersdk/crypto/secp256r1"
"github.com/ava-labs/hypersdk/pubsub"
hrpc "github.com/ava-labs/hypersdk/rpc"
hutils "github.com/ava-labs/hypersdk/utils"
"github.com/nuklai/nuklaivm/actions"
"github.com/nuklai/nuklaivm/auth"
nconsts "github.com/nuklai/nuklaivm/consts"
nrpc "github.com/nuklai/nuklaivm/rpc"
)
func getFactory(priv *cli.PrivateKey) (chain.AuthFactory, error) {
switch priv.Address[0] {
case nconsts.ED25519ID:
return auth.NewED25519Factory(ed25519.PrivateKey(priv.Bytes)), nil
case nconsts.SECP256R1ID:
return auth.NewSECP256R1Factory(secp256r1.PrivateKey(priv.Bytes)), nil
case nconsts.BLSID:
p, err := bls.PrivateKeyFromBytes(priv.Bytes)
if err != nil {
return nil, err
}
return auth.NewBLSFactory(p), nil
default:
return nil, ErrInvalidKeyType
}
}
var spamCmd = &cobra.Command{
Use: "spam",
RunE: func(*cobra.Command, []string) error {
return ErrMissingSubcommand
},
}
var runSpamCmd = &cobra.Command{
Use: "run [ed25519/secp256r1/bls]",
PreRunE: func(cmd *cobra.Command, args []string) error {
if len(args) != 1 {
return ErrInvalidArgs
}
return checkKeyType(args[0])
},
RunE: func(_ *cobra.Command, args []string) error {
var hws *hrpc.WebSocketClient
var ncli *nrpc.JSONRPCClient
var maxFeeParsed *uint64
if maxFee >= 0 {
v := uint64(maxFee)
maxFeeParsed = &v
}
return handler.Root().Spam(maxTxBacklog, maxFeeParsed, randomRecipient,
func(uri string, networkID uint32, chainID ids.ID) error { // createClient
ncli = nrpc.NewJSONRPCClient(uri, networkID, chainID)
ws, err := hrpc.NewWebSocketClient(uri, hrpc.DefaultHandshakeTimeout, pubsub.MaxPendingMessages, pubsub.MaxReadMessageSize)
if err != nil {
return err
}
hws = ws
return nil
},
getFactory,
func() (*cli.PrivateKey, error) { // createAccount
return generatePrivateKey(args[0])
},
func(choice int, address string) (uint64, error) { // lookupBalance
balance, err := ncli.Balance(context.TODO(), address, ids.Empty)
if err != nil {
return 0, err
}
hutils.Outf(
"%d) {{cyan}}address:{{/}} %s {{cyan}}balance:{{/}} %s %s\n",
choice,
address,
hutils.FormatBalance(balance, nconsts.Decimals),
nconsts.Symbol,
)
return balance, err
},
func(ctx context.Context, chainID ids.ID) (chain.Parser, error) { // getParser
return ncli.Parser(ctx)
},
func(addr codec.Address, amount uint64) chain.Action { // getTransfer
return &actions.Transfer{
To: addr,
Asset: ids.Empty,
Value: amount,
}
},
func(hcli *hrpc.JSONRPCClient, priv *cli.PrivateKey) func(context.Context, uint64) error { // submitDummy
return func(ictx context.Context, count uint64) error {
factory, err := getFactory(priv)
if err != nil {
return err
}
_, _, err = sendAndWait(ictx, nil, &actions.Transfer{
To: priv.Address,
Value: count, // prevent duplicate txs
}, hcli, hws, ncli, factory, false)
return err
}
},
)
},
}