7089 lines
176 KiB
Go
7089 lines
176 KiB
Go
// Copyright (c) 2013-2014 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"
|
|
"fmt"
|
|
)
|
|
|
|
// 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 []json.RawMessage `json:"params"`
|
|
}
|
|
|
|
// NewRawCmd returns a new raw command given the provided id, method, and
|
|
// parameters. The parameters are marshalled into a json.RawMessage for the
|
|
// Params field of the returned raw command.
|
|
func NewRawCmd(id interface{}, method string, params []interface{}) (*RawCmd, error) {
|
|
rawParams := make([]json.RawMessage, 0, len(params))
|
|
for _, param := range params {
|
|
marshalledParam, err := json.Marshal(param)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
rawMessage := json.RawMessage(marshalledParam)
|
|
rawParams = append(rawParams, rawMessage)
|
|
}
|
|
|
|
return &RawCmd{
|
|
Jsonrpc: "1.0",
|
|
Id: id,
|
|
Method: method,
|
|
Params: rawParams,
|
|
}, nil
|
|
}
|
|
|
|
// RawCmdParser is a function to create a custom Cmd from a RawCmd.
|
|
type RawCmdParser func(*RawCmd) (Cmd, error)
|
|
|
|
// ReplyParser is a function a custom Cmd can use to unmarshal the results of a
|
|
// reply into a concrete struct.
|
|
type ReplyParser func(json.RawMessage) (interface{}, error)
|
|
|
|
type cmd struct {
|
|
parser RawCmdParser
|
|
replyParser ReplyParser
|
|
helpString string
|
|
}
|
|
|
|
var customCmds = make(map[string]cmd)
|
|
|
|
// RegisterCustomCmd registers a custom RawCmd parsing func, reply parsing func,
|
|
// and help text for a non-standard Bitcoin command.
|
|
func RegisterCustomCmd(method string, parser RawCmdParser, replyParser ReplyParser, helpString string) {
|
|
customCmds[method] = cmd{
|
|
parser: parser,
|
|
replyParser: replyParser,
|
|
helpString: helpString,
|
|
}
|
|
}
|
|
|
|
// 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
|
|
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 "estimatefee":
|
|
cmd = new(EstimateFeeCmd)
|
|
|
|
case "estimatepriority":
|
|
cmd = new(EstimatePriorityCmd)
|
|
|
|
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 "getblockchaininfo":
|
|
cmd = new(GetBlockChainInfoCmd)
|
|
|
|
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 "getnetworkinfo":
|
|
cmd = new(GetNetworkInfoCmd)
|
|
|
|
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 "invalidateblock":
|
|
cmd = new(InvalidateBlockCmd)
|
|
|
|
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 "reconsiderblock":
|
|
cmd = new(ReconsiderBlockCmd)
|
|
|
|
case "searchrawtransaction":
|
|
cmd = new(SearchRawTransactionCmd)
|
|
|
|
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 c, ok := customCmds[r.Method]; ok {
|
|
cmd, err := c.parser(&r)
|
|
if err != nil {
|
|
cmd = newUnparsableCmd(r.Id, r.Method)
|
|
return cmd, err
|
|
}
|
|
return cmd, nil
|
|
}
|
|
}
|
|
|
|
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, err := NewRawCmd(cmd.id, cmd.method, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *unparsableCmd) UnmarshalJSON(b []byte) error {
|
|
// Unmarshal 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) {
|
|
params := make([]interface{}, 2, 3)
|
|
params[0] = cmd.NRequired
|
|
params[1] = cmd.Keys
|
|
if cmd.Account != "" {
|
|
params = append(params, cmd.Account)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *AddMultisigAddressCmd) 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 || len(r.Params) > 3 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var nRequired int
|
|
if err := json.Unmarshal(r.Params[0], &nRequired); err != nil {
|
|
return fmt.Errorf("first parameter 'nrequired' must be an integer: %v", err)
|
|
}
|
|
|
|
var keys []string
|
|
if err := json.Unmarshal(r.Params[1], &keys); err != nil {
|
|
return fmt.Errorf("second parameter 'keys' must be an array of strings: %v", err)
|
|
}
|
|
|
|
var account string
|
|
if len(r.Params) > 2 {
|
|
if err := json.Unmarshal(r.Params[2], &account); err != nil {
|
|
return fmt.Errorf("third optional parameter 'account' must be a string: %v", err)
|
|
}
|
|
}
|
|
newCmd, err := NewAddMultisigAddressCmd(r.Id, 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) {
|
|
params := []interface{}{
|
|
cmd.Addr,
|
|
cmd.SubCmd,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *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
|
|
}
|
|
|
|
var addr string
|
|
if err := json.Unmarshal(r.Params[0], &addr); err != nil {
|
|
return fmt.Errorf("first parameter 'addr' must be a string: %v", err)
|
|
}
|
|
|
|
var subcmd string
|
|
if err := json.Unmarshal(r.Params[1], &subcmd); err != nil {
|
|
return fmt.Errorf("second parameter 'subcmd' must be a string: %v", err)
|
|
}
|
|
|
|
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) {
|
|
params := []interface{}{
|
|
cmd.Destination,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *BackupWalletCmd) 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) != 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var destination string
|
|
if err := json.Unmarshal(r.Params[0], &destination); err != nil {
|
|
return fmt.Errorf("first parameter 'destination' must be a string: %v", err)
|
|
}
|
|
|
|
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) {
|
|
params := []interface{}{
|
|
cmd.NRequired,
|
|
cmd.Keys,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *CreateMultisigCmd) 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
|
|
}
|
|
|
|
var nRequired int
|
|
if err := json.Unmarshal(r.Params[0], &nRequired); err != nil {
|
|
return fmt.Errorf("first parameter 'nrequired' must be an integer: %v", err)
|
|
}
|
|
|
|
var keys []string
|
|
if err := json.Unmarshal(r.Params[1], &keys); err != nil {
|
|
return fmt.Errorf("second parameter 'keys' must be an array of strings: %v", err)
|
|
}
|
|
|
|
newCmd, err := NewCreateMultisigCmd(r.Id, 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 uint32 `json:"vout"`
|
|
}
|
|
|
|
// 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) {
|
|
floatAmounts := make(map[string]float64)
|
|
for k, v := range cmd.Amounts {
|
|
floatAmounts[k] = float64(v) / 1e8
|
|
}
|
|
|
|
params := []interface{}{
|
|
cmd.Inputs,
|
|
floatAmounts,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *CreateRawTransactionCmd) 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
|
|
}
|
|
|
|
var inputs []TransactionInput
|
|
if err := json.Unmarshal(r.Params[0], &inputs); err != nil {
|
|
return fmt.Errorf("first parameter 'inputs' must be a JSON array "+
|
|
"of transaction input JSON objects: %v", err)
|
|
}
|
|
|
|
var amounts map[string]float64
|
|
if err := json.Unmarshal(r.Params[1], &amounts); err != nil {
|
|
return fmt.Errorf("second parameter 'amounts' must be a JSON object: %v", err)
|
|
}
|
|
|
|
intAmounts := make(map[string]int64, len(amounts))
|
|
for k, v := range amounts {
|
|
amount, err := JSONToAmount(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
intAmounts[k] = amount
|
|
}
|
|
|
|
newCmd, err := NewCreateRawTransactionCmd(r.Id, inputs, intAmounts)
|
|
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) {
|
|
params := []interface{}{
|
|
cmd.LevelSpec,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *DebugLevelCmd) 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) != 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var levelSpec string
|
|
if err := json.Unmarshal(r.Params[0], &levelSpec); err != nil {
|
|
return fmt.Errorf("first parameter 'levelspec' must be a string: %v", err)
|
|
}
|
|
|
|
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) {
|
|
params := []interface{}{
|
|
cmd.HexTx,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *DecodeRawTransactionCmd) 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) != 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var hextx string
|
|
if err := json.Unmarshal(r.Params[0], &hextx); err != nil {
|
|
return fmt.Errorf("first parameter 'hextx' must be a string: %v", err)
|
|
}
|
|
|
|
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) {
|
|
params := []interface{}{
|
|
cmd.HexScript,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *DecodeScriptCmd) 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) != 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var hexscript string
|
|
if err := json.Unmarshal(r.Params[0], &hexscript); err != nil {
|
|
return fmt.Errorf("first parameter 'hexscript' must be a string: %v", err)
|
|
}
|
|
|
|
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) {
|
|
params := []interface{}{
|
|
cmd.Address,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *DumpPrivKeyCmd) 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) != 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var address string
|
|
if err := json.Unmarshal(r.Params[0], &address); err != nil {
|
|
return fmt.Errorf("first parameter 'address' must be a string: %v", err)
|
|
}
|
|
|
|
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) {
|
|
params := []interface{}{
|
|
cmd.Filename,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *DumpWalletCmd) 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) != 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var filename string
|
|
if err := json.Unmarshal(r.Params[0], &filename); err != nil {
|
|
return fmt.Errorf("first parameter 'filename' must be a string: %v", err)
|
|
}
|
|
|
|
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) {
|
|
params := []interface{}{
|
|
cmd.Passphrase,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *EncryptWalletCmd) 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) != 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var passphrase string
|
|
if err := json.Unmarshal(r.Params[0], &passphrase); err != nil {
|
|
return fmt.Errorf("first parameter 'passphrase' must be a string: %v", err)
|
|
}
|
|
|
|
newCmd, err := NewEncryptWalletCmd(r.Id, passphrase)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
*cmd = *newCmd
|
|
return nil
|
|
}
|
|
|
|
// EstimateFeeCmd is a type handling custom marshaling and
|
|
// unmarshaling of estimatefee JSON RPC commands.
|
|
type EstimateFeeCmd struct {
|
|
id interface{}
|
|
NumBlocks int64
|
|
}
|
|
|
|
// Enforce that EstimateFeeCmd satisifies the Cmd interface.
|
|
var _ Cmd = &EstimateFeeCmd{}
|
|
|
|
// NewEstimateFeeCmd creates a new EstimateFeeCmd.
|
|
func NewEstimateFeeCmd(id interface{}, numblocks int64) (*EstimateFeeCmd, error) {
|
|
return &EstimateFeeCmd{
|
|
id: id,
|
|
NumBlocks: numblocks,
|
|
}, nil
|
|
}
|
|
|
|
// Id satisfies the Cmd interface by returning the id of the command.
|
|
func (cmd *EstimateFeeCmd) Id() interface{} {
|
|
return cmd.id
|
|
}
|
|
|
|
// Method satisfies the Cmd interface by returning the json method.
|
|
func (cmd *EstimateFeeCmd) Method() string {
|
|
return "estimatefee"
|
|
}
|
|
|
|
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
|
|
func (cmd *EstimateFeeCmd) MarshalJSON() ([]byte, error) {
|
|
params := []interface{}{
|
|
cmd.NumBlocks,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *EstimateFeeCmd) 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) != 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var numblocks int64
|
|
if err := json.Unmarshal(r.Params[0], &numblocks); err != nil {
|
|
return fmt.Errorf("first parameter 'numblocks' must be an integer: %v", err)
|
|
}
|
|
|
|
newCmd, err := NewEstimateFeeCmd(r.Id, numblocks)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
*cmd = *newCmd
|
|
return nil
|
|
}
|
|
|
|
// EstimatePriorityCmd is a type handling custom marshaling and
|
|
// unmarshaling of estimatepriority JSON RPC commands.
|
|
type EstimatePriorityCmd struct {
|
|
id interface{}
|
|
NumBlocks int64
|
|
}
|
|
|
|
// Enforce that EstimatePriorityCmd satisifies the Cmd interface.
|
|
var _ Cmd = &EstimatePriorityCmd{}
|
|
|
|
// NewEstimatePriorityCmd creates a new EstimatePriorityCmd.
|
|
func NewEstimatePriorityCmd(id interface{}, numblocks int64) (*EstimatePriorityCmd, error) {
|
|
return &EstimatePriorityCmd{
|
|
id: id,
|
|
NumBlocks: numblocks,
|
|
}, nil
|
|
}
|
|
|
|
// Id satisfies the Cmd interface by returning the id of the command.
|
|
func (cmd *EstimatePriorityCmd) Id() interface{} {
|
|
return cmd.id
|
|
}
|
|
|
|
// Method satisfies the Cmd interface by returning the json method.
|
|
func (cmd *EstimatePriorityCmd) Method() string {
|
|
return "estimatepriority"
|
|
}
|
|
|
|
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
|
|
func (cmd *EstimatePriorityCmd) MarshalJSON() ([]byte, error) {
|
|
params := []interface{}{
|
|
cmd.NumBlocks,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *EstimatePriorityCmd) 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) != 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var numblocks int64
|
|
if err := json.Unmarshal(r.Params[0], &numblocks); err != nil {
|
|
return fmt.Errorf("first parameter 'numblocks' must be an integer: %v", err)
|
|
}
|
|
|
|
newCmd, err := NewEstimatePriorityCmd(r.Id, numblocks)
|
|
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) {
|
|
params := []interface{}{
|
|
cmd.Address,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetAccountCmd) 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) != 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var address string
|
|
if err := json.Unmarshal(r.Params[0], &address); err != nil {
|
|
return fmt.Errorf("first parameter 'address' must be a string: %v", err)
|
|
}
|
|
|
|
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) {
|
|
params := []interface{}{
|
|
cmd.Account,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetAccountAddressCmd) 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) != 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
var account string
|
|
if err := json.Unmarshal(r.Params[0], &account); err != nil {
|
|
return fmt.Errorf("first parameter 'account' must be a string: %v", err)
|
|
}
|
|
|
|
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) {
|
|
params := []interface{}{
|
|
cmd.Dns,
|
|
}
|
|
|
|
if cmd.Node != "" {
|
|
params = append(params, cmd.Node)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetAddedNodeInfoCmd) 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) < 1 || len(r.Params) > 2 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var dns bool
|
|
if err := json.Unmarshal(r.Params[0], &dns); err != nil {
|
|
return fmt.Errorf("first parameter 'dns' must be a bool: %v", err)
|
|
}
|
|
|
|
var node string
|
|
if len(r.Params) > 1 {
|
|
if err := json.Unmarshal(r.Params[1], &node); err != nil {
|
|
return fmt.Errorf("second optional parameter 'node' must be a string: %v", err)
|
|
}
|
|
}
|
|
|
|
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) {
|
|
params := []interface{}{
|
|
cmd.Account,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetAddressesByAccountCmd) 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) != 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var account string
|
|
if err := json.Unmarshal(r.Params[0], &account); err != nil {
|
|
return fmt.Errorf("first parameter 'account' must be a string: %v", err)
|
|
}
|
|
|
|
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 = 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) {
|
|
params := make([]interface{}, 0, 2)
|
|
if cmd.Account != nil {
|
|
params = append(params, cmd.Account)
|
|
}
|
|
if cmd.MinConf != 1 {
|
|
params = append(params, cmd.MinConf)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetBalanceCmd) 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
|
|
}
|
|
|
|
optArgs := make([]interface{}, 0, 2)
|
|
if len(r.Params) > 0 {
|
|
var account string
|
|
if err := json.Unmarshal(r.Params[0], &account); err != nil {
|
|
return fmt.Errorf("first optional parameter 'account' must be a string: %v", err)
|
|
}
|
|
optArgs = append(optArgs, account)
|
|
}
|
|
|
|
if len(r.Params) > 1 {
|
|
var minconf int
|
|
if err := json.Unmarshal(r.Params[1], &minconf); err != nil {
|
|
return fmt.Errorf("second optional parameter 'minconf' must be an integer: %v", err)
|
|
}
|
|
optArgs = append(optArgs, 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.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), []interface{}{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetBestBlockHashCmd) 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) > 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) {
|
|
params := make([]interface{}, 1, 3)
|
|
params[0] = cmd.Hash
|
|
if !cmd.Verbose {
|
|
// set optional verbose argument to false
|
|
params = append(params, false)
|
|
} else if cmd.VerboseTx {
|
|
// set optional verbose argument to true
|
|
params = append(params, true)
|
|
// set optional verboseTx argument to true
|
|
params = append(params, true)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetBlockCmd) 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) > 3 || len(r.Params) < 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var hash string
|
|
if err := json.Unmarshal(r.Params[0], &hash); err != nil {
|
|
return fmt.Errorf("first parameter 'hash' must be a string: %v", err)
|
|
}
|
|
|
|
optArgs := make([]bool, 0, 2)
|
|
if len(r.Params) > 1 {
|
|
var verbose bool
|
|
if err := json.Unmarshal(r.Params[1], &verbose); err != nil {
|
|
return fmt.Errorf("second optional parameter 'verbose' must be a bool: %v", err)
|
|
}
|
|
optArgs = append(optArgs, verbose)
|
|
}
|
|
if len(r.Params) > 2 {
|
|
var verboseTx bool
|
|
if err := json.Unmarshal(r.Params[2], &verboseTx); err != nil {
|
|
return fmt.Errorf("third optional parameter 'verboseTx' must be a bool: %v", err)
|
|
}
|
|
optArgs = append(optArgs, verboseTx)
|
|
}
|
|
|
|
newCmd, err := NewGetBlockCmd(r.Id, hash, optArgs...)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
*cmd = *newCmd
|
|
return nil
|
|
}
|
|
|
|
// GetBlockChainInfoCmd is a type handling custom marshaling and
|
|
// unmarshaling of getblockchaininfo JSON RPC commands.
|
|
type GetBlockChainInfoCmd struct {
|
|
id interface{}
|
|
}
|
|
|
|
// Enforce that GetBlockChainInfoCmd satisifies the Cmd interface.
|
|
var _ Cmd = &GetBlockChainInfoCmd{}
|
|
|
|
// NewGetBlockChainInfoCmd creates a new GetBlockChainInfoCmd.
|
|
func NewGetBlockChainInfoCmd(id interface{}) (*GetBlockChainInfoCmd, error) {
|
|
return &GetBlockChainInfoCmd{
|
|
id: id,
|
|
}, nil
|
|
}
|
|
|
|
// Id satisfies the Cmd interface by returning the id of the command.
|
|
func (cmd *GetBlockChainInfoCmd) Id() interface{} {
|
|
return cmd.id
|
|
}
|
|
|
|
// Method satisfies the Cmd interface by returning the json method.
|
|
func (cmd *GetBlockChainInfoCmd) Method() string {
|
|
return "getblockchaininfo"
|
|
}
|
|
|
|
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
|
|
func (cmd *GetBlockChainInfoCmd) MarshalJSON() ([]byte, error) {
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), []interface{}{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetBlockChainInfoCmd) 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) > 0 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
newCmd, err := NewGetBlockChainInfoCmd(r.Id)
|
|
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.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), []interface{}{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetBlockCountCmd) 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) != 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) {
|
|
params := []interface{}{
|
|
cmd.Index,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetBlockHashCmd) 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) != 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var index int64
|
|
if err := json.Unmarshal(r.Params[0], &index); err != nil {
|
|
return fmt.Errorf("first parameter 'index' must be an integer: %v", err)
|
|
}
|
|
|
|
newCmd, err := NewGetBlockHashCmd(r.Id, index)
|
|
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,omitempty"`
|
|
|
|
// Optional long polling.
|
|
LongPollID string `json:"longpollid,omitempty"`
|
|
|
|
// Optional template tweaking. SigOpLimit and SizeLimit can be int64
|
|
// or bool.
|
|
SigOpLimit interface{} `json:"sigoplimit,omitempty"`
|
|
SizeLimit interface{} `json:"sizelimit,omitempty"`
|
|
MaxVersion uint32 `json:"maxversion,omitempty"`
|
|
|
|
// Basic pool extension from BIP 0023.
|
|
Target string `json:"target,omitempty"`
|
|
|
|
// Block proposal from BIP 0023. Data is only provided when Mode is
|
|
// "proposal".
|
|
Data string `json:"data,omitempty"`
|
|
WorkID string `json:"workid,omitempty"`
|
|
}
|
|
|
|
// isFloatInt64 returns whether the passed float64 is a whole number that safely
|
|
// fits into a 64-bit integer.
|
|
func isFloatInt64(a float64) bool {
|
|
return a == float64(int64(a))
|
|
}
|
|
|
|
// 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]
|
|
switch val := request.SigOpLimit.(type) {
|
|
case nil:
|
|
case bool:
|
|
case int64:
|
|
case float64:
|
|
if !isFloatInt64(val) {
|
|
return nil, errors.New("the sigoplimit field " +
|
|
"must be unspecified, a boolean, or a " +
|
|
"64-bit integer")
|
|
}
|
|
request.SigOpLimit = int64(val)
|
|
default:
|
|
return nil, errors.New("the sigoplimit field " +
|
|
"must be unspecified, a boolean, or a 64-bit " +
|
|
"integer")
|
|
}
|
|
switch val := request.SizeLimit.(type) {
|
|
case nil:
|
|
case bool:
|
|
case int64:
|
|
case float64:
|
|
if !isFloatInt64(val) {
|
|
return nil, errors.New("the sizelimit field " +
|
|
"must be unspecified, a boolean, or a " +
|
|
"64-bit integer")
|
|
}
|
|
request.SizeLimit = int64(val)
|
|
default:
|
|
return nil, errors.New("the sizelimit field " +
|
|
"must be unspecified, a boolean, or a 64-bit " +
|
|
"integer")
|
|
}
|
|
}
|
|
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) {
|
|
params := make([]interface{}, 0, 1)
|
|
if cmd.Request != nil {
|
|
params = append(params, cmd.Request)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetBlockTemplateCmd) 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) > 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
optArgs := make([]*TemplateRequest, 0, 1)
|
|
if len(r.Params) > 0 {
|
|
var template TemplateRequest
|
|
if err := json.Unmarshal(r.Params[0], &template); err != nil {
|
|
return fmt.Errorf("first optional parameter 'template' must be a template request JSON object: %v", err)
|
|
}
|
|
optArgs = append(optArgs, &template)
|
|
}
|
|
|
|
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.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), []interface{}{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetConnectionCountCmd) 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) != 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.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), []interface{}{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetDifficultyCmd) 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) != 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.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), []interface{}{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetGenerateCmd) 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) != 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.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), []interface{}{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetHashesPerSecCmd) 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) != 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.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), []interface{}{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetInfoCmd) 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) != 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.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), []interface{}{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetMiningInfoCmd) 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) != 0 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
newCmd, err := NewGetMiningInfoCmd(r.Id)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
*cmd = *newCmd
|
|
return nil
|
|
}
|
|
|
|
// GetNetworkInfoCmd is a type handling custom marshaling and
|
|
// unmarshaling of getnetworkinfo JSON RPC commands.
|
|
type GetNetworkInfoCmd struct {
|
|
id interface{}
|
|
}
|
|
|
|
// Enforce that GetNetworkInfoCmd satisifies the Cmd interface.
|
|
var _ Cmd = &GetNetworkInfoCmd{}
|
|
|
|
// NewGetNetworkInfoCmd creates a new GetNetworkInfoCmd.
|
|
func NewGetNetworkInfoCmd(id interface{}) (*GetNetworkInfoCmd, error) {
|
|
return &GetNetworkInfoCmd{
|
|
id: id,
|
|
}, nil
|
|
}
|
|
|
|
// Id satisfies the Cmd interface by returning the id of the command.
|
|
func (cmd *GetNetworkInfoCmd) Id() interface{} {
|
|
return cmd.id
|
|
}
|
|
|
|
// Method satisfies the Cmd interface by returning the json method.
|
|
func (cmd *GetNetworkInfoCmd) Method() string {
|
|
return "getnetworkinfo"
|
|
}
|
|
|
|
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
|
|
func (cmd *GetNetworkInfoCmd) MarshalJSON() ([]byte, error) {
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), []interface{}{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetNetworkInfoCmd) 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) > 0 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
newCmd, err := NewGetNetworkInfoCmd(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.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), []interface{}{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetNetTotalsCmd) 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) != 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) {
|
|
params := make([]interface{}, 0, 2)
|
|
if cmd.Blocks != 120 || cmd.Height != -1 {
|
|
params = append(params, cmd.Blocks)
|
|
}
|
|
if cmd.Height != -1 {
|
|
params = append(params, cmd.Height)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetNetworkHashPSCmd) 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
|
|
}
|
|
|
|
optArgs := make([]int, 0, 2)
|
|
if len(r.Params) > 0 {
|
|
var blocks int
|
|
if err := json.Unmarshal(r.Params[0], &blocks); err != nil {
|
|
return fmt.Errorf("first optional parameter 'blocks' must be an integer: %v", err)
|
|
}
|
|
optArgs = append(optArgs, blocks)
|
|
}
|
|
|
|
if len(r.Params) > 1 {
|
|
var height int
|
|
if err := json.Unmarshal(r.Params[1], &height); err != nil {
|
|
return fmt.Errorf("second optional parameter 'height' must be an integer: %v", err)
|
|
}
|
|
optArgs = append(optArgs, 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) {
|
|
params := make([]interface{}, 0, 1)
|
|
if cmd.Account != "" {
|
|
params = append(params, cmd.Account)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetNewAddressCmd) 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) > 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
optArgs := make([]string, 0, 1)
|
|
if len(r.Params) > 0 {
|
|
var account string
|
|
if err := json.Unmarshal(r.Params[0], &account); err != nil {
|
|
return fmt.Errorf("first optional parameter 'account' must be a string: %v", err)
|
|
}
|
|
optArgs = append(optArgs, account)
|
|
}
|
|
|
|
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.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), []interface{}{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetPeerInfoCmd) 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) != 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) {
|
|
params := make([]interface{}, 0, 1)
|
|
if cmd.Account != "" {
|
|
params = append(params, cmd.Account)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetRawChangeAddressCmd) 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) > 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
optArgs := make([]string, 0, 1)
|
|
if len(r.Params) > 0 {
|
|
var account string
|
|
if err := json.Unmarshal(r.Params[0], &account); err != nil {
|
|
return fmt.Errorf("first optional parameter 'account' must be a string: %v", err)
|
|
}
|
|
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) {
|
|
params := make([]interface{}, 0, 1)
|
|
if cmd.Verbose {
|
|
params = append(params, cmd.Verbose)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetRawMempoolCmd) 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) > 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
optArgs := make([]bool, 0, 1)
|
|
if len(r.Params) > 0 {
|
|
var verbose bool
|
|
if err := json.Unmarshal(r.Params[0], &verbose); err != nil {
|
|
return fmt.Errorf("first optional parameter 'verbose' must be a bool: %v", err)
|
|
}
|
|
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 int
|
|
}
|
|
|
|
// Enforce that GetRawTransactionCmd satisifies the Cmd interface.
|
|
var _ Cmd = &GetRawTransactionCmd{}
|
|
|
|
// NewGetRawTransactionCmd creates a new GetRawTransactionCmd.
|
|
func NewGetRawTransactionCmd(id interface{}, txid string, optArgs ...int) (*GetRawTransactionCmd, error) {
|
|
var verbose int
|
|
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) {
|
|
params := make([]interface{}, 1, 2)
|
|
params[0] = cmd.Txid
|
|
if cmd.Verbose != 0 {
|
|
params = append(params, cmd.Verbose)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetRawTransactionCmd) 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 || len(r.Params) < 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var txid string
|
|
if err := json.Unmarshal(r.Params[0], &txid); err != nil {
|
|
return fmt.Errorf("first parameter 'txid' must be a string: %v", err)
|
|
}
|
|
|
|
optArgs := make([]int, 0, 1)
|
|
if len(r.Params) > 1 {
|
|
var verbose int
|
|
if err := json.Unmarshal(r.Params[1], &verbose); err != nil {
|
|
return fmt.Errorf("second optional parameter 'verbose' must be an integer: %v", err)
|
|
}
|
|
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{}, account string, optArgs ...int) (*GetReceivedByAccountCmd, error) {
|
|
if len(optArgs) > 1 {
|
|
return nil, ErrTooManyOptArgs
|
|
}
|
|
var minconf = 1
|
|
if len(optArgs) > 0 {
|
|
minconf = optArgs[0]
|
|
}
|
|
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) {
|
|
params := make([]interface{}, 1, 2)
|
|
params[0] = cmd.Account
|
|
if cmd.MinConf != 1 {
|
|
params = append(params, cmd.MinConf)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetReceivedByAccountCmd) 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
|
|
}
|
|
|
|
var account string
|
|
if err := json.Unmarshal(r.Params[0], &account); err != nil {
|
|
return fmt.Errorf("first parameter 'account' must be a string: %v", err)
|
|
}
|
|
|
|
optArgs := make([]int, 0, 1)
|
|
if len(r.Params) > 1 {
|
|
var minconf int
|
|
if err := json.Unmarshal(r.Params[1], &minconf); err != nil {
|
|
return fmt.Errorf("second optional parameter 'minconf' must be an integer: %v", err)
|
|
}
|
|
optArgs = append(optArgs, minconf)
|
|
}
|
|
|
|
newCmd, err := NewGetReceivedByAccountCmd(r.Id, account, 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{}, address string, optArgs ...int) (*GetReceivedByAddressCmd, error) {
|
|
if len(optArgs) > 1 {
|
|
return nil, ErrTooManyOptArgs
|
|
}
|
|
var minconf = 1
|
|
if len(optArgs) > 0 {
|
|
minconf = optArgs[0]
|
|
}
|
|
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 "getreceivedbyaddress"
|
|
}
|
|
|
|
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
|
|
func (cmd *GetReceivedByAddressCmd) MarshalJSON() ([]byte, error) {
|
|
params := make([]interface{}, 1, 2)
|
|
params[0] = cmd.Address
|
|
if cmd.MinConf != 1 {
|
|
params = append(params, cmd.MinConf)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetReceivedByAddressCmd) 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
|
|
}
|
|
|
|
var address string
|
|
if err := json.Unmarshal(r.Params[0], &address); err != nil {
|
|
return fmt.Errorf("first parameter 'address' must be a string: %v", err)
|
|
}
|
|
|
|
optArgs := make([]int, 0, 1)
|
|
if len(r.Params) > 1 {
|
|
var minconf int
|
|
if err := json.Unmarshal(r.Params[1], &minconf); err != nil {
|
|
return fmt.Errorf("second optional parameter 'minconf' must be an integer: %v", err)
|
|
}
|
|
optArgs = append(optArgs, minconf)
|
|
}
|
|
|
|
newCmd, err := NewGetReceivedByAddressCmd(r.Id, address, 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) {
|
|
params := []interface{}{
|
|
cmd.Txid,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetTransactionCmd) 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) != 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var txid string
|
|
if err := json.Unmarshal(r.Params[0], &txid); err != nil {
|
|
return fmt.Errorf("first parameter 'txid' must be a string: %v", err)
|
|
}
|
|
|
|
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) {
|
|
mempool := true
|
|
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) {
|
|
params := make([]interface{}, 2, 3)
|
|
params[0] = cmd.Txid
|
|
params[1] = cmd.Output
|
|
if !cmd.IncludeMempool {
|
|
params = append(params, cmd.IncludeMempool)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetTxOutCmd) 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) > 3 || len(r.Params) < 2 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var txid string
|
|
if err := json.Unmarshal(r.Params[0], &txid); err != nil {
|
|
return fmt.Errorf("first parameter 'txid' must be a string: %v", err)
|
|
}
|
|
|
|
var output int
|
|
if err := json.Unmarshal(r.Params[1], &output); err != nil {
|
|
return fmt.Errorf("second parameter 'output' must be an integer: %v", err)
|
|
}
|
|
|
|
optArgs := make([]bool, 0, 1)
|
|
if len(r.Params) > 2 {
|
|
var mempool bool
|
|
if err := json.Unmarshal(r.Params[2], &mempool); err != nil {
|
|
return fmt.Errorf("third optional parameter 'includemempool' must be a bool: %v", err)
|
|
}
|
|
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) {
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), []interface{}{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetTxOutSetInfoCmd) 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) > 0 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
newCmd, err := NewGetTxOutSetInfoCmd(r.Id)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
*cmd = *newCmd
|
|
return nil
|
|
}
|
|
|
|
// GetWorkCmd is a type handling custom marshaling and
|
|
// unmarshaling of getwork JSON RPC commands.
|
|
type GetWorkCmd struct {
|
|
id interface{}
|
|
Data string `json:"data,omitempty"`
|
|
}
|
|
|
|
// 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{}, optArgs ...string) (*GetWorkCmd, error) {
|
|
var data string
|
|
if len(optArgs) > 0 {
|
|
if len(optArgs) > 1 {
|
|
return nil, ErrTooManyOptArgs
|
|
}
|
|
data = optArgs[0]
|
|
}
|
|
return &GetWorkCmd{
|
|
id: id,
|
|
Data: data,
|
|
}, 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) {
|
|
params := make([]interface{}, 0, 1)
|
|
if cmd.Data != "" {
|
|
params = append(params, cmd.Data)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *GetWorkCmd) 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) > 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var data string
|
|
if len(r.Params) > 0 {
|
|
if err := json.Unmarshal(r.Params[0], &data); err != nil {
|
|
return fmt.Errorf("first optional parameter 'data' must be a string: %v", err)
|
|
}
|
|
}
|
|
|
|
newCmd, err := NewGetWorkCmd(r.Id, data)
|
|
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) {
|
|
params := make([]interface{}, 0, 1)
|
|
if cmd.Command != "" {
|
|
params = append(params, cmd.Command)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *HelpCmd) 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) > 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
optArgs := make([]string, 0, 1)
|
|
if len(r.Params) > 0 {
|
|
var command string
|
|
if err := json.Unmarshal(r.Params[0], &command); err != nil {
|
|
return fmt.Errorf("first optional parameter 'command' must be a string: %v", err)
|
|
}
|
|
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) {
|
|
params := make([]interface{}, 1, 3)
|
|
params[0] = cmd.PrivKey
|
|
if cmd.Label != "" || !cmd.Rescan {
|
|
params = append(params, cmd.Label)
|
|
}
|
|
if !cmd.Rescan {
|
|
params = append(params, cmd.Rescan)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *ImportPrivKeyCmd) 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) == 0 || len(r.Params) > 3 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var privkey string
|
|
if err := json.Unmarshal(r.Params[0], &privkey); err != nil {
|
|
return fmt.Errorf("first parameter 'privkey' must be a string: %v", err)
|
|
}
|
|
|
|
optArgs := make([]interface{}, 0, 2)
|
|
if len(r.Params) > 1 {
|
|
var label string
|
|
if err := json.Unmarshal(r.Params[1], &label); err != nil {
|
|
return fmt.Errorf("second optional parameter 'label' must be a string: %v", err)
|
|
}
|
|
optArgs = append(optArgs, label)
|
|
}
|
|
|
|
if len(r.Params) > 2 {
|
|
var rescan bool
|
|
if err := json.Unmarshal(r.Params[2], &rescan); err != nil {
|
|
return fmt.Errorf("third optional parameter 'rescan' must be a bool: %v", err)
|
|
}
|
|
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) {
|
|
params := []interface{}{
|
|
cmd.Filename,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *ImportWalletCmd) 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) != 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var filename string
|
|
if err := json.Unmarshal(r.Params[0], &filename); err != nil {
|
|
return fmt.Errorf("first parameter 'filename' must be a string: %v", err)
|
|
}
|
|
|
|
newCmd, err := NewImportWalletCmd(r.Id, filename)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
*cmd = *newCmd
|
|
return nil
|
|
}
|
|
|
|
// InvalidateBlockCmd is a type handling custom marshaling and
|
|
// unmarshaling of invalidateblock JSON RPC commands.
|
|
type InvalidateBlockCmd struct {
|
|
id interface{}
|
|
BlockHash string
|
|
}
|
|
|
|
// Enforce that InvalidateBlockCmd satisifies the Cmd interface.
|
|
var _ Cmd = &InvalidateBlockCmd{}
|
|
|
|
// NewInvalidateBlockCmd creates a new InvalidateBlockCmd. Optionally a
|
|
// pointer to a TemplateRequest may be provided.
|
|
func NewInvalidateBlockCmd(id interface{}, blockhash string) (*InvalidateBlockCmd, error) {
|
|
return &InvalidateBlockCmd{
|
|
id: id,
|
|
BlockHash: blockhash,
|
|
}, nil
|
|
}
|
|
|
|
// Id satisfies the Cmd interface by returning the id of the command.
|
|
func (cmd *InvalidateBlockCmd) Id() interface{} {
|
|
return cmd.id
|
|
}
|
|
|
|
// Method satisfies the Cmd interface by returning the json method.
|
|
func (cmd *InvalidateBlockCmd) Method() string {
|
|
return "invalidateblock"
|
|
}
|
|
|
|
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
|
|
func (cmd *InvalidateBlockCmd) MarshalJSON() ([]byte, error) {
|
|
params := []interface{}{
|
|
cmd.BlockHash,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *InvalidateBlockCmd) 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) != 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var blockhash string
|
|
if err := json.Unmarshal(r.Params[0], &blockhash); err != nil {
|
|
return fmt.Errorf("first parameter 'hash' must be a string: %v", err)
|
|
}
|
|
|
|
newCmd, err := NewInvalidateBlockCmd(r.Id, blockhash)
|
|
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{}
|
|
NewSize uint
|
|
}
|
|
|
|
// 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{}, optArgs ...uint) (*KeyPoolRefillCmd, error) {
|
|
newSize := uint(0)
|
|
|
|
if len(optArgs) > 0 {
|
|
if len(optArgs) > 1 {
|
|
return nil, ErrTooManyOptArgs
|
|
}
|
|
newSize = optArgs[0]
|
|
}
|
|
|
|
return &KeyPoolRefillCmd{
|
|
id: id,
|
|
NewSize: newSize,
|
|
}, 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) {
|
|
params := make([]interface{}, 0, 1)
|
|
if cmd.NewSize != 0 {
|
|
params = append(params, cmd.NewSize)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *KeyPoolRefillCmd) 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) > 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
optArgs := make([]uint, 0, 1)
|
|
if len(r.Params) > 0 {
|
|
var newsize uint
|
|
if err := json.Unmarshal(r.Params[0], &newsize); err != nil {
|
|
return fmt.Errorf("first optional parameter 'newsize' must be an unsigned integer: %v", err)
|
|
}
|
|
optArgs = append(optArgs, newsize)
|
|
}
|
|
|
|
newCmd, err := NewKeyPoolRefillCmd(r.Id, optArgs...)
|
|
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) {
|
|
params := make([]interface{}, 0, 1)
|
|
if cmd.MinConf != 1 {
|
|
params = append(params, cmd.MinConf)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *ListAccountsCmd) 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) > 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
optArgs := make([]int, 0, 1)
|
|
if len(r.Params) == 1 {
|
|
var minconf int
|
|
if err := json.Unmarshal(r.Params[0], &minconf); err != nil {
|
|
return fmt.Errorf("first optional parameter 'minconf' must be an integer: %v", err)
|
|
}
|
|
optArgs = append(optArgs, 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) {
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), []interface{}{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *ListAddressGroupingsCmd) 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) > 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) {
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), []interface{}{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *ListLockUnspentCmd) 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) > 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) {
|
|
params := make([]interface{}, 0, 2)
|
|
if cmd.MinConf != 1 || cmd.IncludeEmpty != false {
|
|
params = append(params, cmd.MinConf)
|
|
}
|
|
if cmd.IncludeEmpty != false {
|
|
params = append(params, cmd.IncludeEmpty)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *ListReceivedByAccountCmd) 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
|
|
}
|
|
|
|
optArgs := make([]interface{}, 0, 2)
|
|
if len(r.Params) > 0 {
|
|
var minconf int
|
|
if err := json.Unmarshal(r.Params[0], &minconf); err != nil {
|
|
return fmt.Errorf("first optional parameter 'minconf' must be an integer: %v", err)
|
|
}
|
|
optArgs = append(optArgs, minconf)
|
|
}
|
|
if len(r.Params) > 1 {
|
|
var includeempty bool
|
|
if err := json.Unmarshal(r.Params[1], &includeempty); err != nil {
|
|
return fmt.Errorf("second optional parameter 'includeempty' must be a bool: %v", err)
|
|
}
|
|
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) {
|
|
params := make([]interface{}, 0, 2)
|
|
if cmd.MinConf != 1 || cmd.IncludeEmpty != false {
|
|
params = append(params, cmd.MinConf)
|
|
}
|
|
if cmd.IncludeEmpty != false {
|
|
params = append(params, cmd.IncludeEmpty)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *ListReceivedByAddressCmd) 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
|
|
}
|
|
|
|
optArgs := make([]interface{}, 0, 2)
|
|
if len(r.Params) > 0 {
|
|
var minconf int
|
|
if err := json.Unmarshal(r.Params[0], &minconf); err != nil {
|
|
return fmt.Errorf("first optional parameter 'minconf' must be an integer: %v", err)
|
|
}
|
|
optArgs = append(optArgs, minconf)
|
|
}
|
|
if len(r.Params) > 1 {
|
|
var includeempty bool
|
|
if err := json.Unmarshal(r.Params[1], &includeempty); err != nil {
|
|
return fmt.Errorf("second optional parameter 'includeempty' must be a bool: %v", err)
|
|
}
|
|
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[1].(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) {
|
|
params := make([]interface{}, 0, 2)
|
|
if cmd.BlockHash != "" || cmd.TargetConfirmations != 1 {
|
|
params = append(params, cmd.BlockHash)
|
|
}
|
|
if cmd.TargetConfirmations != 1 {
|
|
params = append(params, cmd.TargetConfirmations)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *ListSinceBlockCmd) 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
|
|
}
|
|
|
|
optArgs := make([]interface{}, 0, 2)
|
|
if len(r.Params) > 0 {
|
|
var blockhash string
|
|
if err := json.Unmarshal(r.Params[0], &blockhash); err != nil {
|
|
return fmt.Errorf("first optional parameter 'blockhash' must be a string: %v", err)
|
|
}
|
|
optArgs = append(optArgs, blockhash)
|
|
}
|
|
if len(r.Params) > 1 {
|
|
var targetconfirmations int
|
|
if err := json.Unmarshal(r.Params[1], &targetconfirmations); err != nil {
|
|
return fmt.Errorf("second optional parameter 'targetconfirmations' must be an integer: %v", err)
|
|
}
|
|
optArgs = append(optArgs, 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) {
|
|
var account *string
|
|
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) {
|
|
params := make([]interface{}, 0, 3)
|
|
if cmd.Account != nil {
|
|
params = append(params, cmd.Account)
|
|
}
|
|
if cmd.Count != 10 || cmd.From != 0 {
|
|
params = append(params, cmd.Count)
|
|
}
|
|
if cmd.From != 0 {
|
|
params = append(params, cmd.From)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *ListTransactionsCmd) 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) > 3 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
optArgs := make([]interface{}, 0, 3)
|
|
if len(r.Params) > 0 {
|
|
var account string
|
|
if err := json.Unmarshal(r.Params[0], &account); err != nil {
|
|
return fmt.Errorf("first optional parameter 'account' must be a string: %v", err)
|
|
}
|
|
optArgs = append(optArgs, account)
|
|
}
|
|
if len(r.Params) > 1 {
|
|
var count int
|
|
if err := json.Unmarshal(r.Params[1], &count); err != nil {
|
|
return fmt.Errorf("second optional parameter 'count' must be an integer: %v", err)
|
|
}
|
|
optArgs = append(optArgs, count)
|
|
}
|
|
if len(r.Params) > 2 {
|
|
var from int
|
|
if err := json.Unmarshal(r.Params[2], &from); err != nil {
|
|
return fmt.Errorf("third optional parameter 'from' must be an integer: %v", err)
|
|
}
|
|
optArgs = append(optArgs, 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
|
|
Addresses []string
|
|
}
|
|
|
|
// 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 ...interface{}) (*ListUnspentCmd, error) {
|
|
minconf := 1
|
|
maxconf := 999999
|
|
var addresses []string
|
|
|
|
if len(optArgs) > 3 {
|
|
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 {
|
|
m, ok := optArgs[1].(int)
|
|
if !ok {
|
|
return nil, errors.New("second optional argument maxconf is not an int")
|
|
}
|
|
maxconf = m
|
|
}
|
|
if len(optArgs) > 2 {
|
|
a, ok := optArgs[2].([]string)
|
|
if !ok {
|
|
return nil, errors.New("third optional argument addresses is not an array of strings")
|
|
}
|
|
addresses = a
|
|
}
|
|
return &ListUnspentCmd{
|
|
id: id,
|
|
MinConf: minconf,
|
|
MaxConf: maxconf,
|
|
Addresses: addresses,
|
|
}, 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) {
|
|
params := make([]interface{}, 0, 3)
|
|
if cmd.MinConf != 1 || cmd.MaxConf != 99999 || len(cmd.Addresses) != 0 {
|
|
params = append(params, cmd.MinConf)
|
|
}
|
|
if cmd.MaxConf != 99999 || len(cmd.Addresses) != 0 {
|
|
params = append(params, cmd.MaxConf)
|
|
}
|
|
if len(cmd.Addresses) != 0 {
|
|
params = append(params, cmd.Addresses)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *ListUnspentCmd) 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) > 3 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
optArgs := make([]interface{}, 0, 3)
|
|
if len(r.Params) > 0 {
|
|
var minconf int
|
|
if err := json.Unmarshal(r.Params[0], &minconf); err != nil {
|
|
return fmt.Errorf("first optional parameter 'minconf' must be an integer: %v", err)
|
|
}
|
|
optArgs = append(optArgs, minconf)
|
|
}
|
|
if len(r.Params) > 1 {
|
|
var maxconf int
|
|
if err := json.Unmarshal(r.Params[1], &maxconf); err != nil {
|
|
return fmt.Errorf("second optional parameter 'maxconf' must be an integer: %v", err)
|
|
}
|
|
optArgs = append(optArgs, maxconf)
|
|
}
|
|
if len(r.Params) > 2 {
|
|
var addrs []string
|
|
if err := json.Unmarshal(r.Params[2], &addrs); err != nil {
|
|
return fmt.Errorf("third optional parameter 'addresses' must be an array of strings: %v", err)
|
|
}
|
|
optArgs = append(optArgs, addrs)
|
|
}
|
|
|
|
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) {
|
|
params := make([]interface{}, 1, 2)
|
|
params[0] = cmd.Unlock
|
|
if len(cmd.Transactions) > 0 {
|
|
params = append(params, cmd.Transactions)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *LockUnspentCmd) 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 || len(r.Params) < 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var unlock bool
|
|
if err := json.Unmarshal(r.Params[0], &unlock); err != nil {
|
|
return fmt.Errorf("first parameter 'unlock' must be a bool: %v", err)
|
|
}
|
|
|
|
optArgs := make([][]TransactionInput, 0, 1)
|
|
if len(r.Params) > 1 {
|
|
var transactions []TransactionInput
|
|
if err := json.Unmarshal(r.Params[1], &transactions); err != nil {
|
|
return fmt.Errorf("second optional parameter 'transactions' "+
|
|
"must be a JSON array of transaction input JSON objects: %v", err)
|
|
}
|
|
optArgs = append(optArgs, transactions)
|
|
}
|
|
|
|
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) {
|
|
params := make([]interface{}, 3, 5)
|
|
params[0] = cmd.FromAccount
|
|
params[1] = cmd.ToAccount
|
|
params[2] = float64(cmd.Amount) / 1e8 //convert to BTC
|
|
if cmd.MinConf != 1 || cmd.Comment != "" {
|
|
params = append(params, cmd.MinConf)
|
|
}
|
|
if cmd.Comment != "" {
|
|
params = append(params, cmd.Comment)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *MoveCmd) 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) > 5 || len(r.Params) < 3 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var fromaccount string
|
|
if err := json.Unmarshal(r.Params[0], &fromaccount); err != nil {
|
|
return fmt.Errorf("first parameter 'fromaccount' must be a string: %v", err)
|
|
}
|
|
|
|
var toaccount string
|
|
if err := json.Unmarshal(r.Params[1], &toaccount); err != nil {
|
|
return fmt.Errorf("second parameter 'toaccount' must be a string: %v", err)
|
|
}
|
|
|
|
var famount float64
|
|
if err := json.Unmarshal(r.Params[2], &famount); err != nil {
|
|
return fmt.Errorf("third parameter 'amount' must be a number: %v", err)
|
|
}
|
|
amount, err := JSONToAmount(famount)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
optArgs := make([]interface{}, 0, 2)
|
|
if len(r.Params) > 3 {
|
|
var minconf int
|
|
if err := json.Unmarshal(r.Params[3], &minconf); err != nil {
|
|
return fmt.Errorf("fourth optional parameter 'minconf' must be an integer: %v", err)
|
|
}
|
|
optArgs = append(optArgs, minconf)
|
|
}
|
|
if len(r.Params) > 4 {
|
|
var comment string
|
|
if err := json.Unmarshal(r.Params[4], &comment); err != nil {
|
|
return fmt.Errorf("fifth optional parameter 'comment' must be a string: %v", err)
|
|
}
|
|
optArgs = append(optArgs, comment)
|
|
}
|
|
|
|
newCmd, err := NewMoveCmd(r.Id, fromaccount, toaccount, amount,
|
|
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) {
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), []interface{}{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *PingCmd) 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) != 0 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
newCmd, err := NewPingCmd(r.Id)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
*cmd = *newCmd
|
|
return nil
|
|
}
|
|
|
|
// ReconsiderBlockCmd is a type handling custom marshaling and
|
|
// unmarshaling of reconsiderblock JSON RPC commands.
|
|
type ReconsiderBlockCmd struct {
|
|
id interface{}
|
|
BlockHash string
|
|
}
|
|
|
|
// Enforce that ReconsiderBlockCmd satisifies the Cmd interface.
|
|
var _ Cmd = &ReconsiderBlockCmd{}
|
|
|
|
// NewReconsiderBlockCmd creates a new ReconsiderBlockCmd. Optionally a
|
|
// pointer to a TemplateRequest may be provided.
|
|
func NewReconsiderBlockCmd(id interface{}, blockhash string) (*ReconsiderBlockCmd, error) {
|
|
return &ReconsiderBlockCmd{
|
|
id: id,
|
|
BlockHash: blockhash,
|
|
}, nil
|
|
}
|
|
|
|
// Id satisfies the Cmd interface by returning the id of the command.
|
|
func (cmd *ReconsiderBlockCmd) Id() interface{} {
|
|
return cmd.id
|
|
}
|
|
|
|
// Method satisfies the Cmd interface by returning the json method.
|
|
func (cmd *ReconsiderBlockCmd) Method() string {
|
|
return "reconsiderblock"
|
|
}
|
|
|
|
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
|
|
func (cmd *ReconsiderBlockCmd) MarshalJSON() ([]byte, error) {
|
|
params := []interface{}{
|
|
cmd.BlockHash,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *ReconsiderBlockCmd) 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) != 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var blockhash string
|
|
if err := json.Unmarshal(r.Params[0], &blockhash); err != nil {
|
|
return fmt.Errorf("first parameter 'hash' must be a string: %v", err)
|
|
}
|
|
|
|
newCmd, err := NewReconsiderBlockCmd(r.Id, blockhash)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
*cmd = *newCmd
|
|
return nil
|
|
}
|
|
|
|
// SearchRawTransactionCmd is a type handling custom marshaling and
|
|
// unmarshaling of sendrawtransaction JSON RPC commands.
|
|
type SearchRawTransactionCmd struct {
|
|
id interface{}
|
|
Address string
|
|
Verbose bool
|
|
Skip int
|
|
Count int
|
|
}
|
|
|
|
// NewSearchRawTransactionCmd creates a new SearchRawTransactionCmd.
|
|
func NewSearchRawTransactionCmd(id interface{}, address string,
|
|
optArgs ...interface{}) (*SearchRawTransactionCmd, error) {
|
|
verbose := true
|
|
var skip int
|
|
count := 100
|
|
|
|
if len(optArgs) > 3 {
|
|
return nil, ErrTooManyOptArgs
|
|
}
|
|
|
|
if len(optArgs) > 0 {
|
|
v, ok := optArgs[0].(bool)
|
|
if !ok {
|
|
return nil, errors.New("first optional argument verbose is not a bool")
|
|
}
|
|
|
|
verbose = v
|
|
}
|
|
if len(optArgs) > 1 {
|
|
s, ok := optArgs[1].(int)
|
|
if !ok {
|
|
return nil, errors.New("second optional argument skip is not an int")
|
|
}
|
|
skip = s
|
|
}
|
|
if len(optArgs) > 2 {
|
|
c, ok := optArgs[2].(int)
|
|
if !ok {
|
|
return nil, errors.New("third optional argument count is not an int")
|
|
}
|
|
|
|
count = c
|
|
}
|
|
|
|
return &SearchRawTransactionCmd{
|
|
id: id,
|
|
Address: address,
|
|
Verbose: verbose,
|
|
Skip: skip,
|
|
Count: count,
|
|
}, nil
|
|
}
|
|
|
|
// Id satisfies the Cmd interface by returning the id of the command.
|
|
func (cmd *SearchRawTransactionCmd) Id() interface{} {
|
|
return cmd.id
|
|
}
|
|
|
|
// Method satisfies the Cmd interface by returning the json method.
|
|
func (cmd *SearchRawTransactionCmd) Method() string {
|
|
return "searchrawtransaction"
|
|
}
|
|
|
|
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
|
|
func (cmd *SearchRawTransactionCmd) MarshalJSON() ([]byte, error) {
|
|
params := make([]interface{}, 1, 4)
|
|
params[0] = cmd.Address
|
|
if !cmd.Verbose || cmd.Skip != 0 || cmd.Count != 100 {
|
|
params = append(params, cmd.Verbose)
|
|
}
|
|
if cmd.Skip != 0 || cmd.Count != 100 {
|
|
params = append(params, cmd.Skip)
|
|
}
|
|
if cmd.Count != 100 {
|
|
params = append(params, cmd.Count)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *SearchRawTransactionCmd) 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) == 0 || len(r.Params) > 4 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var address string
|
|
if err := json.Unmarshal(r.Params[0], &address); err != nil {
|
|
return fmt.Errorf("first parameter 'address' must be a string: %v", err)
|
|
}
|
|
|
|
optArgs := make([]interface{}, 0, 3)
|
|
if len(r.Params) > 1 {
|
|
var verbose bool
|
|
if err := json.Unmarshal(r.Params[1], &verbose); err != nil {
|
|
return fmt.Errorf("second optional parameter 'verbose' must be an bool: %v", err)
|
|
}
|
|
optArgs = append(optArgs, verbose)
|
|
}
|
|
if len(r.Params) > 2 {
|
|
var skip int
|
|
if err := json.Unmarshal(r.Params[2], &skip); err != nil {
|
|
return fmt.Errorf("third optional parameter 'skip' must be an int: %v", err)
|
|
}
|
|
optArgs = append(optArgs, skip)
|
|
}
|
|
if len(r.Params) > 3 {
|
|
var count int
|
|
if err := json.Unmarshal(r.Params[3], &count); err != nil {
|
|
return fmt.Errorf("fourth optional parameter 'count' must be an int: %v", err)
|
|
}
|
|
optArgs = append(optArgs, count)
|
|
}
|
|
|
|
newCmd, err := NewSearchRawTransactionCmd(r.Id, address, optArgs...)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
*cmd = *newCmd
|
|
return nil
|
|
}
|
|
|
|
// Enforce that SearchRawTransactionCmd satisifies the Cmd interface.
|
|
var _ Cmd = &SearchRawTransactionCmd{}
|
|
|
|
// 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) {
|
|
params := make([]interface{}, 3, 6)
|
|
params[0] = cmd.FromAccount
|
|
params[1] = cmd.ToAddress
|
|
params[2] = float64(cmd.Amount) / 1e8 //convert to BTC
|
|
if cmd.MinConf != 1 || cmd.Comment != "" || cmd.CommentTo != "" {
|
|
params = append(params, cmd.MinConf)
|
|
}
|
|
if cmd.Comment != "" || cmd.CommentTo != "" {
|
|
params = append(params, cmd.Comment)
|
|
}
|
|
if cmd.CommentTo != "" {
|
|
params = append(params, cmd.CommentTo)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *SendFromCmd) 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) > 6 || len(r.Params) < 3 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var fromaccount string
|
|
if err := json.Unmarshal(r.Params[0], &fromaccount); err != nil {
|
|
return fmt.Errorf("first parameter 'fromaccount' must be a string: %v", err)
|
|
}
|
|
|
|
var toaddress string
|
|
if err := json.Unmarshal(r.Params[1], &toaddress); err != nil {
|
|
return fmt.Errorf("second parameter 'toaddress' must be a string: %v", err)
|
|
}
|
|
|
|
var famount float64
|
|
if err := json.Unmarshal(r.Params[2], &famount); err != nil {
|
|
return fmt.Errorf("third parameter 'amount' must be a number: %v", err)
|
|
}
|
|
amount, err := JSONToAmount(famount)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
optArgs := make([]interface{}, 0, 3)
|
|
if len(r.Params) > 3 {
|
|
var minconf int
|
|
if err := json.Unmarshal(r.Params[3], &minconf); err != nil {
|
|
return fmt.Errorf("fourth optional parameter 'minconf' must be an integer: %v", err)
|
|
}
|
|
optArgs = append(optArgs, minconf)
|
|
}
|
|
if len(r.Params) > 4 {
|
|
var comment string
|
|
if err := json.Unmarshal(r.Params[4], &comment); err != nil {
|
|
return fmt.Errorf("fifth optional parameter 'comment' must be a string: %v", err)
|
|
}
|
|
optArgs = append(optArgs, comment)
|
|
}
|
|
if len(r.Params) > 5 {
|
|
var commentto string
|
|
if err := json.Unmarshal(r.Params[5], &commentto); err != nil {
|
|
return fmt.Errorf("sixth optional parameter 'commentto' must be a string: %v", err)
|
|
}
|
|
optArgs = append(optArgs, commentto)
|
|
}
|
|
|
|
newCmd, err := NewSendFromCmd(r.Id, fromaccount, toaddress, amount,
|
|
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) {
|
|
floatAmounts := make(map[string]float64, len(cmd.Amounts))
|
|
for k, v := range cmd.Amounts {
|
|
floatAmounts[k] = float64(v) / 1e8
|
|
}
|
|
|
|
params := make([]interface{}, 2, 4)
|
|
params[0] = cmd.FromAccount
|
|
params[1] = floatAmounts
|
|
if cmd.MinConf != 1 || cmd.Comment != "" {
|
|
params = append(params, cmd.MinConf)
|
|
}
|
|
if cmd.Comment != "" {
|
|
params = append(params, cmd.Comment)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *SendManyCmd) 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) > 4 || len(r.Params) < 2 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var fromaccount string
|
|
if err := json.Unmarshal(r.Params[0], &fromaccount); err != nil {
|
|
return fmt.Errorf("first parameter 'fromaccount' must be a string: %v", err)
|
|
}
|
|
|
|
var famounts map[string]float64
|
|
if err := json.Unmarshal(r.Params[1], &famounts); err != nil {
|
|
return fmt.Errorf("second parameter 'amounts' must be a JSON object of address to amount mappings: %v", err)
|
|
}
|
|
amounts := make(map[string]int64, len(famounts))
|
|
for k, v := range famounts {
|
|
amount, err := JSONToAmount(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
amounts[k] = amount
|
|
}
|
|
|
|
optArgs := make([]interface{}, 0, 2)
|
|
if len(r.Params) > 2 {
|
|
var minconf int
|
|
if err := json.Unmarshal(r.Params[2], &minconf); err != nil {
|
|
return fmt.Errorf("third optional parameter 'minconf' must be an integer: %v", err)
|
|
}
|
|
optArgs = append(optArgs, minconf)
|
|
}
|
|
if len(r.Params) > 3 {
|
|
var comment string
|
|
if err := json.Unmarshal(r.Params[3], &comment); err != nil {
|
|
return fmt.Errorf("fourth optional parameter 'comment' must be a string: %v", err)
|
|
}
|
|
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
|
|
AllowHighFees bool
|
|
}
|
|
|
|
// 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, optArgs ...bool) (*SendRawTransactionCmd, error) {
|
|
allowHighFees := false
|
|
if len(optArgs) > 1 {
|
|
return nil, ErrTooManyOptArgs
|
|
}
|
|
if len(optArgs) == 1 {
|
|
allowHighFees = optArgs[0]
|
|
}
|
|
|
|
return &SendRawTransactionCmd{
|
|
id: id,
|
|
HexTx: hextx,
|
|
AllowHighFees: allowHighFees,
|
|
}, 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) {
|
|
params := make([]interface{}, 1, 2)
|
|
params[0] = cmd.HexTx
|
|
if cmd.AllowHighFees {
|
|
params = append(params, cmd.AllowHighFees)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *SendRawTransactionCmd) 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 || len(r.Params) < 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var hextx string
|
|
if err := json.Unmarshal(r.Params[0], &hextx); err != nil {
|
|
return fmt.Errorf("first parameter 'hextx' must be a string: %v", err)
|
|
}
|
|
|
|
optArgs := make([]bool, 0, 1)
|
|
if len(r.Params) > 1 {
|
|
var allowHighFees bool
|
|
if err := json.Unmarshal(r.Params[1], &allowHighFees); err != nil {
|
|
return fmt.Errorf("second optional parameter 'allowhighfees' must be a bool: %v", err)
|
|
}
|
|
optArgs = append(optArgs, allowHighFees)
|
|
}
|
|
|
|
newCmd, err := NewSendRawTransactionCmd(r.Id, hextx, optArgs...)
|
|
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) {
|
|
params := make([]interface{}, 2, 4)
|
|
params[0] = cmd.Address
|
|
params[1] = float64(cmd.Amount) / 1e8 //convert to BTC
|
|
if cmd.Comment != "" || cmd.CommentTo != "" {
|
|
params = append(params, cmd.Comment)
|
|
}
|
|
if cmd.CommentTo != "" {
|
|
params = append(params, cmd.CommentTo)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *SendToAddressCmd) 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) > 4 || len(r.Params) < 2 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var address string
|
|
if err := json.Unmarshal(r.Params[0], &address); err != nil {
|
|
return fmt.Errorf("first parameter 'address' must be a string: %v", err)
|
|
}
|
|
|
|
var famount float64
|
|
if err := json.Unmarshal(r.Params[1], &famount); err != nil {
|
|
return fmt.Errorf("second parameter 'amount' must be a number: %v", err)
|
|
}
|
|
amount, err := JSONToAmount(famount)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
optArgs := make([]interface{}, 0, 2)
|
|
if len(r.Params) > 2 {
|
|
var comment string
|
|
if err := json.Unmarshal(r.Params[2], &comment); err != nil {
|
|
return fmt.Errorf("third optional parameter 'comment' must be a string: %v", err)
|
|
}
|
|
optArgs = append(optArgs, comment)
|
|
}
|
|
if len(r.Params) > 3 {
|
|
var commentto string
|
|
if err := json.Unmarshal(r.Params[3], &commentto); err != nil {
|
|
return fmt.Errorf("fourth optional parameter 'commentto' must be a string: %v", err)
|
|
}
|
|
optArgs = append(optArgs, commentto)
|
|
}
|
|
|
|
newCmd, err := NewSendToAddressCmd(r.Id, address, amount, 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) {
|
|
params := []interface{}{
|
|
cmd.Address,
|
|
cmd.Account,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *SetAccountCmd) 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 || len(r.Params) < 2 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var address string
|
|
if err := json.Unmarshal(r.Params[0], &address); err != nil {
|
|
return fmt.Errorf("first parameter 'address' must be a string: %v", err)
|
|
}
|
|
|
|
var account string
|
|
if err := json.Unmarshal(r.Params[1], &account); err != nil {
|
|
return fmt.Errorf("second parameter 'account' must be a string: %v", err)
|
|
}
|
|
|
|
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 := -1
|
|
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) {
|
|
params := make([]interface{}, 1, 2)
|
|
params[0] = cmd.Generate
|
|
if cmd.GenProcLimit != -1 {
|
|
params = append(params, cmd.GenProcLimit)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *SetGenerateCmd) 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 || len(r.Params) < 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var generate bool
|
|
if err := json.Unmarshal(r.Params[0], &generate); err != nil {
|
|
return fmt.Errorf("first parameter 'generate' must be a bool: %v", err)
|
|
}
|
|
|
|
optArgs := make([]int, 0, 1)
|
|
if len(r.Params) > 1 {
|
|
var genproclimit int
|
|
if err := json.Unmarshal(r.Params[1], &genproclimit); err != nil {
|
|
return fmt.Errorf("second optional parameter 'genproclimit' must be an integer: %v", err)
|
|
}
|
|
optArgs = append(optArgs, 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) {
|
|
params := []interface{}{
|
|
float64(cmd.Amount) / 1e8, //convert to BTC
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *SetTxFeeCmd) 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) != 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var famount float64
|
|
if err := json.Unmarshal(r.Params[0], &famount); err != nil {
|
|
return fmt.Errorf("first parameter 'amount' must be a number: %v", err)
|
|
}
|
|
amount, err := JSONToAmount(famount)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
newCmd, err := NewSetTxFeeCmd(r.Id, amount)
|
|
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) {
|
|
params := []interface{}{
|
|
cmd.Address,
|
|
cmd.Message,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *SignMessageCmd) 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
|
|
}
|
|
|
|
var address string
|
|
if err := json.Unmarshal(r.Params[0], &address); err != nil {
|
|
return fmt.Errorf("first parameter 'address' must be a string: %v", err)
|
|
}
|
|
|
|
var message string
|
|
if err := json.Unmarshal(r.Params[1], &message); err != nil {
|
|
return fmt.Errorf("second parameter 'message' must be a string: %v", err)
|
|
}
|
|
|
|
newCmd, err := NewSignMessageCmd(r.Id, address, message)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
*cmd = *newCmd
|
|
return nil
|
|
}
|
|
|
|
// RawTxInput models the data needed for a raw tx input.
|
|
type RawTxInput struct {
|
|
Txid string `json:"txid"`
|
|
Vout uint32 `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) {
|
|
params := make([]interface{}, 1, 4)
|
|
params[0] = cmd.RawTx
|
|
if len(cmd.Inputs) > 0 || len(cmd.PrivKeys) > 0 || cmd.Flags != "" {
|
|
params = append(params, cmd.Inputs)
|
|
}
|
|
if len(cmd.PrivKeys) > 0 || cmd.Flags != "" {
|
|
params = append(params, cmd.PrivKeys)
|
|
}
|
|
if cmd.Flags != "" {
|
|
params = append(params, cmd.Flags)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *SignRawTransactionCmd) 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) > 4 || len(r.Params) < 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var rawtx string
|
|
if err := json.Unmarshal(r.Params[0], &rawtx); err != nil {
|
|
return fmt.Errorf("first parameter 'rawtx' must be a string: %v", err)
|
|
}
|
|
|
|
optArgs := make([]interface{}, 0, 3)
|
|
if len(r.Params) > 1 {
|
|
var inputs []RawTxInput
|
|
if err := json.Unmarshal(r.Params[1], &inputs); err != nil {
|
|
return fmt.Errorf("second optional parameter 'inputs' "+
|
|
"must be a JSON array of raw transaction input JSON objects: %v", err)
|
|
}
|
|
optArgs = append(optArgs, inputs)
|
|
}
|
|
|
|
if len(r.Params) > 2 {
|
|
var privkeys []string
|
|
if err := json.Unmarshal(r.Params[2], &privkeys); err != nil {
|
|
return fmt.Errorf("third optional parameter 'privkeys' must be an array of strings: %v", err)
|
|
}
|
|
optArgs = append(optArgs, privkeys)
|
|
}
|
|
if len(r.Params) > 3 {
|
|
var flags string
|
|
if err := json.Unmarshal(r.Params[3], &flags); err != nil {
|
|
return fmt.Errorf("fourth optional parameter 'flags' must be a string: %v", err)
|
|
}
|
|
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) {
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), []interface{}{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *StopCmd) 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) != 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) {
|
|
params := make([]interface{}, 1, 2)
|
|
params[0] = cmd.HexBlock
|
|
if cmd.Options != nil {
|
|
params = append(params, cmd.Options)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *SubmitBlockCmd) 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 || len(r.Params) < 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var hexblock string
|
|
if err := json.Unmarshal(r.Params[0], &hexblock); err != nil {
|
|
return fmt.Errorf("first parameter 'hexblock' must be a string: %v", err)
|
|
}
|
|
|
|
optArgs := make([]*SubmitBlockOptions, 0, 1)
|
|
if len(r.Params) == 2 {
|
|
var options SubmitBlockOptions
|
|
if err := json.Unmarshal(r.Params[1], &options); err != nil {
|
|
return fmt.Errorf("second optional parameter 'options' must "+
|
|
"be a JSON object of submit block options: %v", err)
|
|
}
|
|
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) {
|
|
params := []interface{}{
|
|
cmd.Address,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *ValidateAddressCmd) 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) != 1 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var address string
|
|
if err := json.Unmarshal(r.Params[0], &address); err != nil {
|
|
return fmt.Errorf("first parameter 'address' must be a string: %v", err)
|
|
}
|
|
|
|
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) {
|
|
// XXX(oga) magic numbers
|
|
params := make([]interface{}, 0, 2)
|
|
if cmd.CheckLevel != 3 || cmd.CheckDepth != 288 {
|
|
params = append(params, cmd.CheckLevel)
|
|
}
|
|
if cmd.CheckDepth != 288 {
|
|
params = append(params, cmd.CheckDepth)
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *VerifyChainCmd) 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
|
|
}
|
|
|
|
optArgs := make([]int32, 0, 2)
|
|
if len(r.Params) > 0 {
|
|
var checklevel int32
|
|
if err := json.Unmarshal(r.Params[0], &checklevel); err != nil {
|
|
return fmt.Errorf("first optional parameter 'checklevel' must be a 32-bit integer: %v", err)
|
|
}
|
|
optArgs = append(optArgs, checklevel)
|
|
}
|
|
|
|
if len(r.Params) > 1 {
|
|
var checkdepth int32
|
|
if err := json.Unmarshal(r.Params[1], &checkdepth); err != nil {
|
|
return fmt.Errorf("second optional parameter 'checkdepth' must be a 32-bit integer: %v", err)
|
|
}
|
|
optArgs = append(optArgs, 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) {
|
|
params := []interface{}{
|
|
cmd.Address,
|
|
cmd.Signature,
|
|
cmd.Message,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *VerifyMessageCmd) 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) != 3 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var address string
|
|
if err := json.Unmarshal(r.Params[0], &address); err != nil {
|
|
return fmt.Errorf("first parameter 'address' must be a string: %v", err)
|
|
}
|
|
|
|
var signature string
|
|
if err := json.Unmarshal(r.Params[1], &signature); err != nil {
|
|
return fmt.Errorf("second parameter 'signature' must be a string: %v", err)
|
|
}
|
|
|
|
var message string
|
|
if err := json.Unmarshal(r.Params[2], &message); err != nil {
|
|
return fmt.Errorf("third parameter 'message' must be a string: %v", err)
|
|
}
|
|
|
|
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) {
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), []interface{}{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *WalletLockCmd) 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) != 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) {
|
|
params := []interface{}{
|
|
cmd.Passphrase,
|
|
cmd.Timeout,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *WalletPassphraseCmd) 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
|
|
}
|
|
|
|
var passphrase string
|
|
if err := json.Unmarshal(r.Params[0], &passphrase); err != nil {
|
|
return fmt.Errorf("first parameter 'passphrase' must be a string: %v", err)
|
|
}
|
|
|
|
var timeout int64
|
|
if err := json.Unmarshal(r.Params[1], &timeout); err != nil {
|
|
return fmt.Errorf("second parameter 'timeout' must be an integer: %v", err)
|
|
}
|
|
|
|
newCmd, err := NewWalletPassphraseCmd(r.Id, passphrase, 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) {
|
|
params := []interface{}{
|
|
cmd.OldPassphrase,
|
|
cmd.NewPassphrase,
|
|
}
|
|
|
|
// Fill and marshal a RawCmd.
|
|
raw, err := NewRawCmd(cmd.id, cmd.Method(), params)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return json.Marshal(raw)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the JSON encoding of cmd into cmd. Part of
|
|
// the Cmd interface.
|
|
func (cmd *WalletPassphraseChangeCmd) 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
|
|
}
|
|
|
|
var oldpassphrase string
|
|
if err := json.Unmarshal(r.Params[0], &oldpassphrase); err != nil {
|
|
return fmt.Errorf("first parameter 'oldpassphrase' must be a string: %v", err)
|
|
}
|
|
|
|
var newpassphrase string
|
|
if err := json.Unmarshal(r.Params[1], &newpassphrase); err != nil {
|
|
return fmt.Errorf("second parameter 'newpassphrase' must be a string: %v", err)
|
|
}
|
|
|
|
newCmd, err := NewWalletPassphraseChangeCmd(r.Id, oldpassphrase, newpassphrase)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
*cmd = *newCmd
|
|
return nil
|
|
}
|