6b3c3c7498
This commit contains the entire btcjson repository along with several changes needed to move all of the files into the btcjson directory in order to prepare it for merging. This does NOT update btcd or any of the other packages to use the new location as that will be done separately. - All import paths in the old btcjson test files have been changed to the new location - The coveralls badge has been removed since it unfortunately doesn't support coverage of sub-packages This is ongoing work toward #214.
7283 lines
181 KiB
Go
7283 lines
181 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 "importaddress":
|
|
cmd = new(ImportAddressCmd)
|
|
|
|
case "importpubkey":
|
|
cmd = new(ImportPubKeyCmd)
|
|
|
|
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 "searchrawtransactions":
|
|
cmd = new(SearchRawTransactionsCmd)
|
|
|
|
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
|
|
}
|
|
|
|
// ImportAddressCmd is a type handling custom marshaling and
|
|
// unmarshaling of importaddress JSON RPC commands.
|
|
type ImportAddressCmd struct {
|
|
id interface{}
|
|
Address string
|
|
Rescan bool
|
|
}
|
|
|
|
// Enforce that ImportAddressCmd satisifies the Cmd interface.
|
|
var _ Cmd = &ImportAddressCmd{}
|
|
|
|
// NewImportAddressCmd creates a new ImportAddressCmd.
|
|
func NewImportAddressCmd(id interface{}, address string, optArgs ...interface{}) (*ImportAddressCmd, error) {
|
|
rescan := true
|
|
var ok bool
|
|
|
|
if len(optArgs) > 1 {
|
|
return nil, ErrTooManyOptArgs
|
|
}
|
|
if len(optArgs) > 0 {
|
|
rescan, ok = optArgs[0].(bool)
|
|
if !ok {
|
|
return nil, errors.New("first optional argument rescan is not a bool")
|
|
}
|
|
}
|
|
return &ImportAddressCmd{
|
|
id: id,
|
|
Address: address,
|
|
Rescan: rescan,
|
|
}, nil
|
|
}
|
|
|
|
// Id satisfies the Cmd interface by returning the id of the command.
|
|
func (cmd *ImportAddressCmd) Id() interface{} {
|
|
return cmd.id
|
|
}
|
|
|
|
// Method satisfies the Cmd interface by returning the json method.
|
|
func (cmd *ImportAddressCmd) Method() string {
|
|
return "importaddress"
|
|
}
|
|
|
|
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
|
|
func (cmd *ImportAddressCmd) MarshalJSON() ([]byte, error) {
|
|
params := make([]interface{}, 1, 2)
|
|
params[0] = cmd.Address
|
|
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 *ImportAddressCmd) 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) > 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 optArgs []interface{}
|
|
if len(r.Params) > 1 {
|
|
var rescan bool
|
|
if err := json.Unmarshal(r.Params[1], &rescan); err != nil {
|
|
return fmt.Errorf("first optional parameter 'rescan' must be a bool: %v", err)
|
|
}
|
|
optArgs = append(optArgs, rescan)
|
|
}
|
|
|
|
newCmd, err := NewImportAddressCmd(r.Id, address, optArgs...)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
*cmd = *newCmd
|
|
return nil
|
|
}
|
|
|
|
// ImportPubKeyCmd is a type handling custom marshaling and
|
|
// unmarshaling of importpubkey JSON RPC commands.
|
|
type ImportPubKeyCmd struct {
|
|
id interface{}
|
|
PubKey string
|
|
Rescan bool
|
|
}
|
|
|
|
// Enforce that ImportPubKeyCmd satisifies the Cmd interface.
|
|
var _ Cmd = &ImportPubKeyCmd{}
|
|
|
|
// NewImportPubKeyCmd creates a new ImportPubKeyCmd.
|
|
func NewImportPubKeyCmd(id interface{}, pubkey string, optArgs ...interface{}) (*ImportPubKeyCmd, error) {
|
|
rescan := true
|
|
var ok bool
|
|
|
|
if len(optArgs) > 1 {
|
|
return nil, ErrTooManyOptArgs
|
|
}
|
|
if len(optArgs) > 0 {
|
|
rescan, ok = optArgs[0].(bool)
|
|
if !ok {
|
|
return nil, errors.New("first optional argument rescan is not a bool")
|
|
}
|
|
}
|
|
return &ImportPubKeyCmd{
|
|
id: id,
|
|
PubKey: pubkey,
|
|
Rescan: rescan,
|
|
}, nil
|
|
}
|
|
|
|
// Id satisfies the Cmd interface by returning the id of the command.
|
|
func (cmd *ImportPubKeyCmd) Id() interface{} {
|
|
return cmd.id
|
|
}
|
|
|
|
// Method satisfies the Cmd interface by returning the json method.
|
|
func (cmd *ImportPubKeyCmd) Method() string {
|
|
return "importpubkey"
|
|
}
|
|
|
|
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
|
|
func (cmd *ImportPubKeyCmd) MarshalJSON() ([]byte, error) {
|
|
params := make([]interface{}, 1, 2)
|
|
params[0] = cmd.PubKey
|
|
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 *ImportPubKeyCmd) 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) > 2 {
|
|
return ErrWrongNumberOfParams
|
|
}
|
|
|
|
var pubkey string
|
|
if err := json.Unmarshal(r.Params[0], &pubkey); err != nil {
|
|
return fmt.Errorf("first parameter 'pubkey' must be a string: %v", err)
|
|
}
|
|
|
|
var optArgs []interface{}
|
|
if len(r.Params) > 1 {
|
|
var rescan bool
|
|
if err := json.Unmarshal(r.Params[1], &rescan); err != nil {
|
|
return fmt.Errorf("first optional parameter 'rescan' must be a bool: %v", err)
|
|
}
|
|
optArgs = append(optArgs, rescan)
|
|
}
|
|
|
|
newCmd, err := NewImportPubKeyCmd(r.Id, pubkey, 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
|
|
}
|
|
|
|
// SearchRawTransactionsCmd is a type handling custom marshaling and
|
|
// unmarshaling of sendrawtransactions JSON RPC commands.
|
|
type SearchRawTransactionsCmd struct {
|
|
id interface{}
|
|
Address string
|
|
Verbose int
|
|
Skip int
|
|
Count int
|
|
}
|
|
|
|
// NewSearchRawTransactionsCmd creates a new SearchRawTransactionsCmd.
|
|
func NewSearchRawTransactionsCmd(id interface{}, address string,
|
|
optArgs ...interface{}) (*SearchRawTransactionsCmd, error) {
|
|
var skip int
|
|
verbose := 1
|
|
count := 100
|
|
|
|
if len(optArgs) > 3 {
|
|
return nil, ErrTooManyOptArgs
|
|
}
|
|
|
|
if len(optArgs) > 0 {
|
|
v, ok := optArgs[0].(int)
|
|
if !ok {
|
|
return nil, errors.New("first optional argument verbose is not a int")
|
|
}
|
|
|
|
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 &SearchRawTransactionsCmd{
|
|
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 *SearchRawTransactionsCmd) Id() interface{} {
|
|
return cmd.id
|
|
}
|
|
|
|
// Method satisfies the Cmd interface by returning the json method.
|
|
func (cmd *SearchRawTransactionsCmd) Method() string {
|
|
return "searchrawtransactions"
|
|
}
|
|
|
|
// MarshalJSON returns the JSON encoding of cmd. Part of the Cmd interface.
|
|
func (cmd *SearchRawTransactionsCmd) MarshalJSON() ([]byte, error) {
|
|
params := make([]interface{}, 1, 4)
|
|
params[0] = cmd.Address
|
|
if cmd.Verbose != 1 || 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 *SearchRawTransactionsCmd) 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 int
|
|
if err := json.Unmarshal(r.Params[1], &verbose); err != nil {
|
|
return fmt.Errorf("second optional parameter 'verbose' must be an int: %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 := NewSearchRawTransactionsCmd(r.Id, address, optArgs...)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
*cmd = *newCmd
|
|
return nil
|
|
}
|
|
|
|
// Enforce that SearchRawTransactionsCmd satisifies the Cmd interface.
|
|
var _ Cmd = &SearchRawTransactionsCmd{}
|
|
|
|
// 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
|
|
}
|