1
1
package main
2
2
3
- // import (
4
- // "bufio"
5
- // "encoding/json"
6
- // "errors"
7
- // "fmt"
8
- // "os"
9
- // "runtime/debug"
10
-
11
- // "cosmossdk.io/core/address"
12
- // "github.com/cosmos/cosmos-sdk/client"
13
- // "github.com/cosmos/cosmos-sdk/crypto/keyring"
14
- // authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
15
- // banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
16
- // genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types"
17
- // "github.com/gogo/protobuf/codec"
18
-
19
- // "github.com/spf13/cobra"
20
-
21
- // "github.com/cosmos/cosmos-sdk/client/flags"
22
- // "github.com/cosmos/cosmos-sdk/server"
23
- // sdk "github.com/cosmos/cosmos-sdk/types"
24
- // "github.com/cosmos/cosmos-sdk/x/genutil"
25
- // )
26
-
27
- /*
28
- const (
29
- flagClientHome = "home-client"
30
- flagVestingStart = "vesting-start-time"
31
- flagVestingEnd = "vesting-end-time"
32
- flagVestingAmt = "vesting-amount"
33
- )
34
- */
35
-
36
3
import (
37
4
"bufio"
38
5
"encoding/json"
@@ -41,7 +8,6 @@ import (
41
8
"os"
42
9
"runtime/debug"
43
10
44
- //"cosmossdk.io/core/address"
45
11
"github.com/cosmos/cosmos-sdk/client"
46
12
"github.com/cosmos/cosmos-sdk/crypto/keyring"
47
13
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
@@ -70,169 +36,6 @@ const (
70
36
flagModuleName = "module-name"
71
37
)
72
38
73
- // AddGenesisAccountCmd returns add-genesis-account cobra Command.
74
- func _AddGenesisAccountCmd (defaultNodeHome string ) * cobra.Command {
75
- cmd := & cobra.Command {
76
- Use : "add-genesis-account [address_or_key_name] [coin][,[coin]]" ,
77
- Short : "Add a genesis account to genesis.json" ,
78
- Long : `Add a genesis account to genesis.json. The provided account must specify
79
- the account address or key name and a list of initial coins. If a key name is given,
80
- the address will be looked up in the local Keybase. The list of initial tokens must
81
- contain valid denominations. Accounts may optionally be supplied with vesting parameters.
82
- ` ,
83
- Args : cobra .ExactArgs (2 ),
84
- RunE : func (cmd * cobra.Command , args []string ) error {
85
- clientCtx := client .GetClientContextFromCmd (cmd )
86
- cdc := clientCtx .Codec
87
-
88
- serverCtx := server .GetServerContextFromCmd (cmd )
89
- config := serverCtx .Config
90
-
91
- config .SetRoot (clientCtx .HomeDir )
92
-
93
- addr , err := sdk .AccAddressFromBech32 (args [0 ])
94
- if err != nil {
95
- inBuf := bufio .NewReader (cmd .InOrStdin ())
96
- keyringBackend , err := cmd .Flags ().GetString (flags .FlagKeyringBackend )
97
- if err != nil {
98
- return err
99
- }
100
-
101
- // attempt to lookup address from Keybase if no address was provided
102
- kb , err := keyring .New (sdk .KeyringServiceName (), keyringBackend , clientCtx .HomeDir , inBuf , clientCtx .Codec )
103
- if err != nil {
104
- return err
105
- }
106
-
107
- info , err := kb .Key (args [0 ])
108
- if err != nil {
109
- return fmt .Errorf ("failed to get address from Keybase: %w" , err )
110
- }
111
-
112
- addr , _ = info .GetAddress ()
113
- }
114
-
115
- // create concrete account type based on input parameters
116
- var genAccount authtypes.GenesisAccount
117
-
118
- coins , err := sdk .ParseCoinsNormalized (args [1 ])
119
- if err != nil {
120
- return fmt .Errorf ("failed to parse coins: %w" , err )
121
- }
122
-
123
- balances := banktypes.Balance {Address : addr .String (), Coins : coins .Sort ()}
124
-
125
- /*
126
-
127
- vestingStart, _ := cmd.Flags().GetInt64(flagVestingStart)
128
- vestingEnd, _ := cmd.Flags().GetInt64(flagVestingEnd)
129
- vestingAmtStr, _ := cmd.Flags().GetString(flagVestingAmt)
130
-
131
- vestingAmt, err := sdk.ParseCoins(vestingAmtStr)
132
- if err != nil {
133
- return fmt.Errorf("failed to parse vesting amount: %w", err)
134
- }
135
-
136
- baseAccount := authtypes.NewBaseAccount(addr, nil, 0, 0)
137
-
138
- if !vestingAmt.IsZero() {
139
- baseVestingAccount := authvesting.NewBaseVestingAccount(baseAccount, vestingAmt.Sort(), vestingEnd)
140
-
141
- if (balances.Coins.IsZero() && !baseVestingAccount.OriginalVesting.IsZero()) ||
142
- baseVestingAccount.OriginalVesting.IsAnyGT(balances.Coins) {
143
- return errors.New("vesting amount cannot be greater than total amount")
144
- }
145
-
146
- switch {
147
- case vestingStart != 0 && vestingEnd != 0:
148
- genAccount = authvesting.NewContinuousVestingAccountRaw(baseVestingAccount, vestingStart)
149
-
150
- case vestingEnd != 0:
151
- genAccount = authvesting.NewDelayedVestingAccountRaw(baseVestingAccount)
152
-
153
- default:
154
- return errors.New("invalid vesting parameters; must supply start and end time or end time")
155
- }
156
- } else {
157
- genAccount = baseAccount
158
- }
159
- */
160
-
161
- // TODO: If vesting is enabled, should remove following lines:
162
- baseAccount := authtypes .NewBaseAccount (addr , nil , 0 , 0 )
163
- genAccount = baseAccount
164
-
165
- if err := genAccount .Validate (); err != nil {
166
- return fmt .Errorf ("failed to validate new genesis account: %w" , err )
167
- }
168
-
169
- genFile := config .GenesisFile ()
170
- appState , genDoc , err := genutiltypes .GenesisStateFromGenFile (genFile )
171
- if err != nil {
172
- return fmt .Errorf ("failed to unmarshal genesis state: %w" , err )
173
- }
174
-
175
- authGenState := authtypes .GetGenesisStateFromAppState (cdc , appState )
176
-
177
- accs , err := authtypes .UnpackAccounts (authGenState .Accounts )
178
- if err != nil {
179
- return fmt .Errorf ("failed to get accounts from any: %w" , err )
180
- }
181
-
182
- if accs .Contains (addr ) {
183
- return fmt .Errorf ("cannot add account at existing address %s" , addr )
184
- }
185
-
186
- // Add the new account to the set of genesis accounts and sanitize the
187
- // accounts afterwards.
188
- accs = append (accs , genAccount )
189
- accs = authtypes .SanitizeGenesisAccounts (accs )
190
-
191
- genAccs , err := authtypes .PackAccounts (accs )
192
- if err != nil {
193
- return fmt .Errorf ("failed to convert accounts into any's: %w" , err )
194
- }
195
- authGenState .Accounts = genAccs
196
-
197
- authGenStateBz , err := cdc .MarshalJSON (& authGenState )
198
- if err != nil {
199
- return fmt .Errorf ("failed to marshal auth genesis state: %w" , err )
200
- }
201
-
202
- appState [authtypes .ModuleName ] = authGenStateBz
203
-
204
- bankGenState := banktypes .GetGenesisStateFromAppState (cdc , appState )
205
- bankGenState .Balances = append (bankGenState .Balances , balances )
206
- bankGenState .Balances = banktypes .SanitizeGenesisBalances (bankGenState .Balances )
207
-
208
- bankGenStateBz , err := cdc .MarshalJSON (bankGenState )
209
- if err != nil {
210
- return fmt .Errorf ("failed to marshal bank genesis state: %w" , err )
211
- }
212
-
213
- appState [banktypes .ModuleName ] = bankGenStateBz
214
-
215
- appStateJSON , err := json .Marshal (appState )
216
- if err != nil {
217
- return fmt .Errorf ("failed to marshal application genesis state: %w" , err )
218
- }
219
-
220
- genDoc .AppState = appStateJSON
221
- return genutil .ExportGenesisFile (genDoc , genFile )
222
- },
223
- }
224
-
225
- cmd .Flags ().String (flags .FlagHome , defaultNodeHome , "The application home directory" )
226
- // cmd.Flags().String(flags.FlagKeyringBackend, flags.DefaultKeyringBackend, "Select keyring's backend (os|file|kwallet|pass|test)")
227
- // cmd.Flags().String(flagClientHome, defaultClientHome, "client's home directory")
228
- // cmd.Flags().String(flagVestingAmt, "", "amount of coins for vesting accounts")
229
- // cmd.Flags().Uint64(flagVestingStart, 0, "schedule start time (unix epoch) for vesting accounts")
230
- // cmd.Flags().Uint64(flagVestingEnd, 0, "schedule end time (unix epoch) for vesting accounts")
231
- flags .AddQueryFlagsToCmd (cmd )
232
-
233
- return cmd
234
- }
235
-
236
39
func AddGenesisAccountCmd (defaultNodeHome string , eCfg app.EncodingConfig ) * cobra.Command {
237
40
addressCodec := eCfg .TxConfig .SigningContext ().AddressCodec ()
238
41
cmd := & cobra.Command {
@@ -258,7 +61,6 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa
258
61
259
62
var kr keyring.Keyring
260
63
addr , err := addressCodec .StringToBytes (args [0 ])
261
- // fmt.Fprintf(os.Stderr, "address: [%s]\n", string(addr))
262
64
if err != nil {
263
65
inBuf := bufio .NewReader (cmd .InOrStdin ())
264
66
keyringBackend , _ := cmd .Flags ().GetString (flags .FlagKeyringBackend )
@@ -267,7 +69,6 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa
267
69
var err error
268
70
kr , err = keyring .New (sdk .KeyringServiceName (), keyringBackend , clientCtx .HomeDir , inBuf , clientCtx .Codec )
269
71
if err != nil {
270
- // panic(err)
271
72
return err
272
73
}
273
74
} else {
@@ -276,13 +77,11 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa
276
77
if kr != nil {
277
78
k , err := kr .Key (args [0 ])
278
79
if err != nil {
279
- // panic(err)
280
80
return fmt .Errorf ("failed to get address from Keyring: %w" , err )
281
81
}
282
82
283
83
addr , err = k .GetAddress ()
284
84
if err != nil {
285
- // panic(err)
286
85
return err
287
86
}
288
87
}
@@ -320,21 +119,6 @@ func AddGenesisAccount(
320
119
vestingStart , vestingEnd int64 ,
321
120
moduleName string ,
322
121
) error {
323
- // Added for debug purposes
324
- // fmt.Fprintln(os.Stderr, "------------- AddGenesisAccount --------------")
325
-
326
- // if tCodec, ok := cdc.(*codec.ProtoCodec); ok {
327
- // ir := tCodec.InterfaceRegistry()
328
- // ia := ir.ListAllInterfaces()
329
- // fmt.Fprintf(os.Stderr, "* AddGenesisAccount Codec inspection: %s\n", reflect.ValueOf(cdc).Type())
330
- // fmt.Fprintf(os.Stderr, "* AddGenesisAccount Interface Regist: %s\n", reflect.ValueOf(ir).Type())
331
- // for _, i := range ia {
332
- // ii := ir.ListImplementations(i)
333
- // fmt.Fprintf(os.Stderr, "\t%s -> %s\n", i, ii)
334
- // }
335
- // fmt.Fprintln(os.Stderr, "----------------------------------------------")
336
- // }
337
-
338
122
coins , err := sdk .ParseCoinsNormalized (amountStr )
339
123
if err != nil {
340
124
return fmt .Errorf ("failed to parse coins: %w" , err )
@@ -351,7 +135,8 @@ func AddGenesisAccount(
351
135
balances := banktypes.Balance {Address : accAddr .String (), Coins : coins .Sort ()}
352
136
baseAccount := authtypes .NewBaseAccount (accAddr , nil , 0 , 0 )
353
137
354
- if ! vestingAmt .IsZero () {
138
+ switch {
139
+ case ! vestingAmt .IsZero ():
355
140
baseVestingAccount , err := authvesting .NewBaseVestingAccount (baseAccount , vestingAmt .Sort (), vestingEnd )
356
141
if err != nil {
357
142
return fmt .Errorf ("failed to create base vesting account: %w" , err )
@@ -372,9 +157,9 @@ func AddGenesisAccount(
372
157
default :
373
158
return errors .New ("invalid vesting parameters; must supply start and end time or end time" )
374
159
}
375
- } else if moduleName != "" {
160
+ case moduleName != "" :
376
161
genAccount = authtypes .NewEmptyModuleAccount (moduleName , authtypes .Burner , authtypes .Minter )
377
- } else {
162
+ default :
378
163
genAccount = baseAccount
379
164
}
380
165
0 commit comments