lbcd/jsoncmd.go
Dave Collins 84cb4c7130 Export new function ConvertCreateRawTxParams.
The inputs to the createrawtransaction command are JSON strings, however
the NewCreateRawTransactionCmd function takes concrete types.  Thus,
callers which deal with the raw JSON need a method to perform the
validation and conversion.  This logic is the same as what needs to happen
when unmashalling a full JSON-RPC command, so this commit factors that
logic out into a separate function and exports it.
2014-01-03 10:25:06 -06:00

6705 lines
157 KiB
Go

// Copyright (c) 2013 Conformal Systems LLC.
// Use of this source code is governed by an ISC
// license that can be found in the LICENSE file.
package btcjson
import (
"encoding/json"
"errors"
)
// ErrTooManyOptArgs describes an error where too many optional
// arguments were passed when creating a new Cmd.
var ErrTooManyOptArgs = errors.New("too many optional arguments")
// ErrWrongNumberOfParams describes an error where an incorrect number of
// parameters are found in an unmarshalled command.
var ErrWrongNumberOfParams = errors.New("incorrect number of parameters")
// Cmd is an interface for all Bitcoin JSON API commands to marshal
// and unmarshal as a JSON object.
type Cmd interface {
json.Marshaler
json.Unmarshaler
Id() interface{}
Method() string
}
// RawCmd is a type for unmarshaling raw commands into before the
// custom command type is set. Other packages may register their
// own RawCmd to Cmd converters by calling RegisterCustomCmd.
type RawCmd struct {
Jsonrpc string `json:"jsonrpc"`
Id interface{} `json:"id"`
Method string `json:"method"`
Params []interface{} `json:"params"`
}
// ParseRawCmd is a function to create a custom Cmd from a RawCmd.
type RawCmdParser func(*RawCmd) (Cmd, error)
var customCmds = make(map[string]RawCmdParser)
// RegisterCustomCmd registers a custom RawCmd parsing func for a
// non-standard Bitcoin command.
func RegisterCustomCmd(method string, parser RawCmdParser) {
customCmds[method] = parser
}
// ParseMarshaledCmd parses a raw command and unmarshals as a Cmd.
// Code that reads and handles commands should switch on the type and
// type assert as the particular commands supported by the program.
//
// In all cases where b is a valid JSON-RPC message, and unmarshalling
// succeeds, a non-nil Cmd will always be returned. This even
// includes error cases where parsing the message into a concrete Cmd
// type fails. This behavior allows RPC server code to reply back with
// a detailed error using the Id and Method functions of the Cmd
// interface.
func ParseMarshaledCmd(b []byte) (Cmd, error) {
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return nil, err
}
// Return a custom command type for recognized
var cmd Cmd = nil
switch r.Method {
case "addmultisigaddress":
cmd = new(AddMultisigAddressCmd)
case "addnode":
cmd = new(AddNodeCmd)
case "backupwallet":
cmd = new(BackupWalletCmd)
case "createmultisig":
cmd = new(CreateMultisigCmd)
case "createrawtransaction":
cmd = new(CreateRawTransactionCmd)
case "debuglevel":
cmd = new(DebugLevelCmd)
case "decoderawtransaction":
cmd = new(DecodeRawTransactionCmd)
case "decodescript":
cmd = new(DecodeScriptCmd)
case "dumpprivkey":
cmd = new(DumpPrivKeyCmd)
case "dumpwallet":
cmd = new(DumpWalletCmd)
case "encryptwallet":
cmd = new(EncryptWalletCmd)
case "getaccount":
cmd = new(GetAccountCmd)
case "getaccountaddress":
cmd = new(GetAccountAddressCmd)
case "getaddednodeinfo":
cmd = new(GetAddedNodeInfoCmd)
case "getaddressesbyaccount":
cmd = new(GetAddressesByAccountCmd)
case "getbalance":
cmd = new(GetBalanceCmd)
case "getbestblockhash":
cmd = new(GetBestBlockHashCmd)
case "getblock":
cmd = new(GetBlockCmd)
case "getblockcount":
cmd = new(GetBlockCountCmd)
case "getblockhash":
cmd = new(GetBlockHashCmd)
case "getblocktemplate":
cmd = new(GetBlockTemplateCmd)
case "getconnectioncount":
cmd = new(GetConnectionCountCmd)
case "getdifficulty":
cmd = new(GetDifficultyCmd)
case "getgenerate":
cmd = new(GetGenerateCmd)
case "gethashespersec":
cmd = new(GetHashesPerSecCmd)
case "getinfo":
cmd = new(GetInfoCmd)
case "getmininginfo":
cmd = new(GetMiningInfoCmd)
case "getnettotals":
cmd = new(GetNetTotalsCmd)
case "getnetworkhashps":
cmd = new(GetNetworkHashPSCmd)
case "getnewaddress":
cmd = new(GetNewAddressCmd)
case "getpeerinfo":
cmd = new(GetPeerInfoCmd)
case "getrawchangeaddress":
cmd = new(GetRawChangeAddressCmd)
case "getrawmempool":
cmd = new(GetRawMempoolCmd)
case "getrawtransaction":
cmd = new(GetRawTransactionCmd)
case "getreceivedbyaccount":
cmd = new(GetReceivedByAccountCmd)
case "getreceivedbyaddress":
cmd = new(GetReceivedByAddressCmd)
case "gettransaction":
cmd = new(GetTransactionCmd)
case "gettxout":
cmd = new(GetTxOutCmd)
case "gettxoutsetinfo":
cmd = new(GetTxOutSetInfoCmd)
case "getwork":
cmd = new(GetWorkCmd)
case "help":
cmd = new(HelpCmd)
case "importprivkey":
cmd = new(ImportPrivKeyCmd)
case "importwallet":
cmd = new(ImportWalletCmd)
case "keypoolrefill":
cmd = new(KeyPoolRefillCmd)
case "listaccounts":
cmd = new(ListAccountsCmd)
case "listaddressgroupings":
cmd = new(ListAddressGroupingsCmd)
case "listlockunspent":
cmd = new(ListLockUnspentCmd)
case "listreceivedbyaccount":
cmd = new(ListReceivedByAccountCmd)
case "listreceivedbyaddress":
cmd = new(ListReceivedByAddressCmd)
case "listsinceblock":
cmd = new(ListSinceBlockCmd)
case "listtransactions":
cmd = new(ListTransactionsCmd)
case "listunspent":
cmd = new(ListUnspentCmd)
case "lockunspent":
cmd = new(LockUnspentCmd)
case "move":
cmd = new(MoveCmd)
case "ping":
cmd = new(PingCmd)
case "sendfrom":
cmd = new(SendFromCmd)
case "sendmany":
cmd = new(SendManyCmd)
case "sendrawtransaction":
cmd = new(SendRawTransactionCmd)
case "sendtoaddress":
cmd = new(SendToAddressCmd)
case "setaccount":
cmd = new(SetAccountCmd)
case "setgenerate":
cmd = new(SetGenerateCmd)
case "settxfee":
cmd = new(SetTxFeeCmd)
case "signmessage":
cmd = new(SignMessageCmd)
case "signrawtransaction":
cmd = new(SignRawTransactionCmd)
case "stop":
cmd = new(StopCmd)
case "submitblock":
cmd = new(SubmitBlockCmd)
case "validateaddress":
cmd = new(ValidateAddressCmd)
case "verifychain":
cmd = new(VerifyChainCmd)
case "verifymessage":
cmd = new(VerifyMessageCmd)
case "walletlock":
cmd = new(WalletLockCmd)
case "walletpassphrase":
cmd = new(WalletPassphraseCmd)
case "walletpassphrasechange":
cmd = new(WalletPassphraseChangeCmd)
default:
// None of the standard Bitcoin RPC methods matched. Try
// registered custom commands.
if f, ok := customCmds[r.Method]; ok {
return f(&r)
}
}
if cmd == nil {
cmd = newUnparsableCmd(r.Id, r.Method)
return cmd, ErrMethodNotFound
}
// If we get here we have a cmd that can unmarshal itself.
if err := cmd.UnmarshalJSON(b); err != nil {
cmd = newUnparsableCmd(r.Id, r.Method)
return cmd, err
}
return cmd, nil
}
// unparsableCmd is a type representing a valid unmarshalled JSON-RPC
// request, but is used for cases where parsing the RPC request into a
// concrete Cmd type failed, either due to an unknown method, or trying
// to parse incorrect arguments for a known method.
type unparsableCmd struct {
id interface{}
method string
}
// Enforce that unparsableCmd satisifies the Cmd interface.
var _ Cmd = &unparsableCmd{}
func newUnparsableCmd(id interface{}, method string) *unparsableCmd {
return &unparsableCmd{
id: id,
method: method,
}
}
// Id satisifies the Cmd interface by returning the id of the command.
func (cmd *unparsableCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *unparsableCmd) Method() string {
return cmd.method
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *unparsableCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
raw := RawCmd{
Jsonrpc: "1.0",
Method: cmd.method,
Id: cmd.id,
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *unparsableCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
cmd.id = r.Id
cmd.method = r.Method
return nil
}
// AddMultisigAddressCmd is a type handling custom marshaling and
// unmarshaling of addmultisigaddress JSON RPC commands.
type AddMultisigAddressCmd struct {
id interface{}
NRequired int
Keys []string
Account string
}
// Enforce that AddMultisigAddress satisifies the Cmd interface.
var _ Cmd = &AddMultisigAddressCmd{}
// NewAddMultisigAddressCmd creates a new AddMultisigAddressCmd,
// parsing the optional arguments optArgs which may be either empty or an
// optional account name.
func NewAddMultisigAddressCmd(id interface{}, nRequired int, keys []string,
optArgs ...string) (*AddMultisigAddressCmd, error) {
// Optional parameters set to their defaults.
var account string
if len(optArgs) > 0 {
if len(optArgs) > 1 {
return nil, ErrTooManyOptArgs
}
account = optArgs[0]
}
return &AddMultisigAddressCmd{
id: id,
NRequired: nRequired,
Keys: keys,
Account: account,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *AddMultisigAddressCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *AddMultisigAddressCmd) Method() string {
return "addmultisigaddress"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *AddMultisigAddressCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
raw := RawCmd{
Jsonrpc: "1.0",
Method: "addmultisigaddress",
Id: cmd.id,
Params: []interface{}{
cmd.NRequired,
cmd.Keys,
},
}
if cmd.Account != "" {
raw.Params = append(raw.Params, cmd.Account)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *AddMultisigAddressCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) < 2 || len(r.Params) > 3 {
return ErrWrongNumberOfParams
}
nRequired, ok := r.Params[0].(float64)
if !ok {
return errors.New("first parameter nrequired must be a number")
}
ikeys, ok := r.Params[1].([]interface{})
if !ok {
return errors.New("second parameter keys must be an array")
}
keys := make([]string, len(ikeys))
for i, val := range ikeys {
keys[i], ok = val.(string)
if !ok {
return errors.New("second parameter keys must be an array of strings")
}
}
var account string
if len(r.Params) > 2 {
account, ok = r.Params[2].(string)
if !ok {
return errors.New("third (optional) parameter account must be a string")
}
}
newCmd, err := NewAddMultisigAddressCmd(r.Id, int(nRequired), keys,
account)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// AddNodeCmd is a type handling custom marshaling and
// unmarshaling of addmultisigaddress JSON RPC commands.
type AddNodeCmd struct {
id interface{}
Addr string
SubCmd string // One of "add","remove","onetry". TODO(oga) enum?
}
// Enforce that AddNodeCmd satisifies the Cmd interface.
var _ Cmd = &AddNodeCmd{}
// NewAddNodeCmd creates a new AddNodeCmd for the given address and subcommand.
func NewAddNodeCmd(id interface{}, addr string, subcmd string) (
*AddNodeCmd, error) {
switch subcmd {
case "add":
// fine
case "remove":
// fine
case "onetry":
// fine
default:
return nil, errors.New("Invalid subcommand for addnode")
}
return &AddNodeCmd{
id: id,
Addr: addr,
SubCmd: subcmd,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *AddNodeCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *AddNodeCmd) Method() string {
return "addnode"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *AddNodeCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: "addnode",
Id: cmd.id,
Params: []interface{}{
cmd.Addr,
cmd.SubCmd,
},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *AddNodeCmd) UnmarshalJSON(b []byte) error {
// Unmarshal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 2 {
return ErrWrongNumberOfParams
}
addr, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter addr must be a string")
}
subcmd, ok := r.Params[1].(string)
if !ok {
return errors.New("second parameter subcmd must be a string")
}
newCmd, err := NewAddNodeCmd(r.Id, addr, subcmd)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// BackupWalletCmd is a type handling custom marshaling and
// unmarshaling of backupwallet JSON RPC commands.
type BackupWalletCmd struct {
id interface{}
Destination string
}
// Enforce that BackupWalletCmd satisifies the Cmd interface.
var _ Cmd = &BackupWalletCmd{}
// NewBackupWalletCmd creates a new BackupWalletCmd.
func NewBackupWalletCmd(id interface{}, path string) (*BackupWalletCmd, error) {
return &BackupWalletCmd{
id: id,
Destination: path,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *BackupWalletCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *BackupWalletCmd) Method() string {
return "backupwallet"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *BackupWalletCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: "backupwallet",
Id: cmd.id,
Params: []interface{}{
cmd.Destination,
},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *BackupWalletCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 1 {
return ErrWrongNumberOfParams
}
destination, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter desitnation must be a string")
}
newCmd, err := NewBackupWalletCmd(r.Id, destination)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// CreateMultisigCmd is a type handling custom marshaling and
// unmarshaling of createmultisig JSON RPC commands.
type CreateMultisigCmd struct {
id interface{}
NRequired int
Keys []string
}
// Enforce that AddMultisigAddress satisifies the Cmd interface.
var _ Cmd = &CreateMultisigCmd{}
// NewCreateMultisigCmd creates a new CreateMultisigCmd,
// parsing the optional arguments optArgs.
func NewCreateMultisigCmd(id interface{}, nRequired int, keys []string) (*CreateMultisigCmd, error) {
return &CreateMultisigCmd{
id: id,
NRequired: nRequired,
Keys: keys,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *CreateMultisigCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *CreateMultisigCmd) Method() string {
return "createmultisig"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *CreateMultisigCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: "createmultisig",
Id: cmd.id,
Params: []interface{}{
cmd.NRequired,
cmd.Keys,
},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *CreateMultisigCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 2 {
return ErrWrongNumberOfParams
}
nRequired, ok := r.Params[0].(float64)
if !ok {
return errors.New("first parameter nrequired must be a number")
}
ikeys, ok := r.Params[1].([]interface{})
if !ok {
return errors.New("second parameter keys must be an array")
}
keys := make([]string, len(ikeys))
for i, val := range ikeys {
keys[i], ok = val.(string)
if !ok {
return errors.New("second parameter keys must be an array of strings")
}
}
newCmd, err := NewCreateMultisigCmd(r.Id, int(nRequired), keys)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// TransactionInput represents the inputs to a transaction. Specifically a
// transactionsha and output number pair.
type TransactionInput struct {
Txid string `json:"txid"`
Vout int `json:"vout"`
}
// ConvertCreateRawTxParams validates and converts the passed parameters from
// raw interfaces into concrete structs. This is a separate function since
// the createrawtransaction command parameters are caller-crafted JSON as
// opposed to machine generated JSON as is the case for most commands.
func ConvertCreateRawTxParams(inputs, amounts interface{}) ([]TransactionInput, map[string]int64, error) {
iinputs, ok := inputs.([]interface{})
if !ok {
return nil, nil, errors.New("first parameter inputs must be an array")
}
rinputs := make([]TransactionInput, len(iinputs))
for i, iv := range iinputs {
v, ok := iv.(map[string]interface{})
if !ok {
return nil, nil, errors.New("first parameter inputs must be an array of objects")
}
if len(v) != 2 {
return nil, nil, errors.New("input with wrong number of members")
}
txid, ok := v["txid"]
if !ok {
return nil, nil, errors.New("input without txid")
}
rinputs[i].Txid, ok = txid.(string)
if !ok {
return nil, nil, errors.New("input txid isn't a string")
}
vout, ok := v["vout"]
if !ok {
return nil, nil, errors.New("input without vout")
}
fvout, ok := vout.(float64)
if !ok {
return nil, nil, errors.New("input vout not a number")
}
rinputs[i].Vout = int(fvout)
}
famounts, ok := amounts.(map[string]interface{})
if !ok {
return nil, nil, errors.New("second parameter keys must be a map")
}
ramounts := make(map[string]int64)
for k, v := range famounts {
fv, ok := v.(float64)
if !ok {
return nil, nil, errors.New("second parameter keys must be a number map")
}
var err error
ramounts[k], err = JSONToAmount(fv)
if err != nil {
return nil, nil, err
}
}
return rinputs, ramounts, nil
}
// CreateRawTransactionCmd is a type handling custom marshaling and
// unmarshaling of createrawtransaction JSON RPC commands.
type CreateRawTransactionCmd struct {
id interface{}
Inputs []TransactionInput
Amounts map[string]int64
}
// Enforce that CreateRawTransactionCmd satisifies the Cmd interface.
var _ Cmd = &CreateRawTransactionCmd{}
// NewCreateRawTransactionCmd creates a new CreateRawTransactionCmd.
func NewCreateRawTransactionCmd(id interface{}, inputs []TransactionInput, amounts map[string]int64) (*CreateRawTransactionCmd, error) {
return &CreateRawTransactionCmd{
id: id,
Inputs: inputs,
Amounts: amounts,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *CreateRawTransactionCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *CreateRawTransactionCmd) Method() string {
return "createrawtransaction"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *CreateRawTransactionCmd) MarshalJSON() ([]byte, error) {
floatAmount := make(map[string]float64)
for k, v := range cmd.Amounts {
floatAmount[k] = float64(v) / 1e8
}
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: "createrawtransaction",
Id: cmd.id,
Params: []interface{}{
cmd.Inputs,
floatAmount,
},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *CreateRawTransactionCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 2 {
return ErrWrongNumberOfParams
}
inputs, amounts, err := ConvertCreateRawTxParams(r.Params[0],
r.Params[1])
if err != nil {
return err
}
newCmd, err := NewCreateRawTransactionCmd(r.Id, inputs, amounts)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// DebugLevelCmd is a type handling custom marshaling and unmarshaling of
// debuglevel JSON RPC commands. This command is not a standard Bitcoin
// command. It is an extension for btcd.
type DebugLevelCmd struct {
id interface{}
LevelSpec string
}
// Enforce that DebugLevelCmd satisifies the Cmd interface.
var _ Cmd = &DebugLevelCmd{}
// NewDebugLevelCmd creates a new DebugLevelCmd. This command is not a standard
// Bitcoin command. It is an extension for btcd.
func NewDebugLevelCmd(id interface{}, levelSpec string) (*DebugLevelCmd, error) {
return &DebugLevelCmd{
id: id,
LevelSpec: levelSpec,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *DebugLevelCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *DebugLevelCmd) Method() string {
return "debuglevel"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *DebugLevelCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: cmd.Method(),
Id: cmd.id,
Params: []interface{}{
cmd.LevelSpec,
},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *DebugLevelCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 1 {
return ErrWrongNumberOfParams
}
levelSpec, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter levelspec must be a string")
}
newCmd, err := NewDebugLevelCmd(r.Id, levelSpec)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// DecodeRawTransactionCmd is a type handling custom marshaling and
// unmarshaling of decoderawtransaction JSON RPC commands.
type DecodeRawTransactionCmd struct {
id interface{}
HexTx string
}
// Enforce that DecodeRawTransactionCmd satisifies the Cmd interface.
var _ Cmd = &DecodeRawTransactionCmd{}
// NewDecodeRawTransactionCmd creates a new DecodeRawTransactionCmd.
func NewDecodeRawTransactionCmd(id interface{}, hextx string) (*DecodeRawTransactionCmd, error) {
return &DecodeRawTransactionCmd{
id: id,
HexTx: hextx,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *DecodeRawTransactionCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *DecodeRawTransactionCmd) Method() string {
return "decoderawtransaction"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *DecodeRawTransactionCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: "decoderawtransaction",
Id: cmd.id,
Params: []interface{}{
cmd.HexTx,
},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *DecodeRawTransactionCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 1 {
return ErrWrongNumberOfParams
}
hextx, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter hextx must be an array of objects")
}
newCmd, err := NewDecodeRawTransactionCmd(r.Id, hextx)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// DecodeScriptCmd is a type handling custom marshaling and
// unmarshaling of decodescript JSON RPC commands.
type DecodeScriptCmd struct {
id interface{}
HexScript string
}
// Enforce that DecodeScriptCmd satisifies the Cmd interface.
var _ Cmd = &DecodeScriptCmd{}
// NewDecodeScriptCmd creates a new DecodeScriptCmd.
func NewDecodeScriptCmd(id interface{}, hexscript string) (*DecodeScriptCmd, error) {
return &DecodeScriptCmd{
id: id,
HexScript: hexscript,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *DecodeScriptCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *DecodeScriptCmd) Method() string {
return "decodescript"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *DecodeScriptCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: "decodescript",
Id: cmd.id,
Params: []interface{}{
cmd.HexScript,
},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *DecodeScriptCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 1 {
return ErrWrongNumberOfParams
}
hexscript, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter hexscript must be an array of objects")
}
newCmd, err := NewDecodeScriptCmd(r.Id, hexscript)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// DumpPrivKeyCmd is a type handling custom marshaling and
// unmarshaling of dumpprivkey JSON RPC commands.
type DumpPrivKeyCmd struct {
id interface{}
Address string
}
// Enforce that DumpPrivKeyCmd satisifies the Cmd interface.
var _ Cmd = &DumpPrivKeyCmd{}
// NewDumpPrivKeyCmd creates a new DumpPrivkeyCmd.
func NewDumpPrivKeyCmd(id interface{}, address string) (*DumpPrivKeyCmd, error) {
return &DumpPrivKeyCmd{
id: id,
Address: address,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *DumpPrivKeyCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *DumpPrivKeyCmd) Method() string {
return "dumpprivkey"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *DumpPrivKeyCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: "dumpprivkey",
Id: cmd.id,
Params: []interface{}{
cmd.Address,
},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *DumpPrivKeyCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 1 {
return ErrWrongNumberOfParams
}
address, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter address must be an array of objects")
}
newCmd, err := NewDumpPrivKeyCmd(r.Id, address)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// DumpWalletCmd is a type handling custom marshaling and
// unmarshaling of dumpwallet JSON RPC commands.
type DumpWalletCmd struct {
id interface{}
Filename string
}
// Enforce that DumpWalletCmd satisifies the Cmd interface.
var _ Cmd = &DumpWalletCmd{}
// NewDumpWalletCmd creates a new DumpPrivkeyCmd.
func NewDumpWalletCmd(id interface{}, filename string) (*DumpWalletCmd, error) {
return &DumpWalletCmd{
id: id,
Filename: filename,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *DumpWalletCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *DumpWalletCmd) Method() string {
return "dumpwallet"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *DumpWalletCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: "dumpwallet",
Id: cmd.id,
Params: []interface{}{
cmd.Filename,
},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *DumpWalletCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 1 {
return ErrWrongNumberOfParams
}
filename, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter filename must be an array of objects")
}
newCmd, err := NewDumpWalletCmd(r.Id, filename)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// EncryptWalletCmd is a type handling custom marshaling and
// unmarshaling of encryptwallet JSON RPC commands.
type EncryptWalletCmd struct {
id interface{}
Passphrase string
}
// Enforce that EncryptWalletCmd satisifies the Cmd interface.
var _ Cmd = &EncryptWalletCmd{}
// NewEncryptWalletCmd creates a new EncryptWalletCmd.
func NewEncryptWalletCmd(id interface{}, passphrase string) (*EncryptWalletCmd, error) {
return &EncryptWalletCmd{
id: id,
Passphrase: passphrase,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *EncryptWalletCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *EncryptWalletCmd) Method() string {
return "encryptwallet"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *EncryptWalletCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: "encryptwallet",
Id: cmd.id,
Params: []interface{}{
cmd.Passphrase,
},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *EncryptWalletCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 1 {
return ErrWrongNumberOfParams
}
passphrase, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter passphrase must be a string")
}
newCmd, err := NewEncryptWalletCmd(r.Id, passphrase)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetAccountCmd is a type handling custom marshaling and
// unmarshaling of getaccount JSON RPC commands.
type GetAccountCmd struct {
id interface{}
Address string
}
// Enforce that GetAccountCmd satisifies the Cmd interface.
var _ Cmd = &GetAccountCmd{}
// NewGetAccountCmd creates a new GetAccountCmd.
func NewGetAccountCmd(id interface{}, address string) (*GetAccountCmd, error) {
return &GetAccountCmd{
id: id,
Address: address,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetAccountCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetAccountCmd) Method() string {
return "getaccount"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetAccountCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: "getaccount",
Id: cmd.id,
Params: []interface{}{
cmd.Address,
},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetAccountCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 1 {
return ErrWrongNumberOfParams
}
address, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter address must be a string")
}
newCmd, err := NewGetAccountCmd(r.Id, address)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetAccountAddressCmd is a type handling custom marshaling and
// unmarshaling of getaccountaddress JSON RPC commands.
type GetAccountAddressCmd struct {
id interface{}
Account string
}
// Enforce that GetAccountAddressCmd satisifies the Cmd interface.
var _ Cmd = &GetAccountAddressCmd{}
// NewGetAccountAddressCmd creates a new GetAccountAddressCmd.
func NewGetAccountAddressCmd(id interface{}, account string) (*GetAccountAddressCmd, error) {
return &GetAccountAddressCmd{
id: id,
Account: account,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetAccountAddressCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetAccountAddressCmd) Method() string {
return "getaccountaddress"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetAccountAddressCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: "getaccountaddress",
Id: cmd.id,
Params: []interface{}{
cmd.Account,
},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetAccountAddressCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 1 {
return ErrWrongNumberOfParams
}
account, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter account must be a string")
}
newCmd, err := NewGetAccountAddressCmd(r.Id, account)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetAddedNodeInfoCmd is a type handling custom marshaling and
// unmarshaling of getaddednodeinfo JSON RPC commands.
type GetAddedNodeInfoCmd struct {
id interface{}
Dns bool
Node string
}
// Enforce that GetAddedNodeInfoCmd satisifies the Cmd interface.
var _ Cmd = &GetAddedNodeInfoCmd{}
// NewGetAddedNodeInfoCmd creates a new GetAddedNodeInfoCmd. Optionally the
// node to be queried may be provided. More than one optonal argument is an
// error.
func NewGetAddedNodeInfoCmd(id interface{}, dns bool, optArgs ...string) (*GetAddedNodeInfoCmd, error) {
var node string
if len(optArgs) > 0 {
if len(optArgs) > 1 {
return nil, ErrTooManyOptArgs
}
node = optArgs[0]
}
return &GetAddedNodeInfoCmd{
id: id,
Dns: dns,
Node: node,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetAddedNodeInfoCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetAddedNodeInfoCmd) Method() string {
return "getaddednodeinfo"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetAddedNodeInfoCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
raw := RawCmd{
Jsonrpc: "1.0",
Method: "getaddednodeinfo",
Id: cmd.id,
Params: []interface{}{
cmd.Dns,
},
}
if cmd.Node != "" {
raw.Params = append(raw.Params, cmd.Node)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetAddedNodeInfoCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) < 1 || len(r.Params) > 2 {
return ErrWrongNumberOfParams
}
dns, ok := r.Params[0].(bool)
if !ok {
return errors.New("first parameter dns must be a bool")
}
var node string
if len(r.Params) == 2 {
node, ok = r.Params[1].(string)
if !ok {
return errors.New("second parameter node must be a string")
}
}
newCmd, err := NewGetAddedNodeInfoCmd(r.Id, dns, node)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetAddressesByAccountCmd is a type handling custom marshaling and
// unmarshaling of getaddressesbyaccount JSON RPC commands.
type GetAddressesByAccountCmd struct {
id interface{}
Account string
}
// Enforce that GetAddressesByAccountCmd satisifies the Cmd interface.
var _ Cmd = &GetAddressesByAccountCmd{}
// NewGetAddressesByAccountCmd creates a new GetAddressesByAccountCmd.
func NewGetAddressesByAccountCmd(id interface{}, account string) (*GetAddressesByAccountCmd, error) {
return &GetAddressesByAccountCmd{
id: id,
Account: account,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetAddressesByAccountCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetAddressesByAccountCmd) Method() string {
return "getaddressesbyaccount"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetAddressesByAccountCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: "getaddressesbyaccount",
Id: cmd.id,
Params: []interface{}{
cmd.Account,
},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetAddressesByAccountCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 1 {
return ErrWrongNumberOfParams
}
account, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter account must be a string")
}
newCmd, err := NewGetAddressesByAccountCmd(r.Id, account)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetBalanceCmd is a type handling custom marshaling and
// unmarshaling of getbalance JSON RPC commands.
type GetBalanceCmd struct {
id interface{}
Account string
MinConf int
}
// Enforce that GetBalanceCmd satisifies the Cmd interface.
var _ Cmd = &GetBalanceCmd{}
// NewGetBalanceCmd creates a new GetBalanceCmd. Optionally a string for account
// and an int for minconf may be provided as arguments.
func NewGetBalanceCmd(id interface{}, optArgs ...interface{}) (*GetBalanceCmd, error) {
var account string
var minconf int = 1
if len(optArgs) > 2 {
return nil, ErrWrongNumberOfParams
}
if len(optArgs) > 0 {
a, ok := optArgs[0].(string)
if !ok {
return nil, errors.New("first optional argument account is not a string")
}
account = a
}
if len(optArgs) > 1 {
m, ok := optArgs[1].(int)
if !ok {
return nil, errors.New("second optional argument minconf is not a int")
}
minconf = m
}
return &GetBalanceCmd{
id: id,
Account: account,
MinConf: minconf,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetBalanceCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetBalanceCmd) Method() string {
return "getbalance"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetBalanceCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "getbalance",
Id: cmd.id,
Params: []interface{}{},
}
if cmd.Account != "" || cmd.MinConf != 1 {
raw.Params = append(raw.Params, cmd.Account)
}
if cmd.MinConf != 1 {
raw.Params = append(raw.Params, cmd.MinConf)
}
// Fill and marshal a RawCmd.
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetBalanceCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 2 {
return ErrWrongNumberOfParams
}
optArgs := make([]interface{}, 0, 2)
if len(r.Params) > 0 {
account, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter account must be a string")
}
optArgs = append(optArgs, account)
}
if len(r.Params) > 1 {
minconf, ok := r.Params[1].(float64)
if !ok {
return errors.New("second optional parameter minconf must be a number")
}
optArgs = append(optArgs, int(minconf))
}
newCmd, err := NewGetBalanceCmd(r.Id, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetBestBlockHashCmd is a type handling custom marshaling and
// unmarshaling of getbestblockhash JSON RPC commands.
type GetBestBlockHashCmd struct {
id interface{}
}
// Enforce that GetBestBlockHashCmd satisifies the Cmd interface.
var _ Cmd = &GetBestBlockHashCmd{}
// NewGetBestBlockHashCmd creates a new GetBestBlockHashCmd.
func NewGetBestBlockHashCmd(id interface{}) (*GetBestBlockHashCmd, error) {
return &GetBestBlockHashCmd{
id: id,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetBestBlockHashCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetBestBlockHashCmd) Method() string {
return "getbestblockhash"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetBestBlockHashCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: "getbestblockhash",
Id: cmd.id,
Params: []interface{}{},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetBestBlockHashCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 0 {
return ErrWrongNumberOfParams
}
newCmd, err := NewGetBestBlockHashCmd(r.Id)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetBlockCmd is a type handling custom marshaling and
// unmarshaling of getblock JSON RPC commands.
type GetBlockCmd struct {
id interface{}
Hash string
Verbose bool
VerboseTx bool
}
// Enforce that GetBlockCmd satisifies the Cmd interface.
var _ Cmd = &GetBlockCmd{}
// NewGetBlockCmd creates a new GetBlockCmd.
func NewGetBlockCmd(id interface{}, hash string, optArgs ...bool) (*GetBlockCmd, error) {
// default verbose is set to true to match old behavior
verbose, verboseTx := true, false
optArgsLen := len(optArgs)
if optArgsLen > 0 {
if optArgsLen > 2 {
return nil, ErrTooManyOptArgs
}
verbose = optArgs[0]
if optArgsLen > 1 {
verboseTx = optArgs[1]
if !verbose && verboseTx {
return nil, ErrInvalidParams
}
}
}
return &GetBlockCmd{
id: id,
Hash: hash,
Verbose: verbose,
VerboseTx: verboseTx,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetBlockCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetBlockCmd) Method() string {
return "getblock"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetBlockCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
raw := RawCmd{
Jsonrpc: "1.0",
Method: "getblock",
Id: cmd.id,
Params: []interface{}{
cmd.Hash,
},
}
if !cmd.Verbose {
// set optional verbose argument to false
raw.Params = append(raw.Params, false)
} else {
if cmd.VerboseTx {
// set optional verbose argument to true
raw.Params = append(raw.Params, true)
// set optional verboseTx argument to true
raw.Params = append(raw.Params, true)
}
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetBlockCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 3 || len(r.Params) < 1 {
return ErrWrongNumberOfParams
}
hash, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter hash must be a string")
}
optArgs := make([]bool, 0, 1)
if len(r.Params) > 1 {
verbose, ok := r.Params[1].(bool)
if !ok {
return errors.New("second optional parameter verbose must be a bool")
}
optArgs = append(optArgs, verbose)
}
if len(r.Params) == 3 {
verboseTx, ok := r.Params[2].(bool)
if !ok {
return errors.New("third optional parameter verboseTx must be a bool")
}
optArgs = append(optArgs, verboseTx)
}
newCmd, err := NewGetBlockCmd(r.Id, hash, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetBlockCountCmd is a type handling custom marshaling and
// unmarshaling of getblockcount JSON RPC commands.
type GetBlockCountCmd struct {
id interface{}
}
// Enforce that GetBlockCountCmd satisifies the Cmd interface.
var _ Cmd = &GetBlockCountCmd{}
// NewGetBlockCountCmd creates a new GetBlockCountCmd.
func NewGetBlockCountCmd(id interface{}) (*GetBlockCountCmd, error) {
return &GetBlockCountCmd{
id: id,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetBlockCountCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetBlockCountCmd) Method() string {
return "getblockcount"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetBlockCountCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: "getblockcount",
Id: cmd.id,
Params: []interface{}{},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetBlockCountCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 0 {
return ErrWrongNumberOfParams
}
newCmd, err := NewGetBlockCountCmd(r.Id)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetBlockHashCmd is a type handling custom marshaling and
// unmarshaling of getblockhash JSON RPC commands.
type GetBlockHashCmd struct {
id interface{}
Index int64
}
// Enforce that GetBlockHashCmd satisifies the Cmd interface.
var _ Cmd = &GetBlockHashCmd{}
// NewGetBlockHashCmd creates a new GetBlockHashCmd.
func NewGetBlockHashCmd(id interface{}, index int64) (*GetBlockHashCmd, error) {
return &GetBlockHashCmd{
id: id,
Index: index,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetBlockHashCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetBlockHashCmd) Method() string {
return "getblockhash"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetBlockHashCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: "getblockhash",
Id: cmd.id,
Params: []interface{}{
cmd.Index,
},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetBlockHashCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 1 {
return ErrWrongNumberOfParams
}
hash, ok := r.Params[0].(float64)
if !ok {
return errors.New("first parameter hash must be a number")
}
newCmd, err := NewGetBlockHashCmd(r.Id, int64(hash))
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// TemplateRequest is a request object as defined in BIP22
// (https://en.bitcoin.it/wiki/BIP_0022), it is optionally provided as an
// pointer argument to GetBlockTemplateCmd.
type TemplateRequest struct {
Mode string `json:"mode,omitempty"`
Capabilities []string `json:"capabilities"`
}
// GetBlockTemplateCmd is a type handling custom marshaling and
// unmarshaling of getblocktemplate JSON RPC commands.
type GetBlockTemplateCmd struct {
id interface{}
Request *TemplateRequest
}
// Enforce that GetBlockTemplateCmd satisifies the Cmd interface.
var _ Cmd = &GetBlockTemplateCmd{}
// NewGetBlockTemplateCmd creates a new GetBlockTemplateCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewGetBlockTemplateCmd(id interface{}, optArgs ...*TemplateRequest) (*GetBlockTemplateCmd, error) {
var request *TemplateRequest
if len(optArgs) > 0 {
if len(optArgs) > 1 {
return nil, ErrTooManyOptArgs
}
request = optArgs[0]
}
return &GetBlockTemplateCmd{
id: id,
Request: request,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetBlockTemplateCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetBlockTemplateCmd) Method() string {
return "getblocktemplate"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetBlockTemplateCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "getblocktemplate",
Id: cmd.id,
Params: []interface{}{},
}
if cmd.Request != nil {
raw.Params = append(raw.Params, cmd.Request)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetBlockTemplateCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 1 {
return ErrWrongNumberOfParams
}
optArgs := make([]*TemplateRequest, 0, 1)
if len(r.Params) > 0 {
rmap, ok := r.Params[0].(map[string]interface{})
if !ok {
return errors.New("first optional parameter template request must be an object")
}
trequest := new(TemplateRequest)
// optional mode string.
mode, ok := rmap["mode"]
if ok {
smode, ok := mode.(string)
if !ok {
return errors.New("TemplateRequest mode must be a string")
}
trequest.Mode = smode
}
capabilities, ok := rmap["capabilities"]
if ok {
icap, ok := capabilities.([]interface{})
if !ok {
return errors.New("TemplateRequest mode must be an array")
}
cap := make([]string, len(icap))
for i, val := range icap {
cap[i], ok = val.(string)
if !ok {
return errors.New("TemplateRequest mode must be an aray of strings")
}
}
trequest.Capabilities = cap
}
optArgs = append(optArgs, trequest)
}
newCmd, err := NewGetBlockTemplateCmd(r.Id, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetConnectionCountCmd is a type handling custom marshaling and
// unmarshaling of getconnectioncount JSON RPC commands.
type GetConnectionCountCmd struct {
id interface{}
}
// Enforce that GetConnectionCountCmd satisifies the Cmd interface.
var _ Cmd = &GetConnectionCountCmd{}
// NewGetConnectionCountCmd creates a new GetConnectionCountCmd.
func NewGetConnectionCountCmd(id interface{}) (*GetConnectionCountCmd, error) {
return &GetConnectionCountCmd{
id: id,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetConnectionCountCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetConnectionCountCmd) Method() string {
return "getconnectioncount"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetConnectionCountCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: "getconnectioncount",
Id: cmd.id,
Params: []interface{}{},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetConnectionCountCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 0 {
return ErrWrongNumberOfParams
}
newCmd, err := NewGetConnectionCountCmd(r.Id)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetDifficultyCmd is a type handling custom marshaling and
// unmarshaling of getdifficulty JSON RPC commands.
type GetDifficultyCmd struct {
id interface{}
}
// Enforce that GetDifficultyCmd satisifies the Cmd interface.
var _ Cmd = &GetDifficultyCmd{}
// NewGetDifficultyCmd creates a new GetDifficultyCmd.
func NewGetDifficultyCmd(id interface{}) (*GetDifficultyCmd, error) {
return &GetDifficultyCmd{
id: id,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetDifficultyCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetDifficultyCmd) Method() string {
return "getdifficulty"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetDifficultyCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: "getdifficulty",
Id: cmd.id,
Params: []interface{}{},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetDifficultyCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 0 {
return ErrWrongNumberOfParams
}
newCmd, err := NewGetDifficultyCmd(r.Id)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetGenerateCmd is a type handling custom marshaling and
// unmarshaling of getgenerate JSON RPC commands.
type GetGenerateCmd struct {
id interface{}
}
// Enforce that GetGenerateCmd satisifies the Cmd interface.
var _ Cmd = &GetGenerateCmd{}
// NewGetGenerateCmd creates a new GetGenerateCmd.
func NewGetGenerateCmd(id interface{}) (*GetGenerateCmd, error) {
return &GetGenerateCmd{
id: id,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetGenerateCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetGenerateCmd) Method() string {
return "getgenerate"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetGenerateCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: "getgenerate",
Id: cmd.id,
Params: []interface{}{},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetGenerateCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 0 {
return ErrWrongNumberOfParams
}
newCmd, err := NewGetGenerateCmd(r.Id)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetHashesPerSecCmd is a type handling custom marshaling and
// unmarshaling of gethashespersec JSON RPC commands.
type GetHashesPerSecCmd struct {
id interface{}
}
// Enforce that GetHashesPerSecCmd satisifies the Cmd interface.
var _ Cmd = &GetHashesPerSecCmd{}
// NewGetHashesPerSecCmd creates a new GetHashesPerSecCmd.
func NewGetHashesPerSecCmd(id interface{}) (*GetHashesPerSecCmd, error) {
return &GetHashesPerSecCmd{
id: id,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetHashesPerSecCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetHashesPerSecCmd) Method() string {
return "gethashespersec"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetHashesPerSecCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: "gethashespersec",
Id: cmd.id,
Params: []interface{}{},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetHashesPerSecCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 0 {
return ErrWrongNumberOfParams
}
newCmd, err := NewGetHashesPerSecCmd(r.Id)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetInfoCmd is a type handling custom marshaling and
// unmarshaling of getinfo JSON RPC commands.
type GetInfoCmd struct {
id interface{}
}
// Enforce that GetInfoCmd satisifies the Cmd interface.
var _ Cmd = &GetInfoCmd{}
// NewGetInfoCmd creates a new GetInfoCmd.
func NewGetInfoCmd(id interface{}) (*GetInfoCmd, error) {
return &GetInfoCmd{
id: id,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetInfoCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetInfoCmd) Method() string {
return "getinfo"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetInfoCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: "getinfo",
Id: cmd.id,
Params: []interface{}{},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetInfoCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 0 {
return ErrWrongNumberOfParams
}
newCmd, err := NewGetInfoCmd(r.Id)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetMiningInfoCmd is a type handling custom marshaling and
// unmarshaling of getmininginfo JSON RPC commands.
type GetMiningInfoCmd struct {
id interface{}
}
// Enforce that GetMiningInfoCmd satisifies the Cmd interface.
var _ Cmd = &GetMiningInfoCmd{}
// NewGetMiningInfoCmd creates a new GetMiningInfoCmd.
func NewGetMiningInfoCmd(id interface{}) (*GetMiningInfoCmd, error) {
return &GetMiningInfoCmd{
id: id,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetMiningInfoCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetMiningInfoCmd) Method() string {
return "getmininginfo"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetMiningInfoCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: "getmininginfo",
Id: cmd.id,
Params: []interface{}{},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetMiningInfoCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 0 {
return ErrWrongNumberOfParams
}
newCmd, err := NewGetMiningInfoCmd(r.Id)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetNetTotalsCmd is a type handling custom marshaling and
// unmarshaling of getnettotals JSON RPC commands.
type GetNetTotalsCmd struct {
id interface{}
}
// Enforce that GetNetTotalsCmd satisifies the Cmd interface.
var _ Cmd = &GetNetTotalsCmd{}
// NewGetNetTotalsCmd creates a new GetNetTotalsCmd.
func NewGetNetTotalsCmd(id interface{}) (*GetNetTotalsCmd, error) {
return &GetNetTotalsCmd{
id: id,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetNetTotalsCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetNetTotalsCmd) Method() string {
return "getnettotals"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetNetTotalsCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: "getnettotals",
Id: cmd.id,
Params: []interface{}{},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetNetTotalsCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 0 {
return ErrWrongNumberOfParams
}
newCmd, err := NewGetNetTotalsCmd(r.Id)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetNetworkHashPSCmd is a type handling custom marshaling and
// unmarshaling of getnetworkhashps JSON RPC commands.
type GetNetworkHashPSCmd struct {
id interface{}
Blocks int
Height int
}
// Enforce that GetNetworkHashPSCmd satisifies the Cmd interface.
var _ Cmd = &GetNetworkHashPSCmd{}
// NewGetNetworkHashPSCmd creates a new GetNetworkHashPSCmd.
func NewGetNetworkHashPSCmd(id interface{}, optArgs ...int) (*GetNetworkHashPSCmd, error) {
blocks := 120
height := -1
if len(optArgs) > 0 {
if len(optArgs) > 2 {
return nil, ErrTooManyOptArgs
}
blocks = optArgs[0]
if len(optArgs) > 1 {
height = optArgs[1]
}
}
return &GetNetworkHashPSCmd{
id: id,
Blocks: blocks,
Height: height,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetNetworkHashPSCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetNetworkHashPSCmd) Method() string {
return "getnetworkhashps"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetNetworkHashPSCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
raw := RawCmd{
Jsonrpc: "1.0",
Method: "getnetworkhashps",
Id: cmd.id,
Params: []interface{}{},
}
if cmd.Blocks != 120 || cmd.Height != -1 {
raw.Params = append(raw.Params, cmd.Blocks)
}
if cmd.Height != -1 {
raw.Params = append(raw.Params, cmd.Height)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetNetworkHashPSCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 2 {
return ErrWrongNumberOfParams
}
optArgs := make([]int, 0, 2)
if len(r.Params) > 0 {
blocks, ok := r.Params[0].(float64)
if !ok {
return errors.New("first optional parameter blocks must be a number")
}
optArgs = append(optArgs, int(blocks))
}
if len(r.Params) > 1 {
height, ok := r.Params[1].(float64)
if !ok {
return errors.New("second optional parameter height must be a number")
}
optArgs = append(optArgs, int(height))
}
newCmd, err := NewGetNetworkHashPSCmd(r.Id, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetNewAddressCmd is a type handling custom marshaling and
// unmarshaling of getnewaddress JSON RPC commands.
type GetNewAddressCmd struct {
id interface{}
Account string
}
// Enforce that GetNewAddressCmd satisifies the Cmd interface.
var _ Cmd = &GetNewAddressCmd{}
// NewGetNewAddressCmd creates a new GetNewAddressCmd.
func NewGetNewAddressCmd(id interface{}, optArgs ...string) (*GetNewAddressCmd, error) {
var account string
if len(optArgs) > 0 {
if len(optArgs) > 1 {
return nil, ErrTooManyOptArgs
}
account = optArgs[0]
}
return &GetNewAddressCmd{
id: id,
Account: account,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetNewAddressCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetNewAddressCmd) Method() string {
return "getnewaddress"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetNewAddressCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "getnewaddress",
Id: cmd.id,
Params: []interface{}{},
}
if cmd.Account != "" {
raw.Params = append(raw.Params, cmd.Account)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetNewAddressCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 1 {
return ErrWrongNumberOfParams
}
optArgs := make([]string, 0, 1)
if len(r.Params) > 0 {
addr, ok := r.Params[0].(string)
if !ok {
return errors.New("first optional parameter address must be a string")
}
optArgs = append(optArgs, addr)
}
newCmd, err := NewGetNewAddressCmd(r.Id, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetPeerInfoCmd is a type handling custom marshaling and
// unmarshaling of getpeerinfo JSON RPC commands.
type GetPeerInfoCmd struct {
id interface{}
}
// Enforce that GetPeerInfoCmd satisifies the Cmd interface.
var _ Cmd = &GetPeerInfoCmd{}
// NewGetPeerInfoCmd creates a new GetPeerInfoCmd.
func NewGetPeerInfoCmd(id interface{}) (*GetPeerInfoCmd, error) {
return &GetPeerInfoCmd{
id: id,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetPeerInfoCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetPeerInfoCmd) Method() string {
return "getpeerinfo"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetPeerInfoCmd) MarshalJSON() ([]byte, error) {
// Fill and marshal a RawCmd.
return json.Marshal(RawCmd{
Jsonrpc: "1.0",
Method: "getpeerinfo",
Id: cmd.id,
Params: []interface{}{},
})
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetPeerInfoCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 0 {
return ErrWrongNumberOfParams
}
newCmd, err := NewGetPeerInfoCmd(r.Id)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetRawChangeAddressCmd is a type handling custom marshaling and
// unmarshaling of getrawchangeaddress JSON RPC commands.
type GetRawChangeAddressCmd struct {
id interface{}
Account string
}
// Enforce that GetRawChangeAddressCmd satisifies the Cmd interface.
var _ Cmd = &GetRawChangeAddressCmd{}
// NewGetRawChangeAddressCmd creates a new GetRawChangeAddressCmd.
func NewGetRawChangeAddressCmd(id interface{}, optArgs ...string) (*GetRawChangeAddressCmd, error) {
var account string
if len(optArgs) > 0 {
if len(optArgs) > 1 {
return nil, ErrTooManyOptArgs
}
account = optArgs[0]
}
return &GetRawChangeAddressCmd{
id: id,
Account: account,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetRawChangeAddressCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetRawChangeAddressCmd) Method() string {
return "getrawchangeaddress"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetRawChangeAddressCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "getrawchangeaddress",
Id: cmd.id,
Params: []interface{}{},
}
if cmd.Account != "" {
raw.Params = append(raw.Params, cmd.Account)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetRawChangeAddressCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 1 {
return ErrWrongNumberOfParams
}
optArgs := make([]string, 0, 1)
if len(r.Params) > 0 {
account, ok := r.Params[0].(string)
if !ok {
return errors.New("first optional parameter account must be a string")
}
optArgs = append(optArgs, account)
}
newCmd, err := NewGetRawChangeAddressCmd(r.Id, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetRawMempoolCmd is a type handling custom marshaling and
// unmarshaling of getrawmempool JSON RPC commands.
type GetRawMempoolCmd struct {
id interface{}
Verbose bool
}
// Enforce that GetRawMempoolCmd satisifies the Cmd interface.
var _ Cmd = &GetRawMempoolCmd{}
// NewGetRawMempoolCmd creates a new GetRawMempoolCmd.
func NewGetRawMempoolCmd(id interface{}, optArgs ...bool) (*GetRawMempoolCmd, error) {
verbose := false
if len(optArgs) > 0 {
if len(optArgs) > 1 {
return nil, ErrTooManyOptArgs
}
verbose = optArgs[0]
}
return &GetRawMempoolCmd{
id: id,
Verbose: verbose,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetRawMempoolCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetRawMempoolCmd) Method() string {
return "getrawmempool"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetRawMempoolCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "getrawmempool",
Id: cmd.id,
Params: []interface{}{},
}
if cmd.Verbose {
raw.Params = append(raw.Params, cmd.Verbose)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetRawMempoolCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 1 {
return ErrWrongNumberOfParams
}
optArgs := make([]bool, 0, 1)
if len(r.Params) == 1 {
verbose, ok := r.Params[0].(bool)
if !ok {
return errors.New("first optional parameter verbose must be a bool")
}
optArgs = append(optArgs, verbose)
}
newCmd, err := NewGetRawMempoolCmd(r.Id, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetRawTransactionCmd is a type handling custom marshaling and
// unmarshaling of getrawtransaction JSON RPC commands.
type GetRawTransactionCmd struct {
id interface{}
Txid string
Verbose bool
}
// Enforce that GetRawTransactionCmd satisifies the Cmd interface.
var _ Cmd = &GetRawTransactionCmd{}
// NewGetRawTransactionCmd creates a new GetRawTransactionCmd.
func NewGetRawTransactionCmd(id interface{}, txid string, optArgs ...bool) (*GetRawTransactionCmd, error) {
var verbose bool
if len(optArgs) > 0 {
if len(optArgs) > 1 {
return nil, ErrTooManyOptArgs
}
verbose = optArgs[0]
}
return &GetRawTransactionCmd{
id: id,
Txid: txid,
Verbose: verbose,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetRawTransactionCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetRawTransactionCmd) Method() string {
return "getrawtransaction"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetRawTransactionCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "getrawtransaction",
Id: cmd.id,
Params: []interface{}{
cmd.Txid,
},
}
if cmd.Verbose {
raw.Params = append(raw.Params, cmd.Verbose)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetRawTransactionCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 2 || len(r.Params) < 1 {
return ErrWrongNumberOfParams
}
txid, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter txid must be a string")
}
optArgs := make([]bool, 0, 1)
if len(r.Params) == 2 {
verbose, ok := r.Params[1].(bool)
if !ok {
return errors.New("second optional parameter verbose must be a bool")
}
optArgs = append(optArgs, verbose)
}
newCmd, err := NewGetRawTransactionCmd(r.Id, txid, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetReceivedByAccountCmd is a type handling custom marshaling and
// unmarshaling of getreceivedbyaccount JSON RPC commands.
type GetReceivedByAccountCmd struct {
id interface{}
Account string
MinConf int
}
// Enforce that GetReceivedByAccountCmd satisifies the Cmd interface.
var _ Cmd = &GetReceivedByAccountCmd{}
// NewGetReceivedByAccountCmd creates a new GetReceivedByAccountCmd.
func NewGetReceivedByAccountCmd(id interface{}, optArgs ...interface{}) (*GetReceivedByAccountCmd, error) {
if len(optArgs) > 2 {
return nil, ErrTooManyOptArgs
}
var account string
if len(optArgs) > 0 {
a, ok := optArgs[0].(string)
if !ok {
return nil, errors.New("first optional argument account is not a string")
}
account = a
}
var minconf int = 1
if len(optArgs) > 1 {
m, ok := optArgs[1].(int)
if !ok {
return nil, errors.New("second optional argument minconf is not a int")
}
minconf = m
}
return &GetReceivedByAccountCmd{
id: id,
Account: account,
MinConf: minconf,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetReceivedByAccountCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetReceivedByAccountCmd) Method() string {
return "getreceivedbyaccount"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetReceivedByAccountCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "getreceivedbyaccount",
Id: cmd.id,
Params: []interface{}{},
}
if cmd.Account != "" || cmd.MinConf != 1 {
raw.Params = append(raw.Params, cmd.Account)
}
if cmd.MinConf != 1 {
raw.Params = append(raw.Params, cmd.MinConf)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetReceivedByAccountCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 2 {
return ErrWrongNumberOfParams
}
optArgs := make([]interface{}, 0, 2)
if len(r.Params) > 0 {
account, ok := r.Params[0].(string)
if !ok {
return errors.New("first optional parameter account must be a string")
}
optArgs = append(optArgs, account)
}
if len(r.Params) > 1 {
minconf, ok := r.Params[1].(float64)
if !ok {
return errors.New("second optional parameter verbose must be a number")
}
optArgs = append(optArgs, int(minconf))
}
newCmd, err := NewGetReceivedByAccountCmd(r.Id, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetReceivedByAddressCmd is a type handling custom marshaling and
// unmarshaling of getreceivedbyaddress JSON RPC commands.
type GetReceivedByAddressCmd struct {
id interface{}
Address string
MinConf int
}
// Enforce that GetReceivedByAddressCmd satisifies the Cmd interface.
var _ Cmd = &GetReceivedByAddressCmd{}
// NewGetReceivedByAddressCmd creates a new GetReceivedByAddressCmd.
func NewGetReceivedByAddressCmd(id interface{}, optArgs ...interface{}) (*GetReceivedByAddressCmd, error) {
if len(optArgs) > 2 {
return nil, ErrTooManyOptArgs
}
var address string
if len(optArgs) > 0 {
a, ok := optArgs[0].(string)
if !ok {
return nil, errors.New("first optional argument address is not a string")
}
address = a
}
var minconf int = 1
if len(optArgs) > 1 {
m, ok := optArgs[1].(int)
if !ok {
return nil, errors.New("second optional argument minconf is not a int")
}
minconf = m
}
return &GetReceivedByAddressCmd{
id: id,
Address: address,
MinConf: minconf,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetReceivedByAddressCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetReceivedByAddressCmd) Method() string {
return "getrecivedbyaddress"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetReceivedByAddressCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "getreceivedbyaddress",
Id: cmd.id,
Params: []interface{}{},
}
if cmd.Address != "" || cmd.MinConf != 1 {
raw.Params = append(raw.Params, cmd.Address)
}
if cmd.MinConf != 1 {
raw.Params = append(raw.Params, cmd.MinConf)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetReceivedByAddressCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 2 {
return ErrWrongNumberOfParams
}
optArgs := make([]interface{}, 0, 2)
if len(r.Params) > 0 {
address, ok := r.Params[0].(string)
if !ok {
return errors.New("first optional parameter address must be a string")
}
optArgs = append(optArgs, address)
}
if len(r.Params) > 1 {
minconf, ok := r.Params[1].(float64)
if !ok {
return errors.New("second optional parameter verbose must be a number")
}
optArgs = append(optArgs, int(minconf))
}
newCmd, err := NewGetReceivedByAddressCmd(r.Id, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetTransactionCmd is a type handling custom marshaling and
// unmarshaling of gettransaction JSON RPC commands.
type GetTransactionCmd struct {
id interface{}
Txid string
}
// Enforce that GetTransactionCmd satisifies the Cmd interface.
var _ Cmd = &GetTransactionCmd{}
// NewGetTransactionCmd creates a new GetTransactionCmd.
func NewGetTransactionCmd(id interface{}, txid string) (*GetTransactionCmd, error) {
return &GetTransactionCmd{
id: id,
Txid: txid,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetTransactionCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetTransactionCmd) Method() string {
return "gettransaction"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetTransactionCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "gettransaction",
Id: cmd.id,
Params: []interface{}{
cmd.Txid,
},
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetTransactionCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 1 {
return ErrWrongNumberOfParams
}
txid, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter txid must be a string")
}
newCmd, err := NewGetTransactionCmd(r.Id, txid)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetTxOutCmd is a type handling custom marshaling and
// unmarshaling of gettxout JSON RPC commands.
type GetTxOutCmd struct {
id interface{}
Txid string
Output int
IncludeMempool bool
}
// Enforce that GetTxOutCmd satisifies the Cmd interface.
var _ Cmd = &GetTxOutCmd{}
// NewGetTxOutCmd creates a new GetTxOutCmd.
func NewGetTxOutCmd(id interface{}, txid string, output int, optArgs ...bool) (*GetTxOutCmd, error) {
var mempool bool
if len(optArgs) > 0 {
if len(optArgs) > 1 {
return nil, ErrTooManyOptArgs
}
mempool = optArgs[0]
}
return &GetTxOutCmd{
id: id,
Txid: txid,
Output: output,
IncludeMempool: mempool,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetTxOutCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetTxOutCmd) Method() string {
return "gettxout"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetTxOutCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "gettxout",
Id: cmd.id,
Params: []interface{}{
cmd.Txid,
cmd.Output,
},
}
if cmd.IncludeMempool != false {
raw.Params = append(raw.Params, cmd.IncludeMempool)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetTxOutCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 3 || len(r.Params) < 2 {
return ErrWrongNumberOfParams
}
txid, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter txid must be a string")
}
output, ok := r.Params[1].(float64)
if !ok {
return errors.New("second parameter output must be a number")
}
optArgs := make([]bool, 0, 1)
if len(r.Params) == 3 {
mempool, ok := r.Params[2].(bool)
if !ok {
return errors.New("third optional parameter includemempool must be a bool")
}
optArgs = append(optArgs, mempool)
}
newCmd, err := NewGetTxOutCmd(r.Id, txid, int(output), optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// GetTxOutSetInfoCmd is a type handling custom marshaling and
// unmarshaling of gettxoutsetinfo JSON RPC commands.
type GetTxOutSetInfoCmd struct {
id interface{}
}
// Enforce that GetTxOutSetInfoCmd satisifies the Cmd interface.
var _ Cmd = &GetTxOutSetInfoCmd{}
// NewGetTxOutSetInfoCmd creates a new GetTxOutSetInfoCmd.
func NewGetTxOutSetInfoCmd(id interface{}) (*GetTxOutSetInfoCmd, error) {
return &GetTxOutSetInfoCmd{
id: id,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetTxOutSetInfoCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetTxOutSetInfoCmd) Method() string {
return "gettxoutsetinfo"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetTxOutSetInfoCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "gettxoutsetinfo",
Id: cmd.id,
Params: []interface{}{},
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetTxOutSetInfoCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 0 {
return ErrWrongNumberOfParams
}
newCmd, err := NewGetTxOutSetInfoCmd(r.Id)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// WorkRequest is a request object as defined in
// https://en.bitcoin.it/wiki/Getwork, it is provided as a
// pointer argument to GetWorkCmd.
type WorkRequest struct {
Data string `json:"data"`
Target string `json:"target"`
Algorithm string `json:"algorithm,omitempty"`
}
// GetWorkCmd is a type handling custom marshaling and
// unmarshaling of getwork JSON RPC commands.
type GetWorkCmd struct {
id interface{}
Request WorkRequest
}
// Enforce that GetWorkCmd satisifies the Cmd interface.
var _ Cmd = &GetWorkCmd{}
// NewGetWorkCmd creates a new GetWorkCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewGetWorkCmd(id interface{}, request WorkRequest) (*GetWorkCmd, error) {
return &GetWorkCmd{
id: id,
Request: request,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *GetWorkCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *GetWorkCmd) Method() string {
return "getwork"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *GetWorkCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "getwork",
Id: cmd.id,
Params: []interface{}{
cmd.Request,
},
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *GetWorkCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 1 {
return ErrWrongNumberOfParams
}
rmap, ok := r.Params[0].(map[string]interface{})
if !ok {
return errors.New("first optional parameter template request must be an object")
}
wrequest := new(WorkRequest)
// data is required
data, ok := rmap["data"]
if !ok {
return errors.New("WorkRequest data must be present")
}
sdata, ok := data.(string)
if !ok {
return errors.New("WorkRequest data must be a string")
}
wrequest.Data = sdata
// target is required
target, ok := rmap["target"]
if !ok {
return errors.New("WorkRequest target must be present")
}
starget, ok := target.(string)
if !ok {
return errors.New("WorkRequest target must be a string")
}
wrequest.Target = starget
// algorithm is optional
algo, ok := rmap["algorithm"]
if ok {
salgo, ok := algo.(string)
if !ok {
return errors.New("WorkRequest algorithm must be a string")
}
wrequest.Algorithm = salgo
}
newCmd, err := NewGetWorkCmd(r.Id, *wrequest)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// HelpCmd is a type handling custom marshaling and
// unmarshaling of help JSON RPC commands.
type HelpCmd struct {
id interface{}
Command string
}
// Enforce that HelpCmd satisifies the Cmd interface.
var _ Cmd = &HelpCmd{}
// NewHelpCmd creates a new HelpCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewHelpCmd(id interface{}, optArgs ...string) (*HelpCmd, error) {
var command string
if len(optArgs) > 0 {
if len(optArgs) > 1 {
return nil, ErrTooManyOptArgs
}
command = optArgs[0]
}
return &HelpCmd{
id: id,
Command: command,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *HelpCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *HelpCmd) Method() string {
return "help"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *HelpCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "help",
Id: cmd.id,
Params: []interface{}{},
}
if cmd.Command != "" {
raw.Params = append(raw.Params, cmd.Command)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *HelpCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 1 {
return ErrWrongNumberOfParams
}
optArgs := make([]string, 0, 1)
if len(r.Params) == 1 {
command, ok := r.Params[0].(string)
if !ok {
return errors.New("first optional parameter command must be a string")
}
optArgs = append(optArgs, command)
}
newCmd, err := NewHelpCmd(r.Id, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// ImportPrivKeyCmd is a type handling custom marshaling and
// unmarshaling of importprivkey JSON RPC commands.
type ImportPrivKeyCmd struct {
id interface{}
PrivKey string
Label string
Rescan bool
}
// Enforce that ImportPrivKeyCmd satisifies the Cmd interface.
var _ Cmd = &ImportPrivKeyCmd{}
// NewImportPrivKeyCmd creates a new ImportPrivKeyCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewImportPrivKeyCmd(id interface{}, privkey string, optArgs ...interface{}) (*ImportPrivKeyCmd, error) {
var label string
rescan := true
var ok bool
if len(optArgs) > 2 {
return nil, ErrTooManyOptArgs
}
if len(optArgs) > 0 {
label, ok = optArgs[0].(string)
if !ok {
return nil, errors.New("first optional argument label is not a string")
}
}
if len(optArgs) > 1 {
rescan, ok = optArgs[1].(bool)
if !ok {
return nil, errors.New("first optional argument rescan is not a bool")
}
}
return &ImportPrivKeyCmd{
id: id,
PrivKey: privkey,
Label: label,
Rescan: rescan,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *ImportPrivKeyCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *ImportPrivKeyCmd) Method() string {
return "importprivkey"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *ImportPrivKeyCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "importprivkey",
Id: cmd.id,
Params: []interface{}{
cmd.PrivKey,
},
}
if cmd.Label != "" || !cmd.Rescan {
raw.Params = append(raw.Params, cmd.Label)
}
if !cmd.Rescan {
raw.Params = append(raw.Params, cmd.Rescan)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *ImportPrivKeyCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) == 0 || len(r.Params) > 3 {
return ErrWrongNumberOfParams
}
privkey, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter privkey must be a string")
}
optArgs := make([]interface{}, 0, 2)
if len(r.Params) > 1 {
label, ok := r.Params[1].(string)
if !ok {
return errors.New("second optional parameter label must be a string")
}
optArgs = append(optArgs, label)
}
if len(r.Params) > 2 {
rescan, ok := r.Params[2].(bool)
if !ok {
return errors.New("third optional parameter rescan must be a bool")
}
optArgs = append(optArgs, rescan)
}
newCmd, err := NewImportPrivKeyCmd(r.Id, privkey, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// ImportWalletCmd is a type handling custom marshaling and
// unmarshaling of importwallet JSON RPC commands.
type ImportWalletCmd struct {
id interface{}
Filename string
}
// Enforce that ImportWalletCmd satisifies the Cmd interface.
var _ Cmd = &ImportWalletCmd{}
// NewImportWalletCmd creates a new ImportWalletCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewImportWalletCmd(id interface{}, filename string) (*ImportWalletCmd, error) {
return &ImportWalletCmd{
id: id,
Filename: filename,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *ImportWalletCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *ImportWalletCmd) Method() string {
return "importwallet"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *ImportWalletCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "importwallet",
Id: cmd.id,
Params: []interface{}{
cmd.Filename,
},
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *ImportWalletCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 1 {
return ErrWrongNumberOfParams
}
filename, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter filename must be a string")
}
newCmd, err := NewImportWalletCmd(r.Id, filename)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// KeyPoolRefillCmd is a type handling custom marshaling and
// unmarshaling of keypoolrefill JSON RPC commands.
type KeyPoolRefillCmd struct {
id interface{}
}
// Enforce that KeyPoolRefillCmd satisifies the Cmd interface.
var _ Cmd = &KeyPoolRefillCmd{}
// NewKeyPoolRefillCmd creates a new KeyPoolRefillCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewKeyPoolRefillCmd(id interface{}) (*KeyPoolRefillCmd, error) {
return &KeyPoolRefillCmd{
id: id,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *KeyPoolRefillCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *KeyPoolRefillCmd) Method() string {
return "keypoolrefill"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *KeyPoolRefillCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "keypoolrefill",
Id: cmd.id,
Params: []interface{}{},
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *KeyPoolRefillCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 0 {
return ErrWrongNumberOfParams
}
newCmd, err := NewKeyPoolRefillCmd(r.Id)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// ListAccountsCmd is a type handling custom marshaling and
// unmarshaling of listaccounts JSON RPC commands.
type ListAccountsCmd struct {
id interface{}
MinConf int
}
// Enforce that ListAccountsCmd satisifies the Cmd interface.
var _ Cmd = &ListAccountsCmd{}
// NewListAccountsCmd creates a new ListAccountsCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewListAccountsCmd(id interface{}, optArgs ...int) (*ListAccountsCmd, error) {
var minconf = 1
if len(optArgs) > 0 {
if len(optArgs) > 1 {
return nil, ErrTooManyOptArgs
}
minconf = optArgs[0]
}
return &ListAccountsCmd{
id: id,
MinConf: minconf,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *ListAccountsCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *ListAccountsCmd) Method() string {
return "listaccounts"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *ListAccountsCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "listaccounts",
Id: cmd.id,
Params: []interface{}{},
}
if cmd.MinConf != 1 {
raw.Params = append(raw.Params, cmd.MinConf)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *ListAccountsCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 1 {
return ErrWrongNumberOfParams
}
optArgs := make([]int, 0, 1)
if len(r.Params) == 1 {
minconf, ok := r.Params[0].(float64)
if !ok {
return errors.New("first parameter minconf must be a number")
}
optArgs = append(optArgs, int(minconf))
}
newCmd, err := NewListAccountsCmd(r.Id, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// ListAddressGroupingsCmd is a type handling custom marshaling and
// unmarshaling of listaddressgroupings JSON RPC commands.
type ListAddressGroupingsCmd struct {
id interface{}
}
// Enforce that ListAddressGroupingsCmd satisifies the Cmd interface.
var _ Cmd = &ListAddressGroupingsCmd{}
// NewListAddressGroupingsCmd creates a new ListAddressGroupingsCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewListAddressGroupingsCmd(id interface{}) (*ListAddressGroupingsCmd, error) {
return &ListAddressGroupingsCmd{
id: id,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *ListAddressGroupingsCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *ListAddressGroupingsCmd) Method() string {
return "listaddressgroupings"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *ListAddressGroupingsCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "listaddressgroupings",
Id: cmd.id,
Params: []interface{}{},
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *ListAddressGroupingsCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 0 {
return ErrWrongNumberOfParams
}
newCmd, err := NewListAddressGroupingsCmd(r.Id)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// ListLockUnspentCmd is a type handling custom marshaling and
// unmarshaling of listlockunspent JSON RPC commands.
type ListLockUnspentCmd struct {
id interface{}
}
// Enforce that ListLockUnspentCmd satisifies the Cmd interface.
var _ Cmd = &ListLockUnspentCmd{}
// NewListLockUnspentCmd creates a new ListLockUnspentCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewListLockUnspentCmd(id interface{}) (*ListLockUnspentCmd, error) {
return &ListLockUnspentCmd{
id: id,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *ListLockUnspentCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *ListLockUnspentCmd) Method() string {
return "listlockunspent"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *ListLockUnspentCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "listlockunspent",
Id: cmd.id,
Params: []interface{}{},
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *ListLockUnspentCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 0 {
return ErrWrongNumberOfParams
}
newCmd, err := NewListLockUnspentCmd(r.Id)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// ListReceivedByAccountCmd is a type handling custom marshaling and
// unmarshaling of listreceivedbyaccount JSON RPC commands.
type ListReceivedByAccountCmd struct {
id interface{}
MinConf int
IncludeEmpty bool
}
// Enforce that ListReceivedByAccountCmd satisifies the Cmd interface.
var _ Cmd = &ListReceivedByAccountCmd{}
// NewListReceivedByAccountCmd creates a new ListReceivedByAccountCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewListReceivedByAccountCmd(id interface{}, optArgs ...interface{}) (*ListReceivedByAccountCmd, error) {
minconf := 1
includeempty := false
if len(optArgs) > 2 {
return nil, ErrWrongNumberOfParams
}
if len(optArgs) > 0 {
m, ok := optArgs[0].(int)
if !ok {
return nil, errors.New("first optional argument minconf is not an int")
}
minconf = m
}
if len(optArgs) > 1 {
ie, ok := optArgs[1].(bool)
if !ok {
return nil, errors.New("second optional argument includeempty is not a bool")
}
includeempty = ie
}
return &ListReceivedByAccountCmd{
id: id,
MinConf: minconf,
IncludeEmpty: includeempty,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *ListReceivedByAccountCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *ListReceivedByAccountCmd) Method() string {
return "listreceivedbyaccount"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *ListReceivedByAccountCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "listreceivedbyaccount",
Id: cmd.id,
Params: []interface{}{},
}
if cmd.MinConf != 1 || cmd.IncludeEmpty != false {
raw.Params = append(raw.Params, cmd.MinConf)
}
if cmd.IncludeEmpty != false {
raw.Params = append(raw.Params, cmd.IncludeEmpty)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *ListReceivedByAccountCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 2 {
return ErrWrongNumberOfParams
}
optArgs := make([]interface{}, 0, 2)
if len(r.Params) > 0 {
minconf, ok := r.Params[0].(float64)
if !ok {
return errors.New("first optional parameter minconf must be a number")
}
optArgs = append(optArgs, minconf)
}
if len(r.Params) > 1 {
includeempty, ok := r.Params[1].(bool)
if !ok {
return errors.New("second optional parameter includeempt must be a bool")
}
optArgs = append(optArgs, includeempty)
}
newCmd, err := NewListReceivedByAccountCmd(r.Id, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// ListReceivedByAddressCmd is a type handling custom marshaling and
// unmarshaling of listreceivedbyaddress JSON RPC commands.
type ListReceivedByAddressCmd struct {
id interface{}
MinConf int
IncludeEmpty bool
}
// Enforce that ListReceivedByAddressCmd satisifies the Cmd interface.
var _ Cmd = &ListReceivedByAddressCmd{}
// NewListReceivedByAddressCmd creates a new ListReceivedByAddressCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewListReceivedByAddressCmd(id interface{}, optArgs ...interface{}) (*ListReceivedByAddressCmd, error) {
minconf := 1
includeempty := false
if len(optArgs) > 2 {
return nil, ErrWrongNumberOfParams
}
if len(optArgs) > 0 {
m, ok := optArgs[0].(int)
if !ok {
return nil, errors.New("first optional argument minconf is not an int")
}
minconf = m
}
if len(optArgs) > 1 {
ie, ok := optArgs[1].(bool)
if !ok {
return nil, errors.New("second optional argument includeempty is not a bool")
}
includeempty = ie
}
return &ListReceivedByAddressCmd{
id: id,
MinConf: minconf,
IncludeEmpty: includeempty,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *ListReceivedByAddressCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *ListReceivedByAddressCmd) Method() string {
return "listreceivedbyaddress"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *ListReceivedByAddressCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "listreceivedbyaddress",
Id: cmd.id,
Params: []interface{}{},
}
if cmd.MinConf != 1 || cmd.IncludeEmpty != false {
raw.Params = append(raw.Params, cmd.MinConf)
}
if cmd.IncludeEmpty != false {
raw.Params = append(raw.Params, cmd.IncludeEmpty)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *ListReceivedByAddressCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 2 {
return ErrWrongNumberOfParams
}
optArgs := make([]interface{}, 0, 2)
if len(r.Params) > 0 {
minconf, ok := r.Params[0].(float64)
if !ok {
return errors.New("first optional parameter minconf must be a number")
}
optArgs = append(optArgs, minconf)
}
if len(r.Params) > 1 {
includeempty, ok := r.Params[1].(bool)
if !ok {
return errors.New("second optional parameter includeempt must be a bool")
}
optArgs = append(optArgs, includeempty)
}
newCmd, err := NewListReceivedByAddressCmd(r.Id, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// ListSinceBlockCmd is a type handling custom marshaling and
// unmarshaling of listsinceblock JSON RPC commands.
type ListSinceBlockCmd struct {
id interface{}
BlockHash string
TargetConfirmations int
}
// Enforce that ListSinceBlockCmd satisifies the Cmd interface.
var _ Cmd = &ListSinceBlockCmd{}
// NewListSinceBlockCmd creates a new ListSinceBlockCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewListSinceBlockCmd(id interface{}, optArgs ...interface{}) (*ListSinceBlockCmd, error) {
blockhash := ""
targetconfirmations := 1
if len(optArgs) > 2 {
return nil, ErrWrongNumberOfParams
}
if len(optArgs) > 0 {
bh, ok := optArgs[0].(string)
if !ok {
return nil, errors.New("first optional argument blockhash is not a string")
}
blockhash = bh
}
if len(optArgs) > 1 {
tc, ok := optArgs[0].(int)
if !ok {
return nil, errors.New("second optional argument targetconfirmations is not an int")
}
targetconfirmations = tc
}
return &ListSinceBlockCmd{
id: id,
BlockHash: blockhash,
TargetConfirmations: targetconfirmations,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *ListSinceBlockCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *ListSinceBlockCmd) Method() string {
return "listsinceblock"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *ListSinceBlockCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "listsinceblock",
Id: cmd.id,
Params: []interface{}{},
}
if cmd.BlockHash != "" || cmd.TargetConfirmations != 1 {
raw.Params = append(raw.Params, cmd.BlockHash)
}
if cmd.TargetConfirmations != 1 {
raw.Params = append(raw.Params, cmd.TargetConfirmations)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *ListSinceBlockCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 2 {
return ErrWrongNumberOfParams
}
optArgs := make([]interface{}, 0, 2)
if len(r.Params) > 0 {
blockhash, ok := r.Params[0].(string)
if !ok {
return errors.New("first optional parameter blockhash must be a string")
}
optArgs = append(optArgs, blockhash)
}
if len(r.Params) > 1 {
targetconfirmations, ok := r.Params[1].(float64)
if !ok {
return errors.New("second optional parameter targetconfirmations must be a number")
}
optArgs = append(optArgs, int(targetconfirmations))
}
newCmd, err := NewListSinceBlockCmd(r.Id, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// ListTransactionsCmd is a type handling custom marshaling and
// unmarshaling of listtransactions JSON RPC commands.
type ListTransactionsCmd struct {
id interface{}
Account string
Count int
From int
}
// Enforce that ListTransactionsCmd satisifies the Cmd interface.
var _ Cmd = &ListTransactionsCmd{}
// NewListTransactionsCmd creates a new ListTransactionsCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewListTransactionsCmd(id interface{}, optArgs ...interface{}) (*ListTransactionsCmd, error) {
account := ""
count := 10
from := 0
if len(optArgs) > 3 {
return nil, ErrWrongNumberOfParams
}
if len(optArgs) > 0 {
ac, ok := optArgs[0].(string)
if !ok {
return nil, errors.New("first optional argument account is not a string")
}
account = ac
}
if len(optArgs) > 1 {
cnt, ok := optArgs[1].(int)
if !ok {
return nil, errors.New("second optional argument count is not an int")
}
count = cnt
}
if len(optArgs) > 2 {
frm, ok := optArgs[2].(int)
if !ok {
return nil, errors.New("third optional argument from is not an int")
}
from = frm
}
return &ListTransactionsCmd{
id: id,
Account: account,
Count: count,
From: from,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *ListTransactionsCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *ListTransactionsCmd) Method() string {
return "listtransactions"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *ListTransactionsCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "listtransactions",
Id: cmd.id,
Params: []interface{}{},
}
if cmd.Account != "" || cmd.Count != 10 || cmd.From != 0 {
raw.Params = append(raw.Params, cmd.Account)
}
if cmd.Count != 10 || cmd.From != 0 {
raw.Params = append(raw.Params, cmd.Count)
}
if cmd.From != 0 {
raw.Params = append(raw.Params, cmd.From)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *ListTransactionsCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 3 {
return ErrWrongNumberOfParams
}
optArgs := make([]interface{}, 0, 3)
if len(r.Params) > 0 {
account, ok := r.Params[0].(string)
if !ok {
return errors.New("first optional parameter account must be a string")
}
optArgs = append(optArgs, account)
}
if len(r.Params) > 1 {
count, ok := r.Params[1].(float64)
if !ok {
return errors.New("second optional parameter count must be a number")
}
optArgs = append(optArgs, int(count))
}
if len(r.Params) > 2 {
from, ok := r.Params[2].(float64)
if !ok {
return errors.New("third optional parameter from must be a number")
}
optArgs = append(optArgs, int(from))
}
newCmd, err := NewListTransactionsCmd(r.Id, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// ListUnspentCmd is a type handling custom marshaling and
// unmarshaling of listunspent JSON RPC commands.
type ListUnspentCmd struct {
id interface{}
MinConf int
MaxConf int
}
// Enforce that ListUnspentCmd satisifies the Cmd interface.
var _ Cmd = &ListUnspentCmd{}
// NewListUnspentCmd creates a new ListUnspentCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewListUnspentCmd(id interface{}, optArgs ...int) (*ListUnspentCmd, error) {
minconf := 1
maxconf := 999999
if len(optArgs) > 2 {
return nil, ErrWrongNumberOfParams
}
if len(optArgs) > 0 {
minconf = optArgs[0]
}
if len(optArgs) > 1 {
maxconf = optArgs[1]
}
return &ListUnspentCmd{
id: id,
MinConf: minconf,
MaxConf: maxconf,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *ListUnspentCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *ListUnspentCmd) Method() string {
return "listunspent"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *ListUnspentCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "listunspent",
Id: cmd.id,
Params: []interface{}{},
}
if cmd.MinConf != 1 || cmd.MaxConf != 99999 {
raw.Params = append(raw.Params, cmd.MinConf)
}
if cmd.MaxConf != 99999 {
raw.Params = append(raw.Params, cmd.MaxConf)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *ListUnspentCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 2 {
return ErrWrongNumberOfParams
}
optArgs := make([]int, 0, 2)
if len(r.Params) > 0 {
minconf, ok := r.Params[0].(float64)
if !ok {
return errors.New("first optional parameter minconf must be a number")
}
optArgs = append(optArgs, int(minconf))
}
if len(r.Params) > 1 {
maxconf, ok := r.Params[1].(float64)
if !ok {
return errors.New("second optional parameter maxconf must be a number")
}
optArgs = append(optArgs, int(maxconf))
}
newCmd, err := NewListUnspentCmd(r.Id, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// LockUnspentCmd is a type handling custom marshaling and
// unmarshaling of lockunspent JSON RPC commands.
type LockUnspentCmd struct {
id interface{}
Unlock bool
Transactions []TransactionInput
}
// Enforce that LockUnspentCmd satisifies the Cmd interface.
var _ Cmd = &LockUnspentCmd{}
// NewLockUnspentCmd creates a new LockUnspentCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewLockUnspentCmd(id interface{}, unlock bool, optArgs ...[]TransactionInput) (*LockUnspentCmd, error) {
var transactions []TransactionInput
if len(optArgs) > 1 {
return nil, ErrWrongNumberOfParams
}
if len(optArgs) > 0 {
transactions = optArgs[0]
}
return &LockUnspentCmd{
id: id,
Unlock: unlock,
Transactions: transactions,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *LockUnspentCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *LockUnspentCmd) Method() string {
return "lockunspent"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *LockUnspentCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "lockunspent",
Id: cmd.id,
Params: []interface{}{
cmd.Unlock,
},
}
if len(cmd.Transactions) > 0 {
raw.Params = append(raw.Params, cmd.Transactions)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *LockUnspentCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 2 || len(r.Params) < 1 {
return ErrWrongNumberOfParams
}
unlock, ok := r.Params[0].(bool)
if !ok {
return errors.New("first parameter unlock must be a bool")
}
optArgs := make([][]TransactionInput, 0, 1)
if len(r.Params) > 1 {
iinputs, ok := r.Params[1].([]map[string]interface{})
if !ok {
return errors.New("second optional parameter transactions must be an array of objects")
}
inputs := make([]TransactionInput, len(iinputs))
for i, v := range iinputs {
if len(v) != 2 {
return errors.New("input with wrong number of members")
}
txid, ok := v["txid"]
if !ok {
return errors.New("input without txid")
}
inputs[i].Txid, ok = txid.(string)
if !ok {
return errors.New("input txid isn't a string")
}
vout, ok := v["vout"]
if !ok {
return errors.New("input without vout")
}
fvout, ok := vout.(float64)
if !ok {
return errors.New("input vout not a number")
}
inputs[i].Vout = int(fvout)
}
optArgs = append(optArgs, inputs)
}
newCmd, err := NewLockUnspentCmd(r.Id, unlock, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// MoveCmd is a type handling custom marshaling and
// unmarshaling of move JSON RPC commands.
type MoveCmd struct {
id interface{}
FromAccount string
ToAccount string
Amount int64
MinConf int
Comment string
}
// Enforce that MoveCmd satisifies the Cmd interface.
var _ Cmd = &MoveCmd{}
// NewMoveCmd creates a new MoveCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewMoveCmd(id interface{}, fromaccount string, toaccount string, amount int64, optArgs ...interface{}) (*MoveCmd, error) {
minconf := 1
comment := ""
if len(optArgs) > 2 {
return nil, ErrWrongNumberOfParams
}
if len(optArgs) > 0 {
m, ok := optArgs[0].(int)
if !ok {
return nil, errors.New("first optional parameter minconf is not a int64")
}
minconf = m
}
if len(optArgs) > 1 {
c, ok := optArgs[1].(string)
if !ok {
return nil, errors.New("second optional parameter comment is not a string")
}
comment = c
}
return &MoveCmd{
id: id,
FromAccount: fromaccount,
ToAccount: toaccount,
Amount: amount,
MinConf: minconf,
Comment: comment,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *MoveCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *MoveCmd) Method() string {
return "move"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *MoveCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "move",
Id: cmd.id,
Params: []interface{}{
cmd.FromAccount,
cmd.ToAccount,
float64(cmd.Amount) / 1e8, //convert to BTC
},
}
if cmd.MinConf != 1 || cmd.Comment != "" {
raw.Params = append(raw.Params, cmd.MinConf)
}
if cmd.Comment != "" {
raw.Params = append(raw.Params, cmd.Comment)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *MoveCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 5 || len(r.Params) < 3 {
return ErrWrongNumberOfParams
}
fromaccount, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter fromaccount must be a string")
}
toaccount, ok := r.Params[1].(string)
if !ok {
return errors.New("second parameter toaccount must be a string")
}
amount, ok := r.Params[2].(float64)
if !ok {
return errors.New("third parameter toaccount must be a number")
}
samount, err := JSONToAmount(amount)
if err != nil {
return err
}
optArgs := make([]interface{}, 0, 2)
if len(r.Params) > 3 {
minconf, ok := r.Params[3].(float64)
if !ok {
return errors.New("fourth optional parameter minconf must be a number")
}
optArgs = append(optArgs, int(minconf))
}
if len(r.Params) > 4 {
comment, ok := r.Params[4].(string)
if !ok {
return errors.New("fifth optional parameter comment must be a string")
}
optArgs = append(optArgs, comment)
}
newCmd, err := NewMoveCmd(r.Id, fromaccount, toaccount, samount,
optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// PingCmd is a type handling custom marshaling and
// unmarshaling of ping JSON RPC commands.
type PingCmd struct {
id interface{}
}
// Enforce that PingCmd satisifies the Cmd interface.
var _ Cmd = &PingCmd{}
// NewPingCmd creates a new PingCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewPingCmd(id interface{}) (*PingCmd, error) {
return &PingCmd{
id: id,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *PingCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *PingCmd) Method() string {
return "ping"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *PingCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "ping",
Id: cmd.id,
Params: []interface{}{},
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *PingCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 0 {
return ErrWrongNumberOfParams
}
newCmd, err := NewPingCmd(r.Id)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// SendFromCmd is a type handling custom marshaling and
// unmarshaling of sendfrom JSON RPC commands.
type SendFromCmd struct {
id interface{}
FromAccount string
ToAddress string
Amount int64
MinConf int
Comment string
CommentTo string
}
// Enforce that SendFromCmd satisifies the Cmd interface.
var _ Cmd = &SendFromCmd{}
// NewSendFromCmd creates a new SendFromCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewSendFromCmd(id interface{}, fromaccount string, toaddress string, amount int64, optArgs ...interface{}) (*SendFromCmd, error) {
minconf := 1
comment := ""
commentto := ""
if len(optArgs) > 3 {
return nil, ErrWrongNumberOfParams
}
if len(optArgs) > 0 {
m, ok := optArgs[0].(int)
if !ok {
return nil, errors.New("first optional parameter minconf is not a int64")
}
minconf = m
}
if len(optArgs) > 1 {
c, ok := optArgs[1].(string)
if !ok {
return nil, errors.New("second optional parameter comment is not a string")
}
comment = c
}
if len(optArgs) > 2 {
cto, ok := optArgs[2].(string)
if !ok {
return nil, errors.New("third optional parameter commentto is not a string")
}
commentto = cto
}
return &SendFromCmd{
id: id,
FromAccount: fromaccount,
ToAddress: toaddress,
Amount: amount,
MinConf: minconf,
Comment: comment,
CommentTo: commentto,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *SendFromCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *SendFromCmd) Method() string {
return "sendfrom"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *SendFromCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "sendfrom",
Id: cmd.id,
Params: []interface{}{
cmd.FromAccount,
cmd.ToAddress,
float64(cmd.Amount) / 1e8, //convert to BTC
},
}
if cmd.MinConf != 1 || cmd.Comment != "" || cmd.CommentTo != "" {
raw.Params = append(raw.Params, cmd.MinConf)
}
if cmd.Comment != "" || cmd.CommentTo != "" {
raw.Params = append(raw.Params, cmd.Comment)
}
if cmd.CommentTo != "" {
raw.Params = append(raw.Params, cmd.CommentTo)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *SendFromCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 6 || len(r.Params) < 3 {
return ErrWrongNumberOfParams
}
fromaccount, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter fromaccount must be a string")
}
toaccount, ok := r.Params[1].(string)
if !ok {
return errors.New("second parameter toaccount must be a string")
}
amount, ok := r.Params[2].(float64)
if !ok {
return errors.New("third parameter toaccount must be a number")
}
samount, err := JSONToAmount(amount)
if err != nil {
return err
}
optArgs := make([]interface{}, 0, 3)
if len(r.Params) > 3 {
minconf, ok := r.Params[3].(float64)
if !ok {
return errors.New("fourth optional parameter minconf must be a number")
}
optArgs = append(optArgs, int(minconf))
}
if len(r.Params) > 4 {
comment, ok := r.Params[4].(string)
if !ok {
return errors.New("fifth optional parameter comment must be a string")
}
optArgs = append(optArgs, comment)
}
if len(r.Params) > 5 {
commentto, ok := r.Params[5].(string)
if !ok {
return errors.New("sixth optional parameter commentto must be a string")
}
optArgs = append(optArgs, commentto)
}
newCmd, err := NewSendFromCmd(r.Id, fromaccount, toaccount, samount,
optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// SendManyCmd is a type handling custom marshaling and
// unmarshaling of sendmany JSON RPC commands.
type SendManyCmd struct {
id interface{}
FromAccount string
Amounts map[string]int64
MinConf int
Comment string
}
// Enforce that SendManyCmd satisifies the Cmd interface.
var _ Cmd = &SendManyCmd{}
// NewSendManyCmd creates a new SendManyCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewSendManyCmd(id interface{}, fromaccount string, amounts map[string]int64, optArgs ...interface{}) (*SendManyCmd, error) {
minconf := 1
comment := ""
if len(optArgs) > 2 {
return nil, ErrWrongNumberOfParams
}
if len(optArgs) > 0 {
m, ok := optArgs[0].(int)
if !ok {
return nil, errors.New("first optional parameter minconf is not a int64")
}
minconf = m
}
if len(optArgs) > 1 {
c, ok := optArgs[1].(string)
if !ok {
return nil, errors.New("second optional parameter comment is not a string")
}
comment = c
}
return &SendManyCmd{
id: id,
FromAccount: fromaccount,
Amounts: amounts,
MinConf: minconf,
Comment: comment,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *SendManyCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *SendManyCmd) Method() string {
return "sendmany"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *SendManyCmd) MarshalJSON() ([]byte, error) {
floatAmount := make(map[string]float64)
for k, v := range cmd.Amounts {
floatAmount[k] = float64(v) / 1e8
}
raw := RawCmd{
Jsonrpc: "1.0",
Method: "sendmany",
Id: cmd.id,
Params: []interface{}{
cmd.FromAccount,
floatAmount,
},
}
if cmd.MinConf != 1 || cmd.Comment != "" {
raw.Params = append(raw.Params, cmd.MinConf)
}
if cmd.Comment != "" {
raw.Params = append(raw.Params, cmd.Comment)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *SendManyCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 4 || len(r.Params) < 2 {
return ErrWrongNumberOfParams
}
fromaccount, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter fromaccount must be a string")
}
iamounts, ok := r.Params[1].(map[string]interface{})
if !ok {
return errors.New("second parameter toaccount must be a JSON object")
}
amounts := make(map[string]int64)
for k, v := range iamounts {
famount, ok := v.(float64)
if !ok {
return errors.New("second parameter toaccount must be a string to number map")
}
var err error
amounts[k], err = JSONToAmount(famount)
if err != nil {
return err
}
}
optArgs := make([]interface{}, 0, 2)
if len(r.Params) > 2 {
minconf, ok := r.Params[2].(float64)
if !ok {
return errors.New("third optional parameter minconf must be a number")
}
optArgs = append(optArgs, int(minconf))
}
if len(r.Params) > 3 {
comment, ok := r.Params[3].(string)
if !ok {
return errors.New("fourth optional parameter comment must be a string")
}
optArgs = append(optArgs, comment)
}
newCmd, err := NewSendManyCmd(r.Id, fromaccount, amounts, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// SendRawTransactionCmd is a type handling custom marshaling and
// unmarshaling of sendrawtransaction JSON RPC commands.
type SendRawTransactionCmd struct {
id interface{}
HexTx string
}
// Enforce that SendRawTransactionCmd satisifies the Cmd interface.
var _ Cmd = &SendRawTransactionCmd{}
// NewSendRawTransactionCmd creates a new SendRawTransactionCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewSendRawTransactionCmd(id interface{}, hextx string) (*SendRawTransactionCmd, error) {
return &SendRawTransactionCmd{
id: id,
HexTx: hextx,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *SendRawTransactionCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *SendRawTransactionCmd) Method() string {
return "sendrawtransaction"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *SendRawTransactionCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "sendrawtransaction",
Id: cmd.id,
Params: []interface{}{
cmd.HexTx,
},
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *SendRawTransactionCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 1 {
return ErrWrongNumberOfParams
}
hextx, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter hextx must be a string")
}
newCmd, err := NewSendRawTransactionCmd(r.Id, hextx)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// SendToAddressCmd is a type handling custom marshaling and
// unmarshaling of sendtoaddress JSON RPC commands.
type SendToAddressCmd struct {
id interface{}
Address string
Amount int64
Comment string
CommentTo string
}
// Enforce that SendToAddressCmd satisifies the Cmd interface.
var _ Cmd = &SendToAddressCmd{}
// NewSendToAddressCmd creates a new SendToAddressCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewSendToAddressCmd(id interface{}, address string, amount int64, optArgs ...interface{}) (*SendToAddressCmd, error) {
comment := ""
commentto := ""
if len(optArgs) > 2 {
return nil, ErrWrongNumberOfParams
}
if len(optArgs) > 0 {
c, ok := optArgs[0].(string)
if !ok {
return nil, errors.New("first optional parameter comment is not a string")
}
comment = c
}
if len(optArgs) > 1 {
cto, ok := optArgs[1].(string)
if !ok {
return nil, errors.New("second optional parameter commentto is not a string")
}
commentto = cto
}
return &SendToAddressCmd{
id: id,
Address: address,
Amount: amount,
Comment: comment,
CommentTo: commentto,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *SendToAddressCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *SendToAddressCmd) Method() string {
return "sendtoaddress"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *SendToAddressCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "sendtoaddress",
Id: cmd.id,
Params: []interface{}{
cmd.Address,
float64(cmd.Amount) / 1e8, //convert to BTC
},
}
if cmd.Comment != "" || cmd.CommentTo != "" {
raw.Params = append(raw.Params, cmd.Comment)
}
if cmd.CommentTo != "" {
raw.Params = append(raw.Params, cmd.CommentTo)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *SendToAddressCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 4 || len(r.Params) < 2 {
return ErrWrongNumberOfParams
}
toaccount, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter toaccount must be a string")
}
amount, ok := r.Params[1].(float64)
if !ok {
return errors.New("second parameter amount must be a number")
}
samount, err := JSONToAmount(amount)
if err != nil {
return err
}
optArgs := make([]interface{}, 0, 2)
if len(r.Params) > 2 {
comment, ok := r.Params[2].(string)
if !ok {
return errors.New("third optional parameter comment must be a string")
}
optArgs = append(optArgs, comment)
}
if len(r.Params) > 3 {
commentto, ok := r.Params[3].(string)
if !ok {
return errors.New("sixth optional parameter commentto must be a string")
}
optArgs = append(optArgs, commentto)
}
newCmd, err := NewSendToAddressCmd(r.Id, toaccount, samount,
optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// SetAccountCmd is a type handling custom marshaling and
// unmarshaling of setaccount JSON RPC commands.
type SetAccountCmd struct {
id interface{}
Address string
Account string
}
// Enforce that SetAccountCmd satisifies the Cmd interface.
var _ Cmd = &SetAccountCmd{}
// NewSetAccountCmd creates a new SetAccountCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewSetAccountCmd(id interface{}, address string, account string) (*SetAccountCmd, error) {
return &SetAccountCmd{
id: id,
Address: address,
Account: account,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *SetAccountCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *SetAccountCmd) Method() string {
return "setaccount"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *SetAccountCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "setaccount",
Id: cmd.id,
Params: []interface{}{
cmd.Address,
cmd.Account,
},
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *SetAccountCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 2 || len(r.Params) < 2 {
return ErrWrongNumberOfParams
}
address, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter address must be a string")
}
account, ok := r.Params[1].(string)
if !ok {
return errors.New("second parameter account must be a string")
}
newCmd, err := NewSetAccountCmd(r.Id, address, account)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// SetGenerateCmd is a type handling custom marshaling and
// unmarshaling of setgenerate JSON RPC commands.
type SetGenerateCmd struct {
id interface{}
Generate bool
GenProcLimit int
}
// Enforce that SetGenerateCmd satisifies the Cmd interface.
var _ Cmd = &SetGenerateCmd{}
// NewSetGenerateCmd creates a new SetGenerateCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewSetGenerateCmd(id interface{}, generate bool, optArgs ...int) (*SetGenerateCmd, error) {
genproclimit := 0
if len(optArgs) > 1 {
return nil, ErrTooManyOptArgs
}
if len(optArgs) == 1 {
genproclimit = optArgs[0]
}
return &SetGenerateCmd{
id: id,
Generate: generate,
GenProcLimit: genproclimit,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *SetGenerateCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *SetGenerateCmd) Method() string {
return "setgenerate"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *SetGenerateCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "setgenerate",
Id: cmd.id,
Params: []interface{}{
cmd.Generate,
},
}
if cmd.GenProcLimit != 0 {
raw.Params = append(raw.Params, cmd.GenProcLimit)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *SetGenerateCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 2 || len(r.Params) < 1 {
return ErrWrongNumberOfParams
}
generate, ok := r.Params[0].(bool)
if !ok {
return errors.New("first parameter generate must be a bool")
}
optArgs := make([]int, 0, 1)
if len(r.Params) > 1 {
genproclimit, ok := r.Params[1].(float64)
if !ok {
return errors.New("second parameter genproclimit must be a number")
}
optArgs = append(optArgs, int(genproclimit))
}
newCmd, err := NewSetGenerateCmd(r.Id, generate, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// SetTxFeeCmd is a type handling custom marshaling and
// unmarshaling of settxfee JSON RPC commands.
type SetTxFeeCmd struct {
id interface{}
Amount int64
}
// Enforce that SetTxFeeCmd satisifies the Cmd interface.
var _ Cmd = &SetTxFeeCmd{}
// NewSetTxFeeCmd creates a new SetTxFeeCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewSetTxFeeCmd(id interface{}, amount int64) (*SetTxFeeCmd, error) {
return &SetTxFeeCmd{
id: id,
Amount: amount,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *SetTxFeeCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *SetTxFeeCmd) Method() string {
return "settxfee"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *SetTxFeeCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "settxfee",
Id: cmd.id,
Params: []interface{}{
float64(cmd.Amount) / 1e8, //convert to BTC
},
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *SetTxFeeCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 1 {
return ErrWrongNumberOfParams
}
amount, ok := r.Params[0].(float64)
if !ok {
return errors.New("first parameter amount must be a number")
}
samount, err := JSONToAmount(amount)
if err != nil {
return err
}
newCmd, err := NewSetTxFeeCmd(r.Id, samount)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// SignMessageCmd is a type handling custom marshaling and
// unmarshaling of signmessage JSON RPC commands.
type SignMessageCmd struct {
id interface{}
Address string
Message string
}
// Enforce that SignMessageCmd satisifies the Cmd interface.
var _ Cmd = &SignMessageCmd{}
// NewSignMessageCmd creates a new SignMessageCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewSignMessageCmd(id interface{}, address string, message string) (*SignMessageCmd, error) {
return &SignMessageCmd{
id: id,
Address: address,
Message: message,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *SignMessageCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *SignMessageCmd) Method() string {
return "signmessage"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *SignMessageCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "signmessage",
Id: cmd.id,
Params: []interface{}{
cmd.Address,
cmd.Message,
},
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *SignMessageCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 2 {
return ErrWrongNumberOfParams
}
address, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter address must be a string")
}
message, ok := r.Params[1].(string)
if !ok {
return errors.New("second parameter message must be a string")
}
newCmd, err := NewSignMessageCmd(r.Id, address, message)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
type RawTxInput struct {
Txid string `json:"txid"`
Vout int `json:"vout"`
ScriptPubKey string `json:"scriptPubKey"`
RedeemScript string `json:"redeemScript"`
}
// SignRawTransactionCmd is a type handling custom marshaling and
// unmarshaling of signrawtransaction JSON RPC commands.
type SignRawTransactionCmd struct {
id interface{}
RawTx string
Inputs []RawTxInput
PrivKeys []string
Flags string
}
// Enforce that SignRawTransactionCmd satisifies the Cmd interface.
var _ Cmd = &SignRawTransactionCmd{}
// NewSignRawTransactionCmd creates a new SignRawTransactionCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewSignRawTransactionCmd(id interface{}, rawTx string, optArgs ...interface{}) (*SignRawTransactionCmd, error) {
var inputs []RawTxInput
var privkeys []string
var flags string
if len(optArgs) > 3 {
return nil, ErrTooManyOptArgs
}
if len(optArgs) > 0 {
ip, ok := optArgs[0].([]RawTxInput)
if !ok {
return nil, errors.New("first optional parameter inputs should be an array of RawTxInput")
}
inputs = ip
}
if len(optArgs) > 1 {
pk, ok := optArgs[1].([]string)
if !ok {
return nil, errors.New("second optional parameter inputs should be an array of string")
}
privkeys = pk
}
if len(optArgs) > 2 {
fl, ok := optArgs[2].(string)
if !ok {
return nil, errors.New("third optional parameter flags should be a string")
}
flags = fl
}
return &SignRawTransactionCmd{
id: id,
RawTx: rawTx,
Inputs: inputs,
PrivKeys: privkeys,
Flags: flags,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *SignRawTransactionCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *SignRawTransactionCmd) Method() string {
return "signrawtransaction"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *SignRawTransactionCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "signrawtransaction",
Id: cmd.id,
Params: []interface{}{
cmd.RawTx,
},
}
if len(cmd.Inputs) > 0 || len(cmd.PrivKeys) > 0 || cmd.Flags != "" {
raw.Params = append(raw.Params, cmd.Inputs)
}
if len(cmd.PrivKeys) > 0 || cmd.Flags != "" {
raw.Params = append(raw.Params, cmd.PrivKeys)
}
if cmd.Flags != "" {
raw.Params = append(raw.Params, cmd.Flags)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *SignRawTransactionCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 4 || len(r.Params) < 1 {
return ErrWrongNumberOfParams
}
rawtx, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter rawtx must be a string")
}
optArgs := make([]interface{}, 0, 3)
if len(r.Params) > 1 {
ip, ok := r.Params[1].([]interface{})
if !ok {
return errors.New("second optional parameter inputs must be an array")
}
inputs := make([]RawTxInput, len(ip))
for i, val := range ip {
mip, ok := val.(map[string]interface{})
if !ok {
return errors.New("second optional parameter inputs must be an array of objects")
}
txid, ok := mip["txid"]
if !ok {
return errors.New("txid missing in input object")
}
inputs[i].Txid, ok = txid.(string)
if !ok {
return errors.New("txid not a string in input object")
}
vout, ok := mip["vout"]
if !ok {
return errors.New("vout missing in input object")
}
fvout, ok := vout.(float64)
if !ok {
return errors.New("vout not a number in input object")
}
inputs[i].Vout = int(fvout)
scriptpubkey, ok := mip["scriptpubkey"]
if !ok {
return errors.New("scriptpubkey missing in input object")
}
inputs[i].ScriptPubKey, ok = scriptpubkey.(string)
if !ok {
return errors.New("scriptpubkey not a string in input object")
}
redeemScript, ok := mip["redeemScript"]
if !ok {
return errors.New("redeemScript missing in input object")
}
inputs[i].RedeemScript, ok = redeemScript.(string)
if !ok {
return errors.New("redeemScript not a string in input object")
}
}
optArgs = append(optArgs, inputs)
}
if len(r.Params) > 2 {
privkeys, ok := r.Params[2].([]string)
if !ok {
return errors.New("third optional parameter privkeys is not an array of strings")
}
optArgs = append(optArgs, privkeys)
}
if len(r.Params) > 3 {
flags, ok := r.Params[3].([]string)
if !ok {
return errors.New("fourth optional parameter flags is not a string")
}
optArgs = append(optArgs, flags)
}
newCmd, err := NewSignRawTransactionCmd(r.Id, rawtx, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// StopCmd is a type handling custom marshaling and
// unmarshaling of stop JSON RPC commands.
type StopCmd struct {
id interface{}
}
// Enforce that StopCmd satisifies the Cmd interface.
var _ Cmd = &StopCmd{}
// NewStopCmd creates a new StopCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewStopCmd(id interface{}) (*StopCmd, error) {
return &StopCmd{
id: id,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *StopCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *StopCmd) Method() string {
return "stop"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *StopCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "stop",
Id: cmd.id,
Params: []interface{}{},
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *StopCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 0 {
return ErrWrongNumberOfParams
}
newCmd, err := NewStopCmd(r.Id)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// SubmitBlockOptions represents the optional options struct provided with
// a SubmitBlockCmd command.
type SubmitBlockOptions struct {
// must be provided if server provided a workid with template.
WorkId string `json:"workid,omitempty"`
}
// SubmitBlockCmd is a type handling custom marshaling and
// unmarshaling of submitblock JSON RPC commands.
type SubmitBlockCmd struct {
id interface{}
HexBlock string
Options *SubmitBlockOptions
}
// Enforce that SubmitBlockCmd satisifies the Cmd interface.
var _ Cmd = &SubmitBlockCmd{}
// NewSubmitBlockCmd creates a new SubmitBlockCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewSubmitBlockCmd(id interface{}, hexblock string, optArgs ...*SubmitBlockOptions) (*SubmitBlockCmd, error) {
var options *SubmitBlockOptions
if len(optArgs) > 0 {
if len(optArgs) > 1 {
return nil, ErrTooManyOptArgs
}
options = optArgs[0]
}
return &SubmitBlockCmd{
id: id,
HexBlock: hexblock,
Options: options,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *SubmitBlockCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *SubmitBlockCmd) Method() string {
return "submitblock"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *SubmitBlockCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "submitblock",
Id: cmd.id,
Params: []interface{}{
cmd.HexBlock,
},
}
if cmd.Options != nil {
raw.Params = append(raw.Params, cmd.Options)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *SubmitBlockCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 2 || len(r.Params) < 1 {
return ErrWrongNumberOfParams
}
hexblock, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter hexblock must be a string")
}
optArgs := make([]*SubmitBlockOptions, 0, 1)
if len(r.Params) == 2 {
obj, ok := r.Params[1].(map[string]interface{})
if !ok {
return errors.New("second optioanl parameter options must be an object")
}
options := new(SubmitBlockOptions)
// workid is optional
iworkid, ok := obj["workid"]
if ok {
workid, ok := iworkid.(string)
if !ok {
return errors.New("object member workid must be a string")
}
options.WorkId = workid
}
optArgs = append(optArgs, options)
}
newCmd, err := NewSubmitBlockCmd(r.Id, hexblock, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// ValidateAddressCmd is a type handling custom marshaling and
// unmarshaling of validateaddress JSON RPC commands.
type ValidateAddressCmd struct {
id interface{}
Address string
}
// Enforce that ValidateAddressCmd satisifies the Cmd interface.
var _ Cmd = &ValidateAddressCmd{}
// NewValidateAddressCmd creates a new ValidateAddressCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewValidateAddressCmd(id interface{}, address string) (*ValidateAddressCmd, error) {
return &ValidateAddressCmd{
id: id,
Address: address,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *ValidateAddressCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *ValidateAddressCmd) Method() string {
return "validateaddress"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *ValidateAddressCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "validateaddress",
Id: cmd.id,
Params: []interface{}{
cmd.Address,
},
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *ValidateAddressCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 1 {
return ErrWrongNumberOfParams
}
address, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter address must be a string")
}
newCmd, err := NewValidateAddressCmd(r.Id, address)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// VerifyChainCmd is a type handling custom marshaling and
// unmarshaling of verifychain JSON RPC commands.
type VerifyChainCmd struct {
id interface{}
CheckLevel int32
CheckDepth int32
}
// Enforce that VerifyChainCmd satisifies the Cmd interface.
var _ Cmd = &VerifyChainCmd{}
// NewVerifyChainCmd creates a new VerifyChainCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewVerifyChainCmd(id interface{}, optArgs ...int32) (*VerifyChainCmd, error) {
// bitcoind default, but they do vary it based on cli args.
var checklevel int32 = 3
var checkdepth int32 = 288
if len(optArgs) > 0 {
if len(optArgs) > 2 {
return nil, ErrTooManyOptArgs
}
checklevel = optArgs[0]
if len(optArgs) > 1 {
checkdepth = optArgs[1]
}
}
return &VerifyChainCmd{
id: id,
CheckLevel: checklevel,
CheckDepth: checkdepth,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *VerifyChainCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *VerifyChainCmd) Method() string {
return "verifychain"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *VerifyChainCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "verifychain",
Id: cmd.id,
Params: []interface{}{},
}
// XXX(oga) magic numbers
if cmd.CheckLevel != 3 || cmd.CheckDepth != 288 {
raw.Params = append(raw.Params, cmd.CheckLevel)
}
if cmd.CheckDepth != 288 {
raw.Params = append(raw.Params, cmd.CheckDepth)
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *VerifyChainCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) > 2 {
return ErrWrongNumberOfParams
}
optArgs := make([]int32, 0, 2)
if len(r.Params) > 0 {
checklevel, ok := r.Params[0].(float64)
if !ok {
return errors.New("first optional parameter checklevel must be a number")
}
optArgs = append(optArgs, int32(checklevel))
}
if len(r.Params) > 1 {
checkdepth, ok := r.Params[1].(float64)
if !ok {
return errors.New("second optional parameter checkdepth must be a number")
}
optArgs = append(optArgs, int32(checkdepth))
}
newCmd, err := NewVerifyChainCmd(r.Id, optArgs...)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// VerifyMessageCmd is a type handling custom marshaling and
// unmarshaling of verifymessage JSON RPC commands.
type VerifyMessageCmd struct {
id interface{}
Address string
Signature string
Message string
}
// Enforce that VerifyMessageCmd satisifies the Cmd interface.
var _ Cmd = &VerifyMessageCmd{}
// NewVerifyMessageCmd creates a new VerifyMessageCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewVerifyMessageCmd(id interface{}, address string, signature string,
message string) (*VerifyMessageCmd, error) {
return &VerifyMessageCmd{
id: id,
Address: address,
Signature: signature,
Message: message,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *VerifyMessageCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *VerifyMessageCmd) Method() string {
return "verifymessage"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *VerifyMessageCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "verifymessage",
Id: cmd.id,
Params: []interface{}{
cmd.Address,
cmd.Signature,
cmd.Message,
},
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *VerifyMessageCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 3 {
return ErrWrongNumberOfParams
}
address, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter address must be a string")
}
signature, ok := r.Params[1].(string)
if !ok {
return errors.New("second parameter signature must be a string")
}
message, ok := r.Params[2].(string)
if !ok {
return errors.New("third parameter message must be a string")
}
newCmd, err := NewVerifyMessageCmd(r.Id, address, signature, message)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// WalletLockCmd is a type handling custom marshaling and
// unmarshaling of walletlock JSON RPC commands.
type WalletLockCmd struct {
id interface{}
}
// Enforce that WalletLockCmd satisifies the Cmd interface.
var _ Cmd = &WalletLockCmd{}
// NewWalletLockCmd creates a new WalletLockCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewWalletLockCmd(id interface{}) (*WalletLockCmd, error) {
return &WalletLockCmd{
id: id,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *WalletLockCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *WalletLockCmd) Method() string {
return "walletlock"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *WalletLockCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "walletlock",
Id: cmd.id,
Params: []interface{}{},
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *WalletLockCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 0 {
return ErrWrongNumberOfParams
}
newCmd, err := NewWalletLockCmd(r.Id)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// WalletPassphraseCmd is a type handling custom marshaling and
// unmarshaling of walletpassphrase JSON RPC commands.
type WalletPassphraseCmd struct {
id interface{}
Passphrase string
Timeout int64
}
// Enforce that WalletPassphraseCmd satisifies the Cmd interface.
var _ Cmd = &WalletPassphraseCmd{}
// NewWalletPassphraseCmd creates a new WalletPassphraseCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewWalletPassphraseCmd(id interface{}, passphrase string, timeout int64) (*WalletPassphraseCmd, error) {
return &WalletPassphraseCmd{
id: id,
Passphrase: passphrase,
Timeout: timeout,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *WalletPassphraseCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *WalletPassphraseCmd) Method() string {
return "walletpassphrase"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *WalletPassphraseCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "walletpassphrase",
Id: cmd.id,
Params: []interface{}{
cmd.Passphrase,
cmd.Timeout,
},
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *WalletPassphraseCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 2 {
return ErrWrongNumberOfParams
}
passphrase, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter passphrase must be a string")
}
timeout, ok := r.Params[1].(float64)
if !ok {
return errors.New("second parameter timeout must be a number")
}
newCmd, err := NewWalletPassphraseCmd(r.Id, passphrase, int64(timeout))
if err != nil {
return err
}
*cmd = *newCmd
return nil
}
// WalletPassphraseChangeCmd is a type handling custom marshaling and
// unmarshaling of walletpassphrasechange JSON RPC commands.
type WalletPassphraseChangeCmd struct {
id interface{}
OldPassphrase string
NewPassphrase string
}
// Enforce that WalletPassphraseChangeCmd satisifies the Cmd interface.
var _ Cmd = &WalletPassphraseChangeCmd{}
// NewWalletPassphraseChangeCmd creates a new WalletPassphraseChangeCmd. Optionally a
// pointer to a TemplateRequest may be provided.
func NewWalletPassphraseChangeCmd(id interface{}, oldpassphrase, newpassphrase string) (*WalletPassphraseChangeCmd, error) {
return &WalletPassphraseChangeCmd{
id: id,
OldPassphrase: oldpassphrase,
NewPassphrase: newpassphrase,
}, nil
}
// Id satisfies the Cmd interface by returning the id of the command.
func (cmd *WalletPassphraseChangeCmd) Id() interface{} {
return cmd.id
}
// Method satisfies the Cmd interface by returning the json method.
func (cmd *WalletPassphraseChangeCmd) Method() string {
return "walletpassphrasechange"
}
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
func (cmd *WalletPassphraseChangeCmd) MarshalJSON() ([]byte, error) {
raw := RawCmd{
Jsonrpc: "1.0",
Method: "walletpassphrasechange",
Id: cmd.id,
Params: []interface{}{
cmd.OldPassphrase,
cmd.NewPassphrase,
},
}
return json.Marshal(raw)
}
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
// the Cmd interface.
func (cmd *WalletPassphraseChangeCmd) UnmarshalJSON(b []byte) error {
// Unmashal into a RawCmd
var r RawCmd
if err := json.Unmarshal(b, &r); err != nil {
return err
}
if len(r.Params) != 2 {
return ErrWrongNumberOfParams
}
oldpassphrase, ok := r.Params[0].(string)
if !ok {
return errors.New("first parameter oldpassphrase must be a string")
}
newpassphrase, ok := r.Params[1].(string)
if !ok {
return errors.New("second parameter newpassphrase must be a string")
}
newCmd, err := NewWalletPassphraseChangeCmd(r.Id, oldpassphrase, newpassphrase)
if err != nil {
return err
}
*cmd = *newCmd
return nil
}