Added CreateNewAccount, RenameAccount commands
This commit is contained in:
parent
67fc6fa645
commit
47d862e482
2 changed files with 209 additions and 0 deletions
183
cmds.go
183
cmds.go
|
@ -18,6 +18,12 @@ const (
|
||||||
Authenticate the websocket with the RPC server. This is only required if the
|
Authenticate the websocket with the RPC server. This is only required if the
|
||||||
credentials were not already supplied via HTTP auth headers. It must be the
|
credentials were not already supplied via HTTP auth headers. It must be the
|
||||||
first command sent or you will be disconnected.`
|
first command sent or you will be disconnected.`
|
||||||
|
|
||||||
|
createNewAccountHelp = `createnewaccount "accountname"
|
||||||
|
Create a new account with the given name.`
|
||||||
|
|
||||||
|
renameAccountHelp = `renameaccount "oldname" "newname"
|
||||||
|
Rename an account to the given new name.`
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
@ -25,6 +31,8 @@ func init() {
|
||||||
authenticateHelp)
|
authenticateHelp)
|
||||||
btcjson.RegisterCustomCmd("createencryptedwallet",
|
btcjson.RegisterCustomCmd("createencryptedwallet",
|
||||||
parseCreateEncryptedWalletCmd, nil, `TODO(jrick) fillmein`)
|
parseCreateEncryptedWalletCmd, nil, `TODO(jrick) fillmein`)
|
||||||
|
btcjson.RegisterCustomCmd("createnewaccount",
|
||||||
|
parseCreateNewAccountCmd, nil, createNewAccountHelp)
|
||||||
btcjson.RegisterCustomCmd("exportwatchingwallet",
|
btcjson.RegisterCustomCmd("exportwatchingwallet",
|
||||||
parseExportWatchingWalletCmd, nil, `TODO(jrick) fillmein`)
|
parseExportWatchingWalletCmd, nil, `TODO(jrick) fillmein`)
|
||||||
btcjson.RegisterCustomCmd("getbestblock", parseGetBestBlockCmd,
|
btcjson.RegisterCustomCmd("getbestblock", parseGetBestBlockCmd,
|
||||||
|
@ -48,6 +56,8 @@ func init() {
|
||||||
nil, `TODO(jrick) fillmein`)
|
nil, `TODO(jrick) fillmein`)
|
||||||
btcjson.RegisterCustomCmd("recoveraddresses", parseRecoverAddressesCmd,
|
btcjson.RegisterCustomCmd("recoveraddresses", parseRecoverAddressesCmd,
|
||||||
nil, `TODO(jrick) fillmein`)
|
nil, `TODO(jrick) fillmein`)
|
||||||
|
btcjson.RegisterCustomCmd("renameaccount", parseRenameAccountCmd,
|
||||||
|
nil, renameAccountHelp)
|
||||||
btcjson.RegisterCustomCmd("rescan", parseRescanCmd,
|
btcjson.RegisterCustomCmd("rescan", parseRescanCmd,
|
||||||
nil, `TODO(jrick) fillmein`)
|
nil, `TODO(jrick) fillmein`)
|
||||||
btcjson.RegisterCustomCmd("walletislocked", parseWalletIsLockedCmd,
|
btcjson.RegisterCustomCmd("walletislocked", parseWalletIsLockedCmd,
|
||||||
|
@ -609,6 +619,96 @@ func (cmd *RecoverAddressesCmd) UnmarshalJSON(b []byte) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RenameAccountCmd is a type handling custom marshaling and
|
||||||
|
// unmarshaling of renameaccount JSON websocket extension
|
||||||
|
// commands.
|
||||||
|
type RenameAccountCmd struct {
|
||||||
|
id interface{}
|
||||||
|
OldAccount string
|
||||||
|
NewAccount string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enforce that RenameAccountCmd satisifies the btcjson.Cmd interface.
|
||||||
|
var _ btcjson.Cmd = &RenameAccountCmd{}
|
||||||
|
|
||||||
|
// NewRenameAccountCmd creates a new GetCurrentNetCmd.
|
||||||
|
func NewRenameAccountCmd(id interface{}, oldaccount, newaccount string) *RenameAccountCmd {
|
||||||
|
return &RenameAccountCmd{
|
||||||
|
id: id,
|
||||||
|
OldAccount: oldaccount,
|
||||||
|
NewAccount: newaccount,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// parseRenameAccountCmd parses a RawCmd into a concrete type satisifying
|
||||||
|
// the btcjson.Cmd interface. This is used when registering the custom
|
||||||
|
// command with the btcjson parser.
|
||||||
|
func parseRenameAccountCmd(r *btcjson.RawCmd) (btcjson.Cmd, error) {
|
||||||
|
if len(r.Params) != 2 {
|
||||||
|
return nil, btcjson.ErrWrongNumberOfParams
|
||||||
|
}
|
||||||
|
|
||||||
|
var oldaccount string
|
||||||
|
if err := json.Unmarshal(r.Params[0], &oldaccount); err != nil {
|
||||||
|
return nil, errors.New("first parameter 'oldaccount' must be " +
|
||||||
|
"a string: " + err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
var newaccount string
|
||||||
|
if err := json.Unmarshal(r.Params[1], &newaccount); err != nil {
|
||||||
|
return nil, errors.New("second parameter 'newaccount' must " +
|
||||||
|
"be a string: " + err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
return NewRenameAccountCmd(r.Id, oldaccount, newaccount), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Id satisifies the Cmd interface by returning the ID of the command.
|
||||||
|
func (cmd *RenameAccountCmd) Id() interface{} {
|
||||||
|
return cmd.id
|
||||||
|
}
|
||||||
|
|
||||||
|
// Method satisfies the Cmd interface by returning the RPC method.
|
||||||
|
func (cmd *RenameAccountCmd) Method() string {
|
||||||
|
return "renameaccount"
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
|
||||||
|
func (cmd *RenameAccountCmd) MarshalJSON() ([]byte, error) {
|
||||||
|
params := []interface{}{
|
||||||
|
cmd.OldAccount,
|
||||||
|
cmd.NewAccount,
|
||||||
|
}
|
||||||
|
|
||||||
|
raw, err := btcjson.NewRawCmd(cmd.id, cmd.Method(), params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(raw)
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
||||||
|
// the Cmd interface.
|
||||||
|
func (cmd *RenameAccountCmd) UnmarshalJSON(b []byte) error {
|
||||||
|
// Unmarshal into a RawCmd.
|
||||||
|
var r btcjson.RawCmd
|
||||||
|
if err := json.Unmarshal(b, &r); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
newCmd, err := parseRenameAccountCmd(&r)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
concreteCmd, ok := newCmd.(*RenameAccountCmd)
|
||||||
|
if !ok {
|
||||||
|
return btcjson.ErrInternal
|
||||||
|
}
|
||||||
|
*cmd = *concreteCmd
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// OutPoint describes a transaction outpoint that will be marshalled to and
|
// OutPoint describes a transaction outpoint that will be marshalled to and
|
||||||
// from JSON.
|
// from JSON.
|
||||||
type OutPoint struct {
|
type OutPoint struct {
|
||||||
|
@ -1163,6 +1263,89 @@ func (cmd *CreateEncryptedWalletCmd) UnmarshalJSON(b []byte) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CreateNewAccountCmd is a type handling custom
|
||||||
|
// marshaling and unmarshaling of createnewaccount
|
||||||
|
// JSON websocket extension commands.
|
||||||
|
type CreateNewAccountCmd struct {
|
||||||
|
id interface{}
|
||||||
|
Account string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enforce that CreateNewAccountCmd satisifies the btcjson.Cmd
|
||||||
|
// interface.
|
||||||
|
var _ btcjson.Cmd = &CreateNewAccountCmd{}
|
||||||
|
|
||||||
|
// NewCreateNewAccountCmd creates a new CreateNewAccountCmd.
|
||||||
|
func NewCreateNewAccountCmd(id interface{}, account string) *CreateNewAccountCmd {
|
||||||
|
return &CreateNewAccountCmd{
|
||||||
|
id: id,
|
||||||
|
Account: account,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// parseCreateNewAccountCmd parses a CreateNewAccountCmd
|
||||||
|
// into a concrete type satisifying the btcjson.Cmd interface.
|
||||||
|
// This is used when registering the custom command with the btcjson
|
||||||
|
// parser.
|
||||||
|
func parseCreateNewAccountCmd(r *btcjson.RawCmd) (btcjson.Cmd, error) {
|
||||||
|
if len(r.Params) != 1 {
|
||||||
|
return nil, btcjson.ErrWrongNumberOfParams
|
||||||
|
}
|
||||||
|
|
||||||
|
var account string
|
||||||
|
if err := json.Unmarshal(r.Params[0], &account); err != nil {
|
||||||
|
return nil, errors.New("first parameter 'account' must be " +
|
||||||
|
"a string: " + err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
return NewCreateNewAccountCmd(r.Id, account), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Id satisifies the Cmd interface by returning the ID of the command.
|
||||||
|
func (cmd *CreateNewAccountCmd) Id() interface{} {
|
||||||
|
return cmd.id
|
||||||
|
}
|
||||||
|
|
||||||
|
// Method satisfies the Cmd interface by returning the RPC method.
|
||||||
|
func (cmd *CreateNewAccountCmd) Method() string {
|
||||||
|
return "createnewaccount"
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
|
||||||
|
func (cmd *CreateNewAccountCmd) MarshalJSON() ([]byte, error) {
|
||||||
|
params := []interface{}{
|
||||||
|
cmd.Account,
|
||||||
|
}
|
||||||
|
|
||||||
|
raw, err := btcjson.NewRawCmd(cmd.id, cmd.Method(), params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(raw)
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
||||||
|
// the Cmd interface.
|
||||||
|
func (cmd *CreateNewAccountCmd) UnmarshalJSON(b []byte) error {
|
||||||
|
// Unmarshal into a RawCmd.
|
||||||
|
var r btcjson.RawCmd
|
||||||
|
if err := json.Unmarshal(b, &r); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
newCmd, err := parseCreateNewAccountCmd(&r)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
concreteCmd, ok := newCmd.(*CreateNewAccountCmd)
|
||||||
|
if !ok {
|
||||||
|
return btcjson.ErrInternal
|
||||||
|
}
|
||||||
|
*cmd = *concreteCmd
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// WalletIsLockedCmd is a type handling custom marshaling and
|
// WalletIsLockedCmd is a type handling custom marshaling and
|
||||||
// unmarshaling of walletislocked JSON websocket extension commands.
|
// unmarshaling of walletislocked JSON websocket extension commands.
|
||||||
type WalletIsLockedCmd struct {
|
type WalletIsLockedCmd struct {
|
||||||
|
|
26
cmds_test.go
26
cmds_test.go
|
@ -30,6 +30,18 @@ var cmdtests = []struct {
|
||||||
Passphrase: "banana",
|
Passphrase: "banana",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "createnewaccount",
|
||||||
|
f: func() (btcjson.Cmd, error) {
|
||||||
|
return NewCreateNewAccountCmd(
|
||||||
|
float64(1),
|
||||||
|
"account"), nil
|
||||||
|
},
|
||||||
|
result: &CreateNewAccountCmd{
|
||||||
|
id: float64(1),
|
||||||
|
Account: "account",
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "getbestblock",
|
name: "getbestblock",
|
||||||
f: func() (btcjson.Cmd, error) {
|
f: func() (btcjson.Cmd, error) {
|
||||||
|
@ -182,6 +194,20 @@ var cmdtests = []struct {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "renameaccount",
|
||||||
|
f: func() (btcjson.Cmd, error) {
|
||||||
|
return NewRenameAccountCmd(
|
||||||
|
float64(1),
|
||||||
|
"old",
|
||||||
|
"new"), nil
|
||||||
|
},
|
||||||
|
result: &RenameAccountCmd{
|
||||||
|
id: float64(1),
|
||||||
|
OldAccount: "old",
|
||||||
|
NewAccount: "new",
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "rescan no optargs",
|
name: "rescan no optargs",
|
||||||
f: func() (btcjson.Cmd, error) {
|
f: func() (btcjson.Cmd, error) {
|
||||||
|
|
Loading…
Reference in a new issue